TO

[ACTION] Auto Loot - Coletando ao abrir corpo

Por Tony Araujo, 09 de fev. de 2019 em Actions e Talkactions

15
11.2k
Tony AraujoT
09 de fevereiro de 2019 às 01:11

Eai galera do Eks, tudo bão? Quanto tempo que eu não venho por esses lados, saudades xD

Bom, sem muita enrolação, eu vim postar pra vocês o sistema de auto loot que eu fiz aqui rapidinho (literalmente, 10 mins), porém que ficou bem bacana. É aquele esquema, você coleta o loot quando abre o corpo do bicho morto. Está bem simples, porém funcional. Eu pesquisei a respeito, pra ter uma ideia e não encontrei nenhum que tivesse com um código legal, todos estavam bem antigos.

 

Eu não tive muito tempo testando, então caso encontrem qualquer bug, me avise pfv.

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getItemAttribute(item.uid, "corpseowner") ~= cid then
		return doPlayerSendCancel(cid, "You're not the owner.")
	end
	local items = {}
	for i = 0, getContainerSize(item.uid) do
		local it = getContainerItem(item.uid, i)
		if it.uid > 0 then
			table.insert(items, {it.itemid, it.type})
			doRemoveItem(it.uid)
		end
	end
	if #items > 0 then
		for k = 1, #items do
			local playerItem = getPlayerItemById(cid, true, items[k][1])
			if playerItem.uid > 0 then
				if (playerItem.type + items[k][2]) > 100 then
					doPlayerAddItem(cid, items[k][1], (playerItem.type + items[k][2]) - 100)
					doTransformItem(playerItem.uid, items[k][1], 100)
				else
					doTransformItem(playerItem.uid, items[k][1], playerItem.type + items[k][2])
				end
			else
				doPlayerAddItem(cid, items[k][1], items[k][2])
			end
		end
		return true
	end
	return false
end

 

2 semanas depois...
JulianoZNJ
16 de fevereiro de 2019 às 20:25
Em 09/02/2019 em 01:11, Tony Araujo disse:

Eai galera do Eks, tudo bão? Quanto tempo que eu não venho por esses lados, saudades xD

Bom, sem muita enrolação, eu vim postar pra vocês o sistema de auto loot que eu fiz aqui rapidinho (literalmente, 10 mins), porém que ficou bem bacana. É aquele esquema, você coleta o loot quando abre o corpo do bicho morto. Está bem simples, porém funcional. Eu pesquisei a respeito, pra ter uma ideia e não encontrei nenhum que tivesse com um código legal, todos estavam bem antigos.

 

Eu não tive muito tempo testando, então caso encontrem qualquer bug, me avise pfv.

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getItemAttribute(item.uid, "corpseowner") ~= cid then
		return doPlayerSendCancel(cid, "You're not the owner.")
	end
	local items = {}
	for i = 0, getContainerSize(item.uid) do
		local it = getContainerItem(item.uid, i)
		if it.uid > 0 then
			table.insert(items, {it.itemid, it.type})
			doRemoveItem(it.uid)
		end
	end
	if #items > 0 then
		for k = 1, #items do
			local playerItem = getPlayerItemById(cid, true, items[k][1])
			if playerItem.uid > 0 then
				if (playerItem.type + items[k][2]) > 100 then
					doPlayerAddItem(cid, items[k][1], (playerItem.type + items[k][2]) - 100)
					doTransformItem(playerItem.uid, items[k][1], 100)
				else
					doTransformItem(playerItem.uid, items[k][1], playerItem.type + items[k][2])
				end
			else
				doPlayerAddItem(cid, items[k][1], items[k][2])
			end
		end
		return true
	end
	return false
end

 

e onde coloca isso jovem

lSaintyL
16 de fevereiro de 2019 às 21:21
53 minutos atrás, JulianoZN disse:

e onde coloca isso jovem

Aparentemente vc coloca em actions e seta o action ID no corpo do monstro quando ele morre, ai quando o player clicar os itens vem pra bag.

JulianoZNJ
16 de fevereiro de 2019 às 21:22
1 hora atrás, SirDubstep disse:

Aparentemente vc coloca em actions e seta o action ID no corpo do monstro quando ele morre, ai quando o player clicar os itens vem pra bag.

Obg

