Jump to content
×
×
  • Create New...
  • 0

Como fazer um bau de donate?


Go to solution Solved by Yan Oliveira,

Question

Versão do Servidor: TFS - 0.4
Tipo de Script: actions
Código:
 

    

Olá, gostaria de um sistema de baú donate, onde a pessoa faz o donate, e eu como adm entro no game e coloco os pontos(itens) nesse bau, e somente essa pessoa que eu determinei que vai poder retirar esses itens.
Esse baú vai funcionar para todos os player mas somente os que eu determinar os itens que poderão retirar. Desde já agradeço

Link to post
Share on other sites
  • Answers 36
  • Created
  • Last Reply

Top Posters For This Question

Top Posters For This Question

Popular Posts

Se tivesse explicado isso desde o começo, teria sido mais fácil rsrs. Pois, não precisaria de todos esses scripts. Do jeito que você quer é mais fácil do que eu pensei.   Eu pensei em falar

Posted Images

Recommended Posts

  • 0
47 minutos atrás, Yan18 disse:

Amigo, independente se for por site ou por script via servidor, as informações do jogo e do player vão para o banco. Tudo no jogo é salvo no banco, então de qualquer forma você terá que fazer script. Eu acho mais fácil fazer como falei porque é muito fácil fazer esse script em lua, o player vai receber na bag e não vai ter trabalho de ter que clicar em baú, fora que por ser aleatório (no caso da box), da sempre a sensação do cara ganhar itens bons, por mais que seja itens fixo. E fora que por site você vai ter que mexer com PHP e os sites que já vem nas bases de Open Tibia foram mal feitos e mal estruturado.

 

Mas, veja como quer fazer e vemos um jeito de te ajudar.

Tudo bem então, pode ser dessa maneira

Link to post
Share on other sites
  • 0
Em 22/03/2021 em 09:20, Sugismundo disse:

Serão itens, na parte de esquecer de entregar os pontos ta de boa, tenho uma pessoa especifica so para cuidar dessa parte.

Seu servidor tem shop ou site?

Link to post
Share on other sites
  • 0
4 horas atrás, Sugismundo disse:

Tem site mas o Shop eu não utilizo. Nem sei se está funcionando

Certo, e para os players comprarem vip estão comprando pelo site ou em contato direto com você?

Link to post
Share on other sites
  • 0
Em 26/03/2021 em 22:59, Yan18 disse:

Certo, e para os players comprarem vip estão comprando pelo site ou em contato direto com você?

Não tem vip, apenas vocações vips e alguns itens.

No caso as vocações vips são vendidas por npcs que usam a moeda vip que eu dou ao player quando ele donara

Link to post
Share on other sites
  • 0
Em 28/03/2021 em 13:08, Sugismundo disse:

Não tem vip, apenas vocações vips e alguns itens.

No caso as vocações vips são vendidas por npcs que usam a moeda vip que eu dou ao player quando ele donara

 

Entendi, vamos lá!

 

Não sei se você já tem a sprite no seu cliente de uma box ou se tem algum item em mente para usar, mas estou te facilitando a vida já te mandando a sprite em PNG e OBD, só adicionar no cliente caso queira, peguei de um pokétibia que tenho aqui.

 

Tem algumas maneiras do player receber a box, pode ser de maneira mais direta ou automatizada. Pensei na direta, porque a automatizada que tive em mente teria que fazer mais coisas e não sei se no seu caso compensa, pois você parece querer ter esse controle de entregar para player, então vamos fazer por talkaction! 

 

Primeiramente vá em Data/Talkactions/Scripts e crie um arquivo.lua chamado player_vip_box_item.lua ou o nome que você quiser e adicione o código dentro:

 

local item_id = 13258 -- ID DO ITEM DA BOX
local quantidade = 1 -- QUANTIDADE DE BOX QUE O PLAYER VAI RECEBER
local message = "Obrigado por ter donatado! Como recompensa, você receberá uma box com um item surpresa." -- MENSAGEM QUE O PLAYER VAI RECEBER NO CHAT
local effect = false -- SE QUISER COM EFEITO AO RECEBER O ITEM MUDE PARA TRUE
local effect_id = 27 -- EFEITO DO ID AO RECEBER O ITEM

