Ir para conteúdo
  • 0

Talkaction para retirar premium points do Site


Dennyz Dias

Pergunta

Alguem poderia me ajudar em 3 talkaction in game para website que consistem em !

 

- !sacar quantia - Retira tal quantia premium_points em determinado item atraves do jogo !

 

2° - !saldo - mostra quantos points tem no saldo do site in game

 

3° - !depositar quantia - Deposita quantia no saldo in game!

 

TFS 0.3.6

8.60 !

 

Alguem poderia me ajudar nessas talkactions !

 

Obrigado desde-ja :biggrin: :XTibia_smile:

 

REPP ++ :great:

Editado por Dennyz Dias
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Update:
O script continha um bug que permitia crashar o servidor (caso o player botasse um numero negativo) e tambem caso o parametro não fosse um numero, o player falava uma mensagem normal. Esse erros foram corrigidos:

situationpoints.lua:

local pointObj = 2160 --id do item "points"

function getAccountPoints(cid)
local res = db.getResult('SELECT `premium_points` FROM `accounts` WHERE id='..getPlayerAccountId(cid)..'')
  if(res:getID() == -1) then
     return false
  end
local ret = res:getDataInt("premium_points")
res:free()
return tonumber(ret)
end

function onSay(cid, words, param)
	if (words == '!sacar') then
		if param ~= "" then
			if tonumber(param) ~= nil then
				if 0 >= tonumber(param) then
				doPlayerSendCancel(cid, "O valor precisa ser acima de zero.")
				elseif 0 < tonumber(param) and tonumber(param) <= getAccountPoints(cid) then
				doPlayerAddItem(cid, pointObj, tonumber(param))
				db.executeQuery('UPDATE `accounts` SET `premium_points`='..getAccountPoints(cid) - tonumber(param)..' WHERE id='.. getPlayerAccountId(cid)..'')
				newPoints = getAccountPoints(cid)
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Você ainda possui '..newPoints..' premium points em sua conta.')
				else
				doPlayerSendCancel(cid, "Você não tem tantos premium points assim.")
				end
			else
			doPlayerSendCancel(cid, "O valor precisa ser um numero.")
			end
		else
		doPlayerSendCancel(cid, "Você precisa especificar um valor.")
		end
	elseif (words == '!saldo') then
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Seu saldo no shopping atual é de '..getAccountPoints(cid)..' Premium points.')
	elseif (words == '!depositar') then
		if param ~= "" then
			if tonumber(param) ~= nil then
				if 0 >= tonumber(param) then
				doPlayerSendCancel(cid, "O valor precisa ser acima de zero.")
				elseif 0 < tonumber(param) and tonumber(param) <= getPlayerItemCount(cid, pointObj) then
				doPlayerRemoveItem(cid, pointObj, tonumber(param))
				db.executeQuery('UPDATE `accounts` SET `premium_points`='..getAccountPoints(cid) + tonumber(param)..' WHERE id='.. getPlayerAccountId(cid)..'')
				newPoints = getAccountPoints(cid)
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Você acabou de depositar '..param..' premium points no shopping. Seu saldo agora é de '..newPoints..' premium points.')
				else
				doPlayerSendCancel(cid, "Você não tem tantos premium points assim.")
				end
			else
			doPlayerSendCancel(cid, "O valor precisa ser um numero.")
			end
		else
		doPlayerSendCancel(cid, "Você precisa especificar um valor.")
		end
	end
return true
end

A tag em talkactions.xml permanece a mesma.

Link para o comentário
Compartilhar em outros sites

  • 0

Então, nesse caso. Aqui vai, @@Dennyz Dias:

Vá em data\talkactions e adicione essa tag ao arquivo talkactions.xml:

<talkaction words="!sacar;!saldo;!depositar" event="script" value="situationpoints.lua"/>

Agora vá em data\talkactions\scripts e crie um arquivo chamado situationpoints.lua e coloque isso dentro:

local pointObj = 2160 --id do item "points"

function getAccountPoints(cid)
local res = db.getResult('SELECT `premium_points` FROM `accounts` WHERE id='..getPlayerAccountId(cid)..'')
  if(res:getID() == -1) then
     return false
  end
local ret = res:getDataInt("premium_points")
res:free()
return tonumber(ret)
end

