JU
action

TalkActions e Websites

Por julhinhuu, 23 de jan. de 2016 em Scripts

talk
website
resolvido
script
27
3.6k
julhinhuuJ
23 de janeiro de 2016 às 17:00

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.

DanihcvD
23 de janeiro de 2016 às 18:29

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.

julhinhuuJ
23 de janeiro de 2016 às 18:33

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.

DanihcvD
23 de janeiro de 2016 às 19:08

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)

julhinhuuJ
23 de janeiro de 2016 às 19:26

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.

DanihcvD
24 de janeiro de 2016 às 18:09

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.

julhinhuuJ
25 de janeiro de 2016 às 00:23

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 Janeiro 25 por julhinhokullitz

jvcasarinJ
25 de janeiro de 2016 às 01:18

@@Danihcv

 

O TFS do Server Mitsuig é 1.2 kkkk

 

Só não sei as alterações :C

DanihcvD
25 de janeiro de 2016 às 02:24

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

Editado Janeiro 25 por Danihcv

julhinhuuJ
25 de janeiro de 2016 às 07:12

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

 

 

DanihcvD
25 de janeiro de 2016 às 16:11

@, provavelmente. Me diz, qual a versão da tua distro? (ex: tfs 0.4, tfs 0.3.6, tfs 1.1, etc)

julhinhuuJ
25 de janeiro de 2016 às 16:40

@, provavelmente. Me diz, qual a versão da tua distro? (ex: tfs 0.4, tfs 0.3.6, tfs 1.1, etc)

TFS 1.2 64X.

DanihcvD
25 de janeiro de 2016 às 16:51

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
julhinhuuJ
25 de janeiro de 2016 às 18:56

 

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

 

 

DanihcvD
25 de janeiro de 2016 às 19:43

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