function onSay(cid, words, param)
local name = string.lower(param)

    if param == nil or param == "" then
		return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar o nome do player para receber o item vip.")
    
	elseif string.len(param) < 3 then
		return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar um nome válido do player para receber o item vip.")
		
	
    else
        if #getPlayersOnline() > 1 then
            for index, player in pairs(getPlayersOnline()) do
			local player_name = string.lower(getCreatureName(player))
		   
				if name == player_name then
					doPlayerAddItem(player, item_id, quantidade)
					doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE, message)

					-- VERIFICA SE VAI RECEBER EFEITO --
					if effect then
						doSendMagicEffect(getThingPos(player), effect_id)
					end								
					
				return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O player " .. param .. " recebeu a recompensa.")
				end

				if index == #getPlayersOnline() and name ~= player_name then
					return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O player " .. param .. " não está online.")
				end	
                 
            end
			
        else
           return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não há jogadores online!")
        end
    end
     
end

 

E agora volte um diretório na pasta de Talkactions e abra o arquivo talkactions.xml e adicione a tag:

<talkaction words="!vipitem" acess="6" event="script" value="player_vip_box_item.lua"/>

 

Agora vá em Data/Actions/Scripts e crie o arquivo vip_box_item.lua ou o nome que quiser e adicione o código dentro:

 

-- TABELA COM O ID DOS ITENS E A QUANTIDADE --
local items = {
{id = 2152, quantidade = 1000},
{id = 2160, quantidade = 100},
{id = 13250, quantidade = 1},
{id = 13255, quantidade = 5},
{id = 13260, quantidade = 10},
}

local effect = false -- COLOQUE TRUE SE QUER QUE O PLAYER RECEBA EFEITO AO ABRIR A BOX 
local effect_id = 30 -- ID DO EFEITO AO RECEBER A BOX

local table_random = false -- SE QUISER QUE RECEBE ITENS ALEATÓRIOS MUDE PARA TRUE OU DEIXE FALSE PARA O PLAYER RECEBER TODOS OS ITENS

-------------------------------------------- CÓDIGO ------------------------------------------

function onUse(cid, item, fromPosition, itemEx, toPosition)

	if table_random then	
		local random_item  = math.random(1, #items) -- PEGA UM ÍNDICE ALEATÓRIO DA TABELA PARA DAR O ITEM DE FORMA ALEATÓRIA
		
		doPlayerAddItem(cid, items[random_item].id, items[random_item].quantidade)
		
		if items[random_item].quantidade > 1 then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[random_item].quantidade .. " " .. getItemNameById(items[random_item].id) .. ".")
		
		elseif items[random_item].quantidade == 1 then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[random_item].id) .. ".")

		else
			return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.")
		end

		if effect then
			doSendMagicEffect(getThingPos(cid), effect_id)
		end

	return true
 	
	else	
		for i = 1, #items do
			doPlayerAddItem(cid, items[i].id, items[i].quantidade)
			
			if items[i].quantidade > 1 then
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[i].quantidade .. " " .. getItemNameById(items[i].id) .. ".")
		
			elseif items[i].quantidade == 1 then
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[i].id) .. ".")

			else
				return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.")
			end
		
			-- SE ESTÁ TRUE RECEBE O EFEITO AO ABRIR A BOX --
			if effect then
				doSendMagicEffect(getThingPos(cid), effect_id)
			end
		end	
		
	return true			
	end

end

 

Por fim na pasta Actions volte um diretório e abra o arquivo actions.xml e adicione a tag:

<action itemid="XXXX" event="script" value="vip_box_item.lua"/> <!-- COLOQUE O ID DO ITEM ONDE ESTÁ XXXX -->

 