1 mês depois...
jeanflamengoJ
27 de março de 2019 às 19:02

mano tu poderia colocar também para pegar o loot de todos os corpos que estiverem naquele SQM tipo PxG mesmo, os Otadmin iam pirar kkkk

 

Reputado

darkmubrD
27 de março de 2019 às 20:46

Poderia fazer de outro modo, talvez fosse interessante também:

- Ao invés de pegar todo o loot automático... poderia fazer com que o loot fosse aberto e com o botão direito (como se fosse converter dinheiro) o mesmo fosse para a backpack.

WaloxW
30 de março de 2019 às 21:24

Assim, eu não estou usando este, mas fiquem atento quando derem auto loot pois tem possibilidades de dar bugs como vc jogar item dentro do corpo do pokemon morto e duplicar o item!

JulianoZNJ
30 de março de 2019 às 22:12
47 minutos atrás, Walox disse:

Assim, eu não estou usando este, mas fiquem atento quando derem auto loot pois tem possibilidades de dar bugs como vc jogar item dentro do corpo do pokemon morto e duplicar o item!

Verdade, eu tive que refazer, e coloquei um modulo no otclient para quando coletar mostrar a imagem

 

WaloxW
30 de março de 2019 às 22:14
1 minuto atrás, JulianoZN disse:

Verdade, eu tive que refazer, e coloquei um modulo no otclient para quando coletar mostrar a imagem

 

Fiz Basicamente o mesmo que você

1 mês depois...
gabrielzikaG
30 de abril de 2019 às 14:10

@Walox neste caso, no script do Tony basta coloca isso depois do penultimo end:

 

doSetItemActionId(item.uid, 0)

Ficando assim: 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getItemAttribute(item.uid, "corpseowner") ~= cid then
		return doPlayerSendCancel(cid, "You're not the owner.")
	end
	local items = {}
	for i = 0, getContainerSize(item.uid) do
		local it = getContainerItem(item.uid, i)
		if it.uid > 0 then
			table.insert(items, {it.itemid, it.type})
			doRemoveItem(it.uid)
		end
	end
	if #items > 0 then
		for k = 1, #items do
			local playerItem = getPlayerItemById(cid, true, items[k][1])
			if playerItem.uid > 0 then
				if (playerItem.type + items[k][2]) > 100 then
					doPlayerAddItem(cid, items[k][1], (playerItem.type + items[k][2]) - 100)
					doTransformItem(playerItem.uid, items[k][1], 100)
				else
					doTransformItem(playerItem.uid, items[k][1], playerItem.type + items[k][2])
				end
			else
				doPlayerAddItem(cid, items[k][1], items[k][2])
			end
		end
		return true
	end
	doSetItemActionId(item.uid, 0)
	return false
end

Depois que o player coletar uma vez o corpse deixa de ter a ActionID, assim impossibilitando de o player tentar trollar o sistema.

1 mês depois...
darkalvaroD
31 de maio de 2019 às 15:55
Em 30/04/2019 em 14:10, gabrielzika disse:

@Walox neste caso, no script do Tony basta coloca isso depois do penultimo end:

 

doSetItemActionId(item.uid, 0)

Ficando assim: 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getItemAttribute(item.uid, "corpseowner") ~= cid then
		return doPlayerSendCancel(cid, "You're not the owner.")
	end
	local items = {}
	for i = 0, getContainerSize(item.uid) do
		local it = getContainerItem(item.uid, i)
		if it.uid > 0 then
			table.insert(items, {it.itemid, it.type})
			doRemoveItem(it.uid)
		end
	end
	if #items > 0 then
		for k = 1, #items do
			local playerItem = getPlayerItemById(cid, true, items[k][1])
			if playerItem.uid > 0 then
				if (playerItem.type + items[k][2]) > 100 then
					doPlayerAddItem(cid, items[k][1], (playerItem.type + items[k][2]) - 100)
					doTransformItem(playerItem.uid, items[k][1], 100)
				else
					doTransformItem(playerItem.uid, items[k][1], playerItem.type + items[k][2])
				end
			else
				doPlayerAddItem(cid, items[k][1], items[k][2])
			end
		end
		return true
	end
	doSetItemActionId(item.uid, 0)
	return false
end

Depois que o player coletar uma vez o corpse deixa de ter a ActionID, assim impossibilitando de o player tentar trollar o sistema.

