ON
creatureevent

Spread Loot

Por Oneshot, 25 de jan. de 2014 em Globalevents e Spells

otserv
tibia
script
16
4.5k
OneshotO
25 de janeiro de 2014 às 21:58

Spread Loot

Este é um pedido feito no tópico A Fábrica

Boa noite, galera.

 

Este é o primeiro pedido atendido no meu tópico A Fábrica, foi um pedido feito pelo usuário OriGM.

 

Consiste em um sistema de "espalhar" o loot do monstro em uma área delimitada de 1 sqm, torna o jogo bem real, afinal muitos MMORPGs, como Mu Online, Ragnarok, entre outros, "espalham" seu loot.

 

Não tive como fazer diferentes testes, mas acho que funciona muito bem e não tem bugs severos, como criar itens em tiles bloqueados.

 

A instalação é fácil como qualquer creaturescript.

 

spreadloot.lua

local function doSpreadLoot(fromPosition, toPosition, container)
	for slot = (getContainerSize(container.uid) - 1), 0, -1 do
		local item = getContainerItem(container.uid, slot)
		if not isContainer(item.uid) then
			local position = {
				x = math.random(fromPosition.x, toPosition.x),
				y = math.random(fromPosition.y, toPosition.y),
				z = fromPosition.z,
			}
			local itemEx = doCreateItemEx(item.itemid, item.type)
			if doTileAddItemEx(position, itemEx) then
				doRemoveItem(item.uid)
			end
		else
			doSpreadLoot(fromPosition, toPosition, item)
			doRemoveItem(item.uid)
		end
	end	
	return true
end

function onKill(cid, target)
	if isMonster(target) then
		local position = getCreaturePosition(target)
		local name = getCreatureName(target)
		
		local fromPosition = {x = position.x - 1, y = position.y - 1, z = position.z}
		local toPosition = {x = position.x + 1, y = position.y + 1, z = position.z}
		
		addEvent(function()
			local container = getTileItemById(position, getMonsterInfo(name).lookCorpse)
			if container.uid > 0 then
				doSpreadLoot(fromPosition, toPosition, container)
			end
		end, 100)
	end
	return true
end

login.lua

registerCreatureEvent(cid, "SpreadLoot")

creaturescripts.xml

<event type="kill" name="SpreadLoot" event="script" value="lootsystem.lua"/>

Bom, isso é tudo, minha galera.

 

Att,

Oneshot Garou

Editado Janeiro 29 por Garou

libanoriL
25 de janeiro de 2014 às 22:05

Como assim espalhar?

OneshotO
25 de janeiro de 2014 às 22:07

Como assim espalhar?

 

Ele remove o item do corpo do monstro e o coloca no chão aos lados do corpo, entendeu agora?

Editado Janeiro 25 por Garou

Nil ValueN
25 de janeiro de 2014 às 22:35

Muito bom cara ;), gostaria de Saber aplicando esse código ira acontecer isso apenas com monstros, gostei muito do código mas ele poderia ser usado principalmente para Boss colocando em seu .xml ou uma tabela dentro do código com os possíveis monstros.

AberosA
25 de janeiro de 2014 às 22:43

mas ai outro player que tiver na hunt pode roubar seu loot , seria mas elgal se so o player que amtou pudesse pegar o loot

Editado Janeiro 25 por Aberos

LolkskyL
26 de janeiro de 2014 às 01:34

Concordo com o Aberos. O loot deveria aparecer somene para o player que matar o bicho, ou aparecer para todos da party.

IncurI
26 de janeiro de 2014 às 01:50

^ Isso já precisaria se muita modificação nas sources...

 

--

 

Ótimo script! Levou meu rep+

Editado Janeiro 26 por Incur

OneshotO
26 de janeiro de 2014 às 06:17

Não dá para fazer isso e desconfio que nem modificando todas as sources. É legal, porque alimenta a discórdia no servidor, quem nunca dropou uma Jewel of Bless no MU e foi roubado? haha

AberosA
26 de janeiro de 2014 às 09:54

o mu se o kara roubar meu bless , life ou soul ele nunca mais joga na vida dele kkkkkkkkkkkkkk !! se ele loga eu mato ele kkkkkkkkkkkkk


@Garou Voce podia Fzer uma Modificação nesse system de loot e fazer ele ir pra bag ? ao inves de ir pro chao , no xtibia tem um que vai pra bag mas tem q fikar adicionando os itens por talk e só pode add 5 ai é ruim

meubkM
26 de janeiro de 2014 às 10:11

não seria :

registerCreatureEvent(cid, "SpreadLoot")

-

enquanto a somente o player q matou poder pegar o loot, iria precisar da função onMove, que executa toda vez q vc move um item, tem na otland, ai vc coloca pra adicionar um atributo com o nome ou id do char q mato, sendo q somente este char possa mover os items, seria legal tbem , gravar o tempo q o item foi dropado,e depois de 30 segundos qualquer um possa pegar os items !

OneshotO
26 de janeiro de 2014 às 10:57

não seria :

registerCreatureEvent(cid, "SpreadLoot")

-

enquanto a somente o player q matou poder pegar o loot, iria precisar da função onMove, que executa toda vez q vc move um item, tem na otland, ai vc coloca pra adicionar um atributo com o nome ou id do char q mato, sendo q somente este char possa mover os items, seria legal tbem , gravar o tempo q o item foi dropado,e depois de 30 segundos qualquer um possa pegar os items !

 

Eu tinha registrado diferente aqui no meu computador, obrigado pela observação.

 

De fato, esqueci do onMove, com ele dá para fazer o que a galera quer, mas não estou afim, já me agrada como está. Sinta-se livre para fazer isso, xotservx.

Editado Janeiro 26 por Garou

meubkM
26 de janeiro de 2014 às 21:58

nem todos tem a função, e não estou afim de ficar ensinando ninguém a editar as sources , ehuehueheu !

OneshotO
29 de janeiro de 2014 às 10:28

Bom, arrumei um erro básico, que estava executando o Spread Loot para jogadores, dando erro na função getMonsterInfo.

OriGMO
29 de janeiro de 2014 às 10:39

Garou estou no trabalho agora e nao testei.

Mas acredito que só funcione para monstro correto? Tem como colocar para players tambem? Que no caso eu havia pedido isso na Fabrica. Os players droparão todos os itens do corpo,com exceção de alguns slots(esqueci de mencionar isso no pedido). Se nao der tudo bem.

E pra quem está falando que vão roubar loot bla bla bla,a intenção é exatamente essa. Fica ridiculo,só quem matou saber o loot de um monstro.

Editado Janeiro 29 por OriGM

OneshotO
29 de janeiro de 2014 às 11:17

Garou estou no trabalho agora e nao testei.

Mas acredito que só funcione para monstro correto? Tem como colocar para players tambem? Que no caso eu havia pedido isso na Fabrica. Os players droparão todos os itens do corpo,com exceção de alguns slots(esqueci de mencionar isso no pedido). Se nao der tudo bem.

E pra quem está falando que vão roubar loot bla bla bla,a intenção é exatamente essa. Fica ridiculo,só quem matou saber o loot de um monstro.

 

Vou fazer essa alteração mais tarde, valeu a sugestão.