Você precisa criar um outro campo na database para ficar gravado se a pessoa já recebeu ou não. Depois é só verificar..
info
Group: Artesão
Joined: 21/07/13
Posts: 143
Reputation: +26

info
Group: Marquês
Joined: 03/02/13
Posts: 1.2k
Reputation: +254
Gender: Masculino
Tibia Character: Partiu Baladinha

Mais fácil usar um
setPlayerStorageValue(cid)
não acha?
info
Group: Conde
Joined: 10/07/08
Posts: 574
Reputation: +13
Gender: Masculino
Tibia Character: Hebi Of Amera

@GustavoCastilho
acho que não seja necessário criar outro campo.
@Fawz
Isso só vai fazer com que o player não pegue novamente mas quero que ele pegue uma vez por conta.
Obrigado aos dois ![]()
info
Group: Marquês
Joined: 16/06/07
Posts: 1.2k
Reputation: +377
Gender: Masculino
Tibia Character: Nenhum

O Gustavo está certo, mas tem uma função que você pode instalar e serve exatamente pra esse tipo de coisa: http://www.xtibia.com/forum/topic/220670-accountstoragevalue/.
Depois, é só você adicionar um if getAccountStorageValue(getPlayerAccount(cid), key) == -1 then. Em key você muda pra qualquer número. Não sei se chega a ser um problema, mas você não adiciona pontos ao jogador, você troca o que tiver por 50. Se quiser adicionar, faça assim:
OBS.: fiz algumas outras 'correções', mas peço que me perdoe se tiver mexido demais no script.
function onSay(cid, words, param)
if getAccountStorageValue(getPlayerAccount(cid), 69) == -1 then
local query = db.getResult("SELECT `guild_points` FROM `accounts` WHERE `id` = "..getPlayerAccountId(cid)..";")
local gp = query:getDataInt("guild_points")
gp = gp > 0 and gp or 0
gp = gp + 50
db.executeQuery("UPDATE `accounts` SET `guild_points` = "..gp.." WHERE `id` = "..getPlayerAccountId(cid)..";")
doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE, 'Você ganhou 40 pontos!')
else
doPlayerSendCancel(cid, "Você já ganhou o seu prêmio!")
end
return true
end
Edited Outubro 4 by omega blueheaven
info
Group: Conde
Joined: 10/07/08
Posts: 574
Reputation: +13
Gender: Masculino
Tibia Character: Hebi Of Amera

@Omega
Irei testar como você disse, não liga para o script sou amador^^
Abraço..
@EDIT
Deu erro mano na hora de executar...
O Gustavo está certo, mas tem uma função que você pode instalar e serve exatamente pra esse tipo de coisa: http://www.xtibia.com/forum/topic/220670-accountstoragevalue/.
Depois, é só você adicionar um if getAccountStorageValue(getPlayerAccount(cid), key) == -1 then. Em key você muda pra qualquer número. Não sei se chega a ser um problema, mas você não adiciona pontos ao jogador, você troca o que tiver por 50. Se quiser adicionar, faça assim:
OBS.: fiz algumas outras 'correções', mas peço que me perdoe se tiver mexido demais no script.
function onSay(cid, words, param) if getAccountStorageValue(getPlayerAccount(cid), 69) == -1 then local query = db.getResult("SELECT `guild_points` FROM `accounts` WHERE `id` = "..getPlayerAccountId(cid)..";") local gp = query:getDataInt("guild_points") gp = gp > 0 and gp or 0 gp = gp + 50 db.executeQuery("UPDATE `accounts` SET `guild_points` = "..gp.." WHERE `id` = "..getPlayerAccountId(cid)..";") doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE, 'Você ganhou 40 pontos!') else doPlayerSendCancel(cid, "Você já ganhou o seu prêmio!") end return true end@EDIT
Deu erro mano na hora de executar...
[23:44:28.915] [Error - TalkAction Interface][23:44:28.915] data/talkactions/scripts/freepoint.lua:onSay[23:44:28.915] Description:[23:44:28.915] data/talkactions/scripts/freepoint.lua:2: attempt to call global 'getAccountStorageValue' (a nil value)[23:44:28.915] stack traceback:[23:44:28.915] data/talkactions/scripts/freepoint.lua:2: in function <data/talkactions/scripts/freepoint.lua:1>
Edited Outubro 4 by cs007
info
Group: Marquês
Joined: 16/06/07
Posts: 1.2k
Reputation: +377
Gender: Masculino
Tibia Character: Nenhum

Então, esse tópico aqui http://www.xtibia.com/forum/topic/220670-accountstoragevalue/ serve pra adicionar essa função no seu servidor. Sem ela, não vai funcionar mesmo.
info
Group: Conde
Joined: 10/07/08
Posts: 574
Reputation: +13
Gender: Masculino
Tibia Character: Hebi Of Amera

Então, esse tópico aqui http://www.xtibia.com/forum/topic/220670-accountstoragevalue/ serve pra adicionar essa função no seu servidor. Sem ela, não vai funcionar mesmo.
Eu não queria ter que por novas tabelas só por causa de um comando, tem como me ajudar a setar o player? para ele usar uma vez.
Abraço e obrigado por ajudar ![]()
info
Group: Marquês
Joined: 16/06/07
Posts: 1.2k
Reputation: +377
Gender: Masculino
Tibia Character: Nenhum

function onSay(cid, words, param)
if getPlayerStorageValue(cid, 1823712) == -1 then
local query = db.getResult("SELECT `guild_points` FROM `accounts` WHERE `id` = "..getPlayerAccountId(cid)..";")
local gp = query:getDataInt("guild_points")
gp = gp > 0 and gp or 0
gp = gp + 50
db.executeQuery("UPDATE `accounts` SET `guild_points` = "..gp.." WHERE `id` = "..getPlayerAccountId(cid)..";")
doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE, 'Você ganhou 50 pontos!')
setPlayerStorageValue(cid, 1823712, 1)
else
doPlayerSendCancel(cid, "Você já ganhou o seu prêmio!")
end
return true
end
Mas acho que vale a pena instalar essa função. Ela é bem útil, não só pra esse comando, mas você pode vir a querer usá-la futuramente.
info
Group: Conde
Joined: 10/07/08
Posts: 574
Reputation: +13
Gender: Masculino
Tibia Character: Hebi Of Amera

Obrigado por me ajudar mano
Abraço



info
Group: Conde
Joined: 10/07/08
Posts: 574
Reputation: +13
Gender: Masculino
Tibia Character: Hebi Of Amera
Bom pessoal fiz um script para entregar points só que tem um problema não sei como limitar ele por conta para o player usar uma vez por account.
function onSay(cid, words, param) if (getPlayerLevel(cid) >= 8 then db.executeQuery("UPDATE `accounts` SET `guild_points` = 40;") doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE, 'Você ganhou 40 pontos!') else doPlayerSendCancel(cid, "Você já ganhou o seu prêmio!") end return TRUE endBom, sou novo como scripter não tenho muito tempo para me dedicar mais... Mas se alguém puder ajudar..!
Abraço