Ir para conteúdo
  • 0

Limitar uso do comando por account


cs007

Pergunta

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

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

@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

Link para o comentário
Compartilhar em outros sites

  • 0

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 por omega blueheaven
Link para o comentário
Compartilhar em outros sites

  • 0

@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 por cs007
Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

 

 

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.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...