CS
pedido

Limitar uso do comando por account

Por cs007, 04 de out. de 2013 em Scripts

resolvido
script
11
1.2k
cs007C
04 de outubro de 2013 às 19:25

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
end

Bom, sou novo como scripter não tenho muito tempo para me dedicar mais... Mas se alguém puder ajudar..!

 

Abraço

GustavoCastilhoG
04 de outubro de 2013 às 19:30

Você precisa criar um outro campo na database para ficar gravado se a pessoa já recebeu ou não. Depois é só verificar..

LumusL
04 de outubro de 2013 às 19:36

Mais fácil usar um

 setPlayerStorageValue(cid)

não acha?

cs007C
04 de outubro de 2013 às 19:49

@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 :D

OmegaO
04 de outubro de 2013 às 20:23

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

cs007C
04 de outubro de 2013 às 23:46

@Omega

 

Irei testar como você disse, não liga para o script sou amador^^

 

Abraço..

 

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

 

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

OmegaO
04 de outubro de 2013 às 23:52

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.

cs007C
04 de outubro de 2013 às 23:56

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 :D

OmegaO
05 de outubro de 2013 às 00:00

 

 

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.

cs007C
05 de outubro de 2013 às 01:21

Obrigado por me ajudar mano :D Abraço

OmegaO
05 de outubro de 2013 às 01:23

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