Ir para conteúdo
  • 0

ScythePhantom

Pergunta

Olá, gostaria de pedir um script que funcionasse da seguinte maneira, o player clicasse em uma caixa e tivesse X% chance de obter um item, logo depois a caixa seria removida, seriam três caixas, uma caixa simples, com itens mais simples, a caixa média e a lendária, cada uma com chances mais difíceis para determinados itens. Pode ser um action apenas, daí só faço duplicar o action e mudar as chances e itens.

 

TFS 0.4, obrigado, REP+

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Acho que isso te ajuda, estou sem nenhum recurso, fiz de cabeça no bloco de notas kkkk, qualquer coisa me avisa.

local config = {
	chance = 30, -- porcentagem para ganhar o item
	items = {2160, 2460, 2500, 2465}, -- items que podem ser obtidos ao usar a caixa
	efeitoWin = 29, -- efeito se ganhar
	efeitoLose = 20 -- efeito se perder
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	local rand = math.random(100)
	local i = math.random(#config.items)
	if rand <= config.chance then
		doPlayerAddItem(cid, config.items[i], 1)
		doRemoveItem(item.uid, 1)
		doSendMagicEffect(getPlayerPosition(cid), config.efeitoWin)
		return true
	else
		doRemoveItem(item.uid, 1)
		doSendMagicEffect(getPlayerPosition(cid), config.efeitoLose)
	end
	return true
end
Editado por Bruno Minervino
Link para o comentário
Compartilhar em outros sites

  • 0

 

Acho que isso te ajuda, estou sem nenhum recurso, fiz de cabeça no bloco de notas kkkk, qualquer coisa me avisa.

local config = {
	chance = 30, -- porcentagem para ganhar o item
	items = {2160, 2460, 2500, 2465}, -- items que podem ser obtidos ao usar a caixa
	efeitoWin = 29, -- efeito se ganhar
	efeitoLose = 20 -- efeito se perder
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	local rand = math.random(100)
	local i = math.random(#config.items)
	if rand <= config.chance then
		doPlayerAddItem(cid, config.items[i], 1)
		doRemoveItem(item.uid, 1)
		doSendMagicEffect(getPlayerPosition(cid), config.efeitoWin)
		return true
	else
		doRemoveItem(item.uid, 1)
		doSendMagicEffect(getPlayerPosition(cid), config.efeitoLose)
	end
	return true
end

Tipo, não é bem isso... Tipo, ele sempre ganharia algum item, sabe? não teria isso de "lose". A questão seriam os itens...

 

 

Exemplo:

 

Caixa simples: Demon shield 80%, Mastermind Shield 65%...

 

Caixa média: Magic Plate Armor 90%, Demon Armor 80%...

 

Caixa lendária: Golden Helmet 70%, Soft Boots 80%...

 

Entendeu?

Link para o comentário
Compartilhar em outros sites

  • 0

[...]Entendeu?

Então man, você pode usar o script da suprise bag para isso:

 

 

local config = {
	--[xxxx] = {
		--{ rate = 1, item = 2160, count = { min = 1, max = 10 }},
		--{ rate = 2, item = 2400, count = { const = 1 }}
	--}

	[6570] = {		
		{ rate = 1132, item = 6280, count = { const = 1 } },
		{ rate = 1132, item = 2114, count = { const = 1 } },
		{ rate = 991, item = 6575, count = { const = 1 } },
		{ rate = 943, item = 6576, count = { const = 1 } },
		{ rate = 991, item = 6578, count = { const = 1 } },
		{ rate = 991, item = 6572, count = { const = 1 } },
		{ rate = 802, item = 6577, count = { const = 1 } },
		{ rate = 802, item = 2687, count = { const = 10 } },
		{ rate = 849, item = 6569, count = { const = 3 } },
		{ rate = 755, item = 6574, count = { const = 1 } },
		{ rate = 613, item = 6394, count = { const = 1 } }
	}
}

local sumOfRate = {}

for k,v in pairs(config) do
	sumOfRate[k] = 0
	for k2,v2 in pairs(v) do
		sumOfRate[k] = sumOfRate[k] + v2.rate
	end
end

function randomGift(itemid)
	local rand = math.random(1, sumOfRate[itemid])

	local subSum = 0
	local exactItem = nil
	for i,v in ipairs(config[itemid]) do
		if (subSum > rand) then
			if (i > 1) then
				exactItem = i-1
			end
			break
		end
		subSum = subSum + v.rate
		if (subSum >= rand) then
			exactItem = i
			break
		end
	end
	
	return exactItem
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
	local run = false
	
	for k,v in pairs(config) do
		if (k == item.itemid) then
			run = true
			break
		end
	end
	
	if (not run) then
		return false
	end
	
	local gift = randomGift(item.itemid)

	if (config[item.itemid][gift].count.const ~= nil) then
		doPlayerAddItem(cid, config[item.itemid][gift].item, config[item.itemid][gift].count.const)
	else
		doPlayerAddItem(cid, config[item.itemid][gift].item, math.random(config[item.itemid][gift].count.min, config[item.itemid][gift].count.max))
	end
	
	doSendMagicEffect(fromPosition, CONST_ME_GIFT_WRAPS)
	doRemoveItem(item.uid, 1)
	return true
end 

 

 

 

Explicação:

 

[6570] = nessa linha é o id da caixa

 

rate = 1132, item = 6280, count = { const = 1 }

rate: é a mesma coisa que exp, quando maior a rate, maior a chance.

item: é o id do item.

count: você pode usar de duas maneiras

1ª - { const = 1 } - é um valor único, neste caso 1

2ª - { min = 1, max = 10 } - um valor randômico entre 1 e 10.

 

Espero ter ajudado!

Link para o comentário
Compartilhar em outros sites

  • 0

Então man, você pode usar o script da suprise bag para isso:

 

 

local config = {
	--[xxxx] = {
		--{ rate = 1, item = 2160, count = { min = 1, max = 10 }},
		--{ rate = 2, item = 2400, count = { const = 1 }}
	--}

	[6570] = {		
		{ rate = 1132, item = 6280, count = { const = 1 } },
		{ rate = 1132, item = 2114, count = { const = 1 } },
		{ rate = 991, item = 6575, count = { const = 1 } },
		{ rate = 943, item = 6576, count = { const = 1 } },
		{ rate = 991, item = 6578, count = { const = 1 } },
		{ rate = 991, item = 6572, count = { const = 1 } },
		{ rate = 802, item = 6577, count = { const = 1 } },
		{ rate = 802, item = 2687, count = { const = 10 } },
		{ rate = 849, item = 6569, count = { const = 3 } },
		{ rate = 755, item = 6574, count = { const = 1 } },
		{ rate = 613, item = 6394, count = { const = 1 } }
	}
}

local sumOfRate = {}

for k,v in pairs(config) do
	sumOfRate[k] = 0
	for k2,v2 in pairs(v) do
		sumOfRate[k] = sumOfRate[k] + v2.rate
	end
end

function randomGift(itemid)
	local rand = math.random(1, sumOfRate[itemid])

	local subSum = 0
	local exactItem = nil
	for i,v in ipairs(config[itemid]) do
		if (subSum > rand) then
			if (i > 1) then
				exactItem = i-1
			end
			break
		end
		subSum = subSum + v.rate
		if (subSum >= rand) then
			exactItem = i
			break
		end
	end
	
	return exactItem
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
	local run = false
	
	for k,v in pairs(config) do
		if (k == item.itemid) then
			run = true
			break
		end
	end
	
	if (not run) then
		return false
	end
	
	local gift = randomGift(item.itemid)

	if (config[item.itemid][gift].count.const ~= nil) then
		doPlayerAddItem(cid, config[item.itemid][gift].item, config[item.itemid][gift].count.const)
	else
		doPlayerAddItem(cid, config[item.itemid][gift].item, math.random(config[item.itemid][gift].count.min, config[item.itemid][gift].count.max))
	end
	
	doSendMagicEffect(fromPosition, CONST_ME_GIFT_WRAPS)
	doRemoveItem(item.uid, 1)
	return true
end 

 

 

 

Explicação:

 

[6570] = nessa linha é o id da caixa

 

rate = 1132, item = 6280, count = { const = 1 }

rate: é a mesma coisa que exp, quando maior a rate, maior a chance.

item: é o id do item.

count: você pode usar de duas maneiras

1ª - { const = 1 } - é um valor único, neste caso 1

2ª - { min = 1, max = 10 } - um valor randômico entre 1 e 10.

 

Espero ter ajudado!

Não funcionou e deu erro.

 

iWWzaxY.png?1

 

SCRIPT:

 

local config = {

[6507] = {

{ rate = 100, item = 2160, count = { min = 1, max = 10 }},

{ rate = 80, item = 2400, count = { const = 1 }}

}

 

[6508] = {

{ rate = 100, item = 2160, count = { const = 1 }},

{ rate = 80, item = 8930, count = { const = 1 }}

}

 

[6509] = {

{ rate = 100, item = 7390, count = { const = 1 }},

{ rate = 80, item = 8931, count = { const = 1 }}

}

}

 

local sumOfRate = {}

 

for k,v in pairs(config) do

sumOfRate[k] = 0

for k2,v2 in pairs(v) do

sumOfRate[k] = sumOfRate[k] + v2.rate

end

end

 

function randomGift(itemid)

local rand = math.random(1, sumOfRate[itemid])

 

local subSum = 0

local exactItem = nil

for i,v in ipairs(config[itemid]) do

if (subSum > rand) then

if (i > 1) then

exactItem = i-1

end

break

end

subSum = subSum + v.rate

if (subSum >= rand) then

exactItem = i

break

end

end

 

return exactItem

end

 

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

local run = false

 

for k,v in pairs(config) do

if (k == item.itemid) then

run = true

break

end

end

 

if (not run) then

return false

end

 

local gift = randomGift(item.itemid)

 

if (config[item.itemid][gift].count.const ~= nil) then

doPlayerAddItem(cid, config[item.itemid][gift].item, config[item.itemid][gift].count.const)

else

doPlayerAddItem(cid, config[item.itemid][gift].item, math.random(config[item.itemid][gift].count.min, config[item.itemid][gift].count.max))

end

 

doSendMagicEffect(fromPosition, CONST_ME_GIFT_WRAPS)

doRemoveItem(item.uid, 1)

return true

end

 

Link para o comentário
Compartilhar em outros sites

  • 0

Não funcionou e deu erro.

Na verdade, foi um erro de configuração de sua parte, altere a configuração para esta:

 

 

local config = {
	[6507] = {
		{ rate = 100, item = 2160, count = { min = 1, max = 10 }},
		{ rate = 80, item = 2400, count = { const = 1 }}
	},

	[6508] = {
		{ rate = 100, item = 2160, count = { const = 1 }},
		{ rate = 80, item = 8930, count = { const = 1 }}
	},

	[6509] = {
		{ rate = 100, item = 7390, count = { const = 1 }},
		{ rate = 80, item = 8931, count = { const = 1 }}
	}
} 

 

 

 

Uma dica de como adicionar a tag no actions.xml:

<action fromid="6507" toid="6509" event="script" value="custom/box.lua"/>
Link para o comentário
Compartilhar em outros sites

  • 0

Man, decida-se, seu pedido é um ou é outro....

Então, é isso, amigo... eu quero exatamente assim, porém quero saber se de fato está assim, rs. (script) Pois você usou como base um outro. Esse está ganhando SEMPRE, não é?

Link para o comentário
Compartilhar em outros sites

  • 0

Então, é isso, amigo... eu quero exatamente assim, porém quero saber se de fato está assim, rs. (script) Pois você usou como base um outro. Esse está ganhando SEMPRE, não é?

Sim man, está, sempre dá algo, é como aquele item que o santa claus da no natal.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...