Ir para conteúdo
  • 0

TalkActions e Websites


julhinhuu

Pergunta

Olá boa tarde;

 

Gostaria de uma Talk ou algo do tipo que sacassem os pontos do site e depositassem eles.

 

Exemplo:

- Cabei de receber meus pontos e tem 100, ai in-game o player falaria !sacar 90 ai o comando sacaria esses 90 e diria o que ainda tem no site.

Exemplo da mensagem: Você ainda possui 10 premium points em sua conta no shopping.

 

- O mesmo server para depositar, o jogador não gastou os 90 e gostaria de guarda e não fica no deposito nem carregando com ele.. ai ele falaria !depositar 5, depositaria e ainda falava o seu saldo no site que seria 15.

Exemplo da mensagem: Você acabou de depositar 5 premium points no shopping.

 

- Para ver o saldo no caso o comando seria !saldo, e assim mostraria o total que ele tem no shop do site que é 15.

Exemplo da mensagem: Seu saldo no shopping atual é de 15 Premium points.

 

 

Agradeçeria muito, se tiver algum tutorial aqui do tipo, peço que me mandem o link por favor e obrigado desde já pela ajuda.

 

obs: Espero ter me expressado bem nestas informações.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Por distração, eu acabei me esquecendo que vc queria 3 talkactions. Por isso, aqui está o script final com as 3 talkactions:

*lembrando que ñ tenho como testar, e estou me baseando no q me foi dito sobre o tfs 1.2:

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

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

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

Basta usar uma tag em talkactions.xml apenas se atente a isso na tag:

words="!sacar;!saldo;!depositar"

 

Editado por Danihcv
bugs corrigidos
Link para o comentário
Compartilhar em outros sites

  • 0

Qual a table e qual a coluna (da data base) responsável pela quantidade de points q um player possui?

 

*preciso saber essas informações, pois isso pode mudar de servidor para servidor.

Link para o comentário
Compartilhar em outros sites

  • 0

Qual a table e qual a coluna (da data base) responsável pela quantidade de points q um player possui?

 

*preciso saber essas informações, pois isso pode mudar de servidor para servidor.

Bem Dani, eu não conheço muito bem mais os points fica na account do jogador creio eu que tudo se resumi na tabela account, e também eu uso o global do mitsuig 10.90 se é que saber o server que eu uso ajuda.

Link para o comentário
Compartilhar em outros sites

  • 0

Nesse caso, precisamos ter certeza.

 

Abra a table account e veja se existe alguma coluna chamada points.

 

Caso não exista, veja se vc tem a table z_shop_offer, caso tenha, confira se existe a coluna points. (to citando essa table e coluna pois é assim no meu)

Link para o comentário
Compartilhar em outros sites

  • 0

Nesse caso, precisamos ter certeza.

 

Abra a table account e veja se existe alguma coluna chamada points.

 

Caso não exista, veja se vc tem a table z_shop_offer, caso tenha, confira se existe a coluna points. (to citando essa table e coluna pois é assim no meu)

A minha não possui z_Shop, e sim está na tabela account como eu disse, possui o premium_points e guild_points.

Link para o comentário
Compartilhar em outros sites

  • 0

Beleza... Vamos lá... Eu estou muito enferrujado em sql, então vamos torcer pra dar certo... :p

Sem contar que eu não tenho ctz se as sua table e colunas são exatamente da forma como eu as escrevi no script.

 

Então, vamos ao teste. Aqui está o script de sacar. Se ele funcionar, aí vc me avise que eu faço os outros 2. Se ele ñ funcionar, diga qual o erro que deu e mande uma print da sua table accounts.

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

function onSay(cid, words, param)
	if param ~= "" then
playerPoints = db.executeQuery("SELECT FROM `accounts` GET `premium_points` WHERE id='.. getPlayerAccountId(cid)..'")
		if param <= playerPoints then
			doPlayerAddItem(cid, pointObj, param)
			db.executeQuery("UPDATE accounts SET `premium_points`='..playerPoints-param..' WHERE id='.. getPlayerAccountId(cid)..'")
	playerPointsNew = db.executeQuery("SELECT FROM `accounts` GET `premium_points` WHERE id='.. getPlayerAccountId(cid)..'")
			doPlayerSendTextMessage(cid, 22, "Você ainda possui '..playerPointsNew..' premium points em sua conta no shopping.")
		else
			doPlayerSendCancel(cid, "Você não tem tantos premium points assim.")
		end
	else
		doPlayerSendCancel(cid, "Você precisa especificar um valor.")
	end
return true
end

*caso não saiba instalar uma talkaction, avisa, que aí eu te ensino.

Link para o comentário
Compartilhar em outros sites

  • 0

Beleza... Vamos lá... Eu estou muito enferrujado em sql, então vamos torcer pra dar certo... :p

Sem contar que eu não tenho ctz se as sua table e colunas são exatamente da forma como eu as escrevi no script.

 

Então, vamos ao teste. Aqui está o script de sacar. Se ele funcionar, aí vc me avise que eu faço os outros 2. Se ele ñ funcionar, diga qual o erro que deu e mande uma print da sua table accounts.

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

function onSay(cid, words, param)
	if param ~= "" then