Quando vou tentar abrir o corpo aparece que não sou o dono (You're not the owner), sabe resolver?

WaloxW
02 de junho de 2019 às 12:15
Em 30/04/2019 em 14:10, gabrielzika disse:

@Walox neste caso, no script do Tony basta coloca isso depois do penultimo end:

 

doSetItemActionId(item.uid, 0)

Ficando assim: 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getItemAttribute(item.uid, "corpseowner") ~= cid then
		return doPlayerSendCancel(cid, "You're not the owner.")
	end
	local items = {}
	for i = 0, getContainerSize(item.uid) do
		local it = getContainerItem(item.uid, i)
		if it.uid > 0 then
			table.insert(items, {it.itemid, it.type})
			doRemoveItem(it.uid)
		end
	end
	if #items > 0 then
		for k = 1, #items do
			local playerItem = getPlayerItemById(cid, true, items[k][1])
			if playerItem.uid > 0 then
				if (playerItem.type + items[k][2]) > 100 then
					doPlayerAddItem(cid, items[k][1], (playerItem.type + items[k][2]) - 100)
					doTransformItem(playerItem.uid, items[k][1], 100)
				else
					doTransformItem(playerItem.uid, items[k][1], playerItem.type + items[k][2])
				end
			else
				doPlayerAddItem(cid, items[k][1], items[k][2])
			end
		end
		return true
	end
	doSetItemActionId(item.uid, 0)
	return false
end

Depois que o player coletar uma vez o corpse deixa de ter a ActionID, assim impossibilitando de o player tentar trollar o sistema.

Não vejo necessidade em fazer uma gambiarra dessas, para resolver isso é coisa de 2 linhas...

3 semanas depois...
TaigerT
22 de junho de 2019 às 10:28

Como faz para coletar o loot de todos os corpos que estejam no mesmo sqm como o amigo disse ali em cima?

3 meses depois...
gabrielzikaG
27 de setembro de 2019 às 20:09
Em 02/06/2019 em 12:15, Walox disse:

Não vejo necessidade em fazer uma gambiarra dessas, para resolver isso é coisa de 2 linhas...

Então faz melhor ao invés de cagar pela boca 

1 ano depois...
KaboFlowK
21 de fevereiro de 2021 às 04:02
Em 30/04/2019 em 12:10, gabrielzika disse:

@Walox neste caso, no script do Tony basta coloca isso depois do penultimo end:

 

doSetItemActionId(item.uid, 0)

Ficando assim: 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getItemAttribute(item.uid, "corpseowner") ~= cid then
		return doPlayerSendCancel(cid, "You're not the owner.")
	end
	local items = {}
	for i = 0, getContainerSize(item.uid) do
		local it = getContainerItem(item.uid, i)
		if it.uid > 0 then
			table.insert(items, {it.itemid, it.type})
			doRemoveItem(it.uid)
		end
	end
	if #items > 0 then
		for k = 1, #items do
			local playerItem = getPlayerItemById(cid, true, items[k][1])
			if playerItem.uid > 0 then
				if (playerItem.type + items[k][2]) > 100 then
					doPlayerAddItem(cid, items[k][1], (playerItem.type + items[k][2]) - 100)
					doTransformItem(playerItem.uid, items[k][1], 100)
				else
					doTransformItem(playerItem.uid, items[k][1], playerItem.type + items[k][2])
				end
			else
				doPlayerAddItem(cid, items[k][1], items[k][2])
			end
		end
		return true
	end
	doSetItemActionId(item.uid, 0)
	return false
end

Depois que o player coletar uma vez o corpse deixa de ter a ActionID, assim impossibilitando de o player tentar trollar o sistema.

 

 

[21/02/2021 07:02:25] [Error - Action Interface] 
[21/02/2021 07:02:25] data/actions/scripts/AutoLoot.lua:onUse
[21/02/2021 07:02:25] Description: 
[21/02/2021 07:02:25] data/actions/scripts/AutoLoot.lua:29: attempt to call global 'doSetItemActionId' (a nil value)
[21/02/2021 07:02:25] stack traceback:
[21/02/2021 07:02:25]     data/actions/scripts/AutoLoot.lua:29: in function <data/actions/scripts/AutoLoot.lua:1>