Onde está XXXX você coloca o id do item (até deixei comentado no fim da tag xml.

 

--------- EXPLICAÇÃO --------

 

O script vai funcionar da seguinte maneira: Você irá dar ao player a box via comando talkactions e só funciona se o player estiver online. A talkaction é:

!vipitem Nome

Então com o comando !vipitem mais o nome do player irá adicionar o item se ele estiver online. No código ele converte o nome do player para minúsculo, então se tiver players com nome iguais mais com o tamanho do caractere diferente, vai dar ruim e vai adicionar para os dois, para quem tiver online ou para nenhum.

 

Tem mensagens para todo tipo de situação, se o player está offline, se você digitar nome do player com menos de 3 caracteres ou se não digitar o nome.

 

Eu fiz variáveis booleana que se você quiser que tenha efeito ao player receber a box ou abrir só mudar para true no código a variável effect. E no arquivo da pasta actions tem a tabela com os itens, só colocar o id e a quantidade de cada item. Se quiser dar só um item é só deixar a tabela com um item. E a variável table_random é para caso sorteie um item aleatório quando o player abrir a box (clicar), e nesse caso ele vai receber um item só! Agora se quiser que receba todos da tabela, deixe a variável table_random como false, se quiser aleatório coloque true.

 

Eu deixei tudo comentado e está bem intuitivo, e eu testei somente o código do talkactions, pois o do actions é bem fácil e eu fiz de cabeça, mas analisei certinho e não é para dar problema.

 

Qualquer erro ou problema, me avise.

box_item.png

box_item.rar

Edited by Yan18
Link to post
Share on other sites
  • 0
12 horas atrás, Yan18 disse:

 

Entendi, vamos lá!

 

Não sei se você já tem a sprite no seu cliente de uma box ou se tem algum item em mente para usar, mas estou te facilitando a vida já te mandando a sprite em PNG e OBD, só adicionar no cliente caso queira, peguei de um pokétibia que tenho aqui.

 

Tem algumas maneiras do player receber a box, pode ser de maneira mais direta ou automatizada. Pensei na direta, porque a automatizada que tive em mente teria que fazer mais coisas e não sei se no seu caso compensa, pois você parece querer ter esse controle de entregar para player, então vamos fazer por talkaction! 

 

Primeiramente vá em Data/Talkactions/Scripts e crie um arquivo.lua chamado player_vip_box_item.lua ou o nome que você quiser e adicione o código dentro:

 


local item_id = 13258 -- ID DO ITEM DA BOX
local quantidade = 1 -- QUANTIDADE DE BOX QUE O PLAYER VAI RECEBER
local message = "Obrigado por ter donatado! Como recompensa, você receberá uma box com um item surpresa." -- MENSAGEM QUE O PLAYER VAI RECEBER NO CHAT
local effect = false -- SE QUISER COM EFEITO AO RECEBER O ITEM MUDE PARA TRUE
local effect_id = 27 -- EFEITO DO ID AO RECEBER O ITEM

function onSay(cid, words, param)
local command = string.explode(param, ",")
local name = string.lower(param)

    if param == nil or param == "" then
		return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar o nome do player para receber o item vip.")
    
	elseif string.len(param) < 3 then
		return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar um nome válido do player para receber o item vip.")
		
	
    else
        if #getPlayersOnline() > 1 then
            for index, player in pairs(getPlayersOnline()) do
			local player_name = string.lower(getCreatureName(player))
		   
				if name == player_name then
					doPlayerAddItem(player, item_id, quantidade)
					doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE, message)

					-- VERIFICA SE VAI RECEBER EFEITO --
					if effect then
						doSendMagicEffect(getThingPos(player), effect_id)
					end								
					
				return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O player " .. param .. " recebeu a recompensa.")
				end

				if index == #getPlayersOnline() and name ~= player_name then
					return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O player " .. param .. " não está online.")
				end	
                 
            end
			
        else
           return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não há jogadores online!")
        end
    end
     
end

 

E agora volte um diretório na pasta de Talkactions e abra o arquivo talkactions.xml e adicione a tag:


<talkaction words="!vipitem" acess="6" event="script" value="player_vip_box_item.lua"/>

 

Agora vá em Data/Actions/Scripts e crie o arquivo vip_box_item.lua ou o nome que quiser e adicione o código dentro:

 


-- TABELA COM O ID DOS ITENS E A QUANTIDADE --
local items = {
{id = 2152, quantidade = 1000},
{id = 2160, quantidade = 100},
{id = 13250, quantidade = 1},
{id = 13255, quantidade = 5},
{id = 13260, quantidade = 10},
}