playerPoints = db.executeQuery("SELECT FROM `accounts` GET `premium_points` WHERE id='.. getPlayerAccountId(cid)..'")
		if param <= playerPoints then
			doPlayerAddItem(cid, pointObj, param)
			db.executeQuery("UPDATE accounts SET `premium_points`='..playerPoints-param..' WHERE id='.. getPlayerAccountId(cid)..'")
	playerPointsNew = db.executeQuery("SELECT FROM `accounts` GET `premium_points` WHERE id='.. getPlayerAccountId(cid)..'")
			doPlayerSendTextMessage(cid, 22, "Você ainda possui '..playerPointsNew..' premium points em sua conta no shopping.")
		else
			doPlayerSendCancel(cid, "Você não tem tantos premium points assim.")
		end
	else
		doPlayerSendCancel(cid, "Você precisa especificar um valor.")
	end
return true
end

*caso não saiba instalar uma talkaction, avisa, que aí eu te ensino.

 

A talk eu sei fazer, mais deu erro no executeQuery, e troquei para query e deu seguinte erro:

post-321783-0-27460000-1453688654_thumb.png

 

no ExecuteQuery deu o seguinte erro:

post-321783-0-11978900-1453688573_thumb.png

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

  • 0

Tenta assim:

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 param ~= "" then
		if param <= getAccountPoints(cid) then
			doPlayerAddItem(cid, pointObj, param)
			db.executeQuery('UPDATE `accounts` SET `premium_points`='..getAccountPoints(cid) - param..' WHERE id='.. getPlayerAccountId(cid)..'')
			newPoints = getAccountPoints(cid)
			doPlayerSendTextMessage(cid, 22, '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
return true
end

~Agradecimentos ao Christofer Ricardo pela função getAccountPoints

Link para o comentário
Compartilhar em outros sites

  • 0

Tenta assim:

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 param ~= "" then
		if param <= getAccountPoints(cid) then
			doPlayerAddItem(cid, pointObj, param)
			db.executeQuery('UPDATE `accounts` SET `premium_points`='..getAccountPoints(cid) - param..' WHERE id='.. getPlayerAccountId(cid)..'')
			newPoints = getAccountPoints(cid)
			doPlayerSendTextMessage(cid, 22, '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
return true
end

~Agradecimentos ao Christofer Ricardo pela função getAccountPoints

 

Ainda está dando um erro, será que porque não tem essa função?

post-321783-0-47150200-1453713138_thumb.png

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Ok. Dei uma "tradução" pra versão 1.1. Não to com acesso às funções do 1.2 no momento... Mas vou dar uma pesquisada.

 

Contudo, vê se assim já dá certo:

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

function getAccountPoints(cid)
  local res = db.getResult('SELECT `premium_points` FROM `accounts` WHERE id='..player:getAccountId(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 param ~= "" then
		if tonumber(param) <= getAccountPoints(cid) then
			doPlayerAddItem(cid, pointObj, param)
			db.executeQuery('UPDATE `accounts` SET `premium_points`='..getAccountPoints(cid) - param..' WHERE id='.. player:getAccountId(cid)..'')
			newPoints = getAccountPoints(cid)
			doPlayerSendTextMessage(cid, 22, '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
return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

 

Ok. Dei uma "tradução" pra versão 1.1. Não to com acesso às funções do 1.2 no momento... Mas vou dar uma pesquisada.

 

Contudo, vê se assim já dá certo:

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

function getAccountPoints(cid)
  local res = db.getResult('SELECT `premium_points` FROM `accounts` WHERE id='..player:getAccountId(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 param ~= "" then
		if tonumber(param) <= getAccountPoints(cid) then
			doPlayerAddItem(cid, pointObj, param)
			db.executeQuery('UPDATE `accounts` SET `premium_points`='..getAccountPoints(cid) - param..' WHERE id='.. player:getAccountId(cid)..'')
			newPoints = getAccountPoints(cid)
			doPlayerSendTextMessage(cid, 22, '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
return true
end

 

Então Dani, não deve ter essa função. Olha o erro que deu:

post-321783-0-85090900-1453755345_thumb.png

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Eu ainda não compreendi mt bem como funciona esse tfs 1.2... Mas recebi um auxilio, aqui.

Testa agr:

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

function getAccountPoints(cid)
  local res = db.getResult('SELECT `premium_points` FROM `accounts` WHERE id='..player:getGuid(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 param ~= "" then
		if tonumber(param) <= getAccountPoints(cid) then
			player:addItem(cid, pointObj, param)
			db.executeQuery('UPDATE `accounts` SET `premium_points`='..getAccountPoints(cid) - param..' WHERE id='.. player:getGuid(cid)..'')
			newPoints = getAccountPoints(cid)
			player:sendCancel(cid, 22, 'Você ainda possui '..newPoints..' premium points em sua conta.')
		else
			player:sendCancel(cid, "Você não tem tantos premium points assim.")
		end
	else
		player:sendCancel(cid, "Você precisa especificar um valor.")
	end
return true
end

Caso não dê certo, tenta assim:

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

function getAccountPoints(cid)
  local res = db.getResult('SELECT `premium_points` FROM `accounts` WHERE id='..player:getGuid(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 param ~= "" then
		if tonumber(param) <= player:getAccountPoints(cid) then
			player:addItem(cid, pointObj, param)
			db.executeQuery('UPDATE `accounts` SET `premium_points`='..player:getAccountPoints(cid) - param..' WHERE id='.. player:getGuid(cid)..'')
			newPoints = player:getAccountPoints(cid)
			player:sendCancel(cid, 22, 'Você ainda possui '..newPoints..' premium points em sua conta.')
		else
			player:sendCancel(cid, "Você não tem tantos premium points assim.")
		end
	else
		player:sendCancel(cid, "Você precisa especificar um valor.")
	end
return true
end
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...