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

info
Grupo: Marquês
Registrado: 03/02/13
Posts: 1.2k
Reputação: +254
Gênero: Masculino
Char no Tibia: Partiu Baladinha

Mais fácil usar um
setPlayerStorageValue(cid)
não acha?
info
Grupo: Conde
Registrado: 10/07/08
Posts: 574
Reputação: +13
Gênero: Masculino
Char no Tibia: 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
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: 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
Editado Outubro 4 por omega blueheaven
info
Grupo: Conde
Registrado: 10/07/08
Posts: 574
Reputação: +13
Gênero: Masculino
Char no Tibia: 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>
Editado Outubro 4 por cs007
info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: 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
Grupo: Conde
Registrado: 10/07/08
Posts: 574
Reputação: +13
Gênero: Masculino
Char no Tibia: 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
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: 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
Grupo: Conde
Registrado: 10/07/08
Posts: 574
Reputação: +13
Gênero: Masculino
Char no Tibia: Hebi Of Amera

Obrigado por me ajudar mano
Abraço



info
Grupo: Conde
Registrado: 10/07/08
Posts: 574
Reputação: +13
Gênero: Masculino
Char no Tibia: 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