function onSay(cid, words, param)
if (words == '!sacar') then
	if param ~= "" then
		if tonumber(param) <= getAccountPoints(cid) then
		doPlayerAddItem(cid, pointObj, tonumber(param))
		db.executeQuery('UPDATE `accounts` SET `premium_points`='..getAccountPoints(cid) - tonumber(param)..' WHERE id='.. getPlayerAccountId(cid)..'')
		newPoints = getAccountPoints(cid)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Você ainda possui '..newPoints..' premium points em sua conta.')
		else
		doPlayerSendCancel(cid, "Você não tem tantos premium points assim.")
		end
	else
	doPlayerSendCancel(cid, "Você precisa especificar um valor.")
	end
elseif (words == '!saldo') then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Seu saldo no shopping atual é de '..getAccountPoints(cid)..' Premium points.')
elseif (words == '!depositar') then
	if param ~= "" then
		if tonumber(param) <= getPlayerItemCount(cid, pointObj) then
		doPlayerRemoveItem(cid, pointObj, tonumber(param))
		db.executeQuery('UPDATE `accounts` SET `premium_points`='..getAccountPoints(cid) + tonumber(param)..' WHERE id='.. getPlayerAccountId(cid)..'')
		newPoints = getAccountPoints(cid)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Você acabou de depositar '..param..' premium points no shopping. Seu saldo agora é de '..newPoints..' premium points.')
		else
		doPlayerSendCancel(cid, "Você não tem tantos premium points assim.")
		end
	else
	doPlayerSendCancel(cid, "Você precisa especificar um valor.")
	end
end
return true
end

*minha unica duvida é quanto às querys... Vamo ver se desse jeito aí funciona sussa.

Link para o comentário
Compartilhar em outros sites

  • 0

Então, nesse caso. Aqui vai, @@Dennyz Dias:

Vá em data\talkactions e adicione essa tag ao arquivo talkactions.xml:

<talkaction words="!sacar;!saldo;!depositar" event="script" value="situationpoints.lua"/>

Agora vá em data\talkactions\scripts e crie um arquivo chamado situationpoints.lua e coloque isso dentro:

local pointObj = 2160 --id do item "points"

function getAccountPoints(cid)
local res = db.getResult('SELECT `premium_points` FROM `accounts` WHERE id='..getPlayerAccountId(cid)..'')
  if(res:getID() == -1) then
     return false
  end
local ret = res:getDataInt("premium_points")
res:free()
return tonumber(ret)
end

function onSay(cid, words, param)
if (words == '!sacar') then
	if param ~= "" then
		if tonumber(param) <= getAccountPoints(cid) then
		doPlayerAddItem(cid, pointObj, tonumber(param))
		db.executeQuery('UPDATE `accounts` SET `premium_points`='..getAccountPoints(cid) - tonumber(param)..' WHERE id='.. getPlayerAccountId(cid)..'')
		newPoints = getAccountPoints(cid)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Você ainda possui '..newPoints..' premium points em sua conta.')
		else
		doPlayerSendCancel(cid, "Você não tem tantos premium points assim.")
		end
	else
	doPlayerSendCancel(cid, "Você precisa especificar um valor.")
	end
elseif (words == '!saldo') then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Seu saldo no shopping atual é de '..getAccountPoints(cid)..' Premium points.')
elseif (words == '!depositar') then
	if param ~= "" then
		if tonumber(param) <= getPlayerItemCount(cid, pointObj) then
		doPlayerRemoveItem(cid, pointObj, tonumber(param))
		db.executeQuery('UPDATE `accounts` SET `premium_points`='..getAccountPoints(cid) + tonumber(param)..' WHERE id='.. getPlayerAccountId(cid)..'')
		newPoints = getAccountPoints(cid)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Você acabou de depositar '..param..' premium points no shopping. Seu saldo agora é de '..newPoints..' premium points.')
		else
		doPlayerSendCancel(cid, "Você não tem tantos premium points assim.")
		end
	else
	doPlayerSendCancel(cid, "Você precisa especificar um valor.")
	end
end
return true
end

*minha unica duvida é quanto às querys... Vamo ver se desse jeito aí funciona sussa.

certinhooooo Dan

100% cara shoooow so 1 coisa tera como add !depositar tambem!

Link para o comentário
Compartilhar em outros sites

  • 0

 

 

so 1 coisa tera como add !depositar tambem!

Não entendi direito o q vc quis dizer... sahusahu
Mas eu já botei pra que o player possa usar:
!sacar QUANTIA
!saldo
!depositar QUANTIA

Link para o comentário
Compartilhar em outros sites

  • 0

Já está com a tag, já testou?

Sim mano ja testei mais o depositar naum pegou nao da erro so nao pega ele fala default

Não entendi direito o q vc quis dizer... sahusahu

Mas eu já botei pra que o player possa usar:

!sacar QUANTIA

!saldo

!depositar QUANTIA

 

 

so depositar naum pego mano

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...