local effect = false -- COLOQUE TRUE SE QUER QUE O PLAYER RECEBA EFEITO AO ABRIR A BOX 
local effect_id = 30 -- ID DO EFEITO AO RECEBER A BOX

local table_random = false -- SE QUISER QUE RECEBE ITENS ALEATÓRIOS MUDE PARA TRUE OU DEIXE FALSE PARA O PLAYER RECEBER TODOS OS ITENS

-------------------------------------------- CÓDIGO ------------------------------------------

function onUse(cid, item, fromPosition, itemEx, toPosition)

	if table_random then	
		local random_item  = math.random(1, #items) -- PEGA UM ÍNDICE ALEATÓRIO DA TABELA PARA DAR O ITEM DE FORMA ALEATÓRIA
		
		doPlayerAddItem(cid, items[random_item].id, items[random_item].quantidade)
		
		if items[random_item].quantidade > 1 then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[random_item].quantidade .. " " .. getItemNameById(items[random_item].id) .. ".")
		
		elseif items[random_item].quantidade == 1 then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[random_item].id) .. ".")

		else
			return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.")
		end

		if effect then
			doSendMagicEffect(getThingPos(cid), effect_id)
		end

	return true
 	
	else	
		for i = 1, #items do
			doPlayerAddItem(cid, items[i].id, items[i].quantidade)
			
			if items[i].quantidade > 1 then
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[i].quantidade .. " " .. getItemNameById(items[i].id) .. ".")
		
			elseif items[i].quantidade == 1 then
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[i].id) .. ".")

			else
				return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.")
			end
		
			-- SE ESTÁ TRUE RECEBE O EFEITO AO ABRIR A BOX --
			if effect then
				doSendMagicEffect(getThingPos(cid), effect_id)
			end
		end	
		
	return true			
	end

end

 

Por fim na pasta Actions volte um diretório e abra o arquivo actions.xml e adicione a tag:


<action itemid="XXXX" event="script" value="vip_box_item.lua"/> <!-- COLOQUE O ID DO ITEM ONDE ESTÁ XXXX -->

 

