[ACTION] Auto Loot - Coletando ao abrir corpo

Tony Araujo
em Actions e Talkactions

Tony Araujo

OrochiElf
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 27/02/13Posts: 446Gênero: Masculino

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

 

Tony Araújo :happy:

JulianoZN

JulianoZN
avatar
Suporter
Suporter

INFOS

Grupo: SuporterRegistrado: 12/07/17Posts: 164Gênero: MasculinoChar no Tibia: [ADM] Slender
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

lSainty

xd
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 30/10/11Posts: 509Gênero: Masculino
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.

re2JIBH.jpg

JulianoZN

JulianoZN
avatar
Suporter
Suporter

INFOS

Grupo: SuporterRegistrado: 12/07/17Posts: 164Gênero: MasculinoChar no Tibia: [ADM] Slender
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

jeanflamengo

[> ObservandU essa bagaÇa <]
avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 31/07/09Posts: 205Gênero: Masculino

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

darkmubr

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 14/03/19Posts: 2

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.

Walox

Deetrax
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 05/04/18Posts: 95Gênero: MasculinoChar no Tibia: Deetrax

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!

JulianoZN

JulianoZN
avatar
Suporter
Suporter

INFOS

Grupo: SuporterRegistrado: 12/07/17Posts: 164Gênero: MasculinoChar no Tibia: [ADM] Slender
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

 

Walox

Deetrax
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 05/04/18Posts: 95Gênero: MasculinoChar no Tibia: Deetrax
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ê

gabrielzika

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 20/06/15Posts: 92Gênero: Masculino

@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.

darkalvaro

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 31/10/11Posts: 61Char no Tibia: Predador
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?

Walox

Deetrax
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 05/04/18Posts: 95Gênero: MasculinoChar no Tibia: Deetrax
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...

Taiger

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 02/07/07Posts: 1140Gênero: Masculino

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

gabrielzika

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 20/06/15Posts: 92Gênero: Masculino
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 

KaboFlow

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 04/07/17Posts: 434
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>