Onde está XXXX você coloca o id do item (até deixei comentado no fim da tag xml.

 

--------- EXPLICAÇÃO --------

 

O script vai funcionar da seguinte maneira: Você irá dar ao player a box via comando talkactions e só funciona se o player estiver online. A talkaction é:


!vipitem Nome

Então com o comando !vipitem mais o nome do player irá adicionar o item se ele estiver online. No código ele converte o nome do player para minúsculo, então se tiver players com nome iguais mais com o tamanho do caractere diferente, vai dar ruim e vai adicionar para os dois, para quem tiver online ou para nenhum.

 

Tem mensagens para todo tipo de situação, se o player está offline, se você digitar nome do player com menos de 3 caracteres ou se não digitar o nome.

 

Eu fiz variáveis booleana que se você quiser que tenha efeito ao player receber a box ou abrir só mudar para true no código a variável effect. E no arquivo da pasta actions tem a tabela com os itens, só colocar o id e a quantidade de cada item. Se quiser dar só um item é só deixar a tabela com um item. E a variável table_random é para caso sorteie um item aleatório quando o player abrir a box (clicar), e nesse caso ele vai receber um item só! Agora se quiser que receba todos da tabela, deixe a variável table_random como false, se quiser aleatório coloque true.

 

Eu deixei tudo comentado e está bem intuitivo, e eu testei somente o código do talkactions, pois o do actions é bem fácil e eu fiz de cabeça, mas analisei certinho e não é para dar problema.

 

Qualquer erro ou problema, me avise.

box_item.png

box_item.rar 2.49 kB · 0 downloads

Então amigo o código funciona mas tive 2 problemas, as box não estão sumindo ao usar, tendo como usar infinitamente. Já tentei arrumar no item editor e no xml mas não resolveu. Segundo é, caso o player donate uma quantia X e eu vá dar a quantia que ele donatou vou precisar adicionar o mesmo script 2 vezes com nomes diferentes e alterar o valor? Por que pelo que vi só tem como eu adicionar uma quantia fixa, pelo comando não da para escolher a quantidade de pontos que o player vai receber ao abrir a box?

Link to post
Share on other sites
  • 0
3 horas atrás, Sugismundo disse:

Então amigo o código funciona mas tive 2 problemas, as box não estão sumindo ao usar, tendo como usar infinitamente. Já tentei arrumar no item editor e no xml mas não resolveu. Segundo é, caso o player donate uma quantia X e eu vá dar a quantia que ele donatou vou precisar adicionar o mesmo script 2 vezes com nomes diferentes e alterar o valor? Por que pelo que vi só tem como eu adicionar uma quantia fixa, pelo comando não da para escolher a quantidade de pontos que o player vai receber ao abrir a box?

Sobre a box não sumir foi erro meu, esqueci de remover. Sabia que estava esquecendo algo haha. Troque o código da pasta actions por esse:

 

-- TABELA COM O ID DOS ITENS E A QUANTIDADE --
local items = {
{id = 2152, quantidade = 1000},
{id = 2160, quantidade = 100},
{id = 13250, quantidade = 1},
{id = 13255, quantidade = 5},
{id = 13260, quantidade = 10},
}

local effect = false -- COLOQUE TRUE SE QUER QUE O PLAYER RECEBA EFEITO AO ABRIR A BOX 
local effect_id = 30 -- ID DO EFEITO AO RECEBER A BOX

local table_random = false -- SE QUISER QUE RECEBE ITENS ALEATÓRIOS MUDE PARA TRUE OU DEIXE FALSE PARA O PLAYER RECEBER TODOS OS ITENS

-------------------------------------------- CÓDIGO ------------------------------------------

function onUse(cid, item, fromPosition, itemEx, toPosition)

	if table_random then	
		local random_item  = math.random(1, #items) -- PEGA UM ÍNDICE ALEATÓRIO DA TABELA PARA DAR O ITEM DE FORMA ALEATÓRIA
		
		doPlayerAddItem(cid, items[random_item].id, items[random_item].quantidade)
		
		if items[random_item].quantidade > 1 then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[random_item].quantidade .. " " .. getItemNameById(items[random_item].id) .. ".")
		
		elseif items[random_item].quantidade == 1 then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[random_item].id) .. ".")

		else
			return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.")
		end

		if effect then
			doSendMagicEffect(getThingPos(cid), effect_id)
		end
		
		doRemoveItem(item.uid, 1)

	return true
 	
	else	
		for i = 1, #items do
			doPlayerAddItem(cid, items[i].id, items[i].quantidade)
			
			if items[i].quantidade > 1 then
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[i].quantidade .. " " .. getItemNameById(items[i].id) .. ".")
		
			elseif items[i].quantidade == 1 then
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[i].id) .. ".")

			else
				return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.")
			end
		
			-- SE ESTÁ TRUE RECEBE O EFEITO AO ABRIR A BOX --
			if effect then
				doSendMagicEffect(getThingPos(cid), effect_id)
			end
			
			doRemoveItem(item.uid, 1)
		end	
		
	return true			
	end

end

 

Sobre sua pergunta, de o player donatar mais, eu não entendi muito bem o que você quis dizer. No caso os pontos seria itens da recompensa ou você fala da quantidade de box?

Link to post
Share on other sites
  • 0
5 horas atrás, Yan18 disse:

Sobre a box não sumir foi erro meu, esqueci de remover. Sabia que estava esquecendo algo haha. Troque o código da pasta actions por esse:

 


-- TABELA COM O ID DOS ITENS E A QUANTIDADE --
local items = {
{id = 2152, quantidade = 1000},
{id = 2160, quantidade = 100},
{id = 13250, quantidade = 1},
{id = 13255, quantidade = 5},
{id = 13260, quantidade = 10},
}

local effect = false -- COLOQUE TRUE SE QUER QUE O PLAYER RECEBA EFEITO AO ABRIR A BOX 
local effect_id = 30 -- ID DO EFEITO AO RECEBER A BOX

local table_random = false -- SE QUISER QUE RECEBE ITENS ALEATÓRIOS MUDE PARA TRUE OU DEIXE FALSE PARA O PLAYER RECEBER TODOS OS ITENS

-------------------------------------------- CÓDIGO ------------------------------------------

function onUse(cid, item, fromPosition, itemEx, toPosition)

	if table_random then	
		local random_item  = math.random(1, #items) -- PEGA UM ÍNDICE ALEATÓRIO DA TABELA PARA DAR O ITEM DE FORMA ALEATÓRIA
		
		doPlayerAddItem(cid, items[random_item].id, items[random_item].quantidade)
		
		if items[random_item].quantidade > 1 then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[random_item].quantidade .. " " .. getItemNameById(items[random_item].id) .. ".")
		
		elseif items[random_item].quantidade == 1 then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[random_item].id) .. ".")

		else
			return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.")
		end

		if effect then
			doSendMagicEffect(getThingPos(cid), effect_id)
		end
		
		doRemoveItem(item.uid, 1)

	return true
 	
	else	
		for i = 1, #items do
			doPlayerAddItem(cid, items[i].id, items[i].quantidade)
			
			if items[i].quantidade > 1 then
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[i].quantidade .. " " .. getItemNameById(items[i].id) .. ".")
		
			elseif items[i].quantidade == 1 then
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[i].id) .. ".")

			else
				return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.")
			end
		
			-- SE ESTÁ TRUE RECEBE O EFEITO AO ABRIR A BOX --
			if effect then
				doSendMagicEffect(getThingPos(cid), effect_id)
			end
			
			doRemoveItem(item.uid, 1)
		end	
		
	return true			
	end

end

 

Sobre sua pergunta, de o player donatar mais, eu não entendi muito bem o que você quis dizer. No caso os pontos seria itens da recompensa ou você fala da quantidade de box?

Eu digo tipo assim, o player donatou 10 reais, ele ganha 10 pontos entendeu? caso ele donate um valor diferente eu teria que dar uma quantidade de pontos diferente

Link to post
Share on other sites
  • 0
51 minutos atrás, Sugismundo disse:

Eu digo tipo assim, o player donatou 10 reais, ele ganha 10 pontos entendeu? caso ele donate um valor diferente eu teria que dar uma quantidade de pontos diferente

No caso seria 10x box certo?

Link to post
Share on other sites
  • 0
Posted (edited)
Em 31/03/2021 em 01:57, Yan18 disse:

No caso seria 10x box certo?

Tá vamos la, não sei se ja jogou algum ot server assim, mas normalmente quando voce donata voce recebe uma quantia de pontos ou coins de acordo com o valor que voce donatou. O que eu quero fazer e exatamente isso so que de maneira manual, Se eu pago 10 reais eu recebo 10 pontos, se eu pago 20 recebo 20 pontos, 30 recebo 30 e assim por diante. 

O script que você me passou ele funciona de tal maneira, nele eu especifico o item que eu vou querer que o player receba e ao abrir ele vai receber esse item, mas oque estou com duvida é.

Como eu faria para dar a quantidade de pontos que o player donatou usando esse sistema de box que voce me passou, sendo que eu preciso especificar no script oque o player vai receber. E não tem como eu especificar algo quando esse algo pode variar de acordo com o player entende?


Tipo se eu especifico que o player vai donatar 25 reais e eu especifiquei que a box ela vai dar 10 pontos ao abrir, dessa forma faltaria 15 pontos para entregar ao player. mesmo que eu dê 2 box para o player ainda assim faltaria 5 pontos para entregar e não teria como dar outra box. 

A unica coisa que pensei seria adcionar esse mesmo script varias vezes com valores diferentes para cada script e trocar o talkaction, mas daria muito trabalho.
Por acaso não teria uma forma de mim especificar o item da box ao criar ela ingame? tipo

!vipbox 13500, 100


Dai eu ja criaria com o item que eu quero com a quantidade de acordo com o valor que o player donatou, deu para entender?

Edited by Sugismundo
Link to post
Share on other sites
  • 0
5 horas atrás, Sugismundo disse:

Tá vamos la, não sei se ja jogou algum ot server assim, mas normalmente quando voce donata voce recebe uma quantia de pontos ou coins de acordo com o valor que voce donatou. O que eu quero fazer e exatamente isso so que de maneira manual, Se eu pago 10 reais eu recebo 10 pontos, se eu pago 20 recebo 20 pontos, 30 recebo 30 e assim por diante. 

O script que você me passou ele funciona de tal maneira, nele eu especifico o item que eu vou querer que o player receba e ao abrir ele vai receber esse item, mas oque estou com duvida é.

Como eu faria para dar a quantidade de pontos que o player donatou usando esse sistema de box que voce me passou, sendo que eu preciso especificar no script oque o player vai receber. E não tem como eu especificar algo quando esse algo pode variar de acordo com o player entende?


Tipo se eu especifico que o player vai donatar 25 reais e eu especifiquei que a box ela vai dar 10 pontos ao abrir, dessa forma faltaria 15 pontos para entregar ao player. mesmo que eu dê 2 box para o player ainda assim faltaria 5 pontos para entregar e não teria como dar outra box. 

A unica coisa que pensei seria adcionar esse mesmo script varias vezes com valores diferentes para cada script e trocar o talkaction, mas daria muito trabalho.
Por acaso não teria uma forma de mim especificar o item da box ao criar ela ingame? tipo

!vipbox 13500, 100


Dai eu ja criaria com o item que eu quero com a quantidade de acordo com o valor que o player donatou, deu para entender?

Agora entendi perfeitamente, mas assim, agora que entendi melhor, eu acho que isso pode ser problemático, porque se o cara donatar valores altos vai ter que dar itens de acordo com a quantidade, e chega uma hora que fica complicado isso. Recomendo tabelar isso. 

 

Mas nesse caso, no script que eu fiz, você tem duas alternativas, tabelar por quantidade na tabela de itens no script da pasta Actions ou por parâmetro no comando talkaction que entrega a box colocar quantas box ele recebe, e se você quiser o segundo caso, recomendo colocar o item da box como agrupável, porque se não vai ocupar muito espaço na bag do player.

Link to post
Share on other sites
  • 0
2 horas atrás, Yan18 disse:

Agora entendi perfeitamente, mas assim, agora que entendi melhor, eu acho que isso pode ser problemático, porque se o cara donatar valores altos vai ter que dar itens de acordo com a quantidade, e chega uma hora que fica complicado isso. Recomendo tabelar isso. 

 

Mas nesse caso, no script que eu fiz, você tem duas alternativas, tabelar por quantidade na tabela de itens no script da pasta Actions ou por parâmetro no comando talkaction que entrega a box colocar quantas box ele recebe, e se você quiser o segundo caso, recomendo colocar o item da box como agrupável, porque se não vai ocupar muito espaço na bag do player.

Mas nesse caso então o que iria mudar é a quantidade de box? ou seja o valor dos pontos ainda seria fixo por cada box, e para funcionar com qualquer valor de donate os pontos da box precisariam ser apenas 1 ou seja se o player donatar 100 reais eu teria que dar a ele 100 box para ele receber 100 pontos. Não teria como eu simplificar isso? Fazer uma box apenas que dê qualquer valor de pontos que eu definir ao entrega-la?

Link to post
Share on other sites
  • 0
4 minutos atrás, Sugismundo disse:

Mas nesse caso então o que iria mudar é a quantidade de box? ou seja o valor dos pontos ainda seria fixo por cada box, e para funcionar com qualquer valor de donate os pontos da box precisariam ser apenas 1 ou seja se o player donatar 100 reais eu teria que dar a ele 100 box para ele receber 100 pontos. Não teria como eu simplificar isso? Fazer uma box apenas que dê qualquer valor de pontos que eu definir ao entrega-la?

Então, foi como te falei, eu te dei duas sugestões, uma é por box e outro por tabela. 

 

Pensei em fazer assim, quando for usar a talkaction, você usa um parâmetro numérico que vão ser os pontos, e de acordo com o parâmetro, o player vai receber X quantidade de itens. Você quer que receba de forma aleatória ou por ordem que os itens ficam na tabela?

Link to post
Share on other sites
  • 0
1 minuto atrás, Yan18 disse:

Então, foi como te falei, eu te dei duas sugestões, uma é por box e outro por tabela. 

 

Pensei em fazer assim, quando for usar a talkaction, você usa um parâmetro numérico que vão ser os pontos, e de acordo com o parâmetro, o player vai receber X quantidade de itens. Você quer que receba de forma aleatória ou por ordem que os itens ficam na tabela?

Vai ser apenas 1 item que são os pontos

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now