Ir para conteúdo

[creatuescript] Loot No Server Log


Mock

Posts Recomendados



Servidor testado: TFS 0.3.1 (possivelmente em versoes anteriores)

Servidor testado2: Matriz

Autor: Mock -- eu xP

Versão: 1.2.1

 

 

Percebi que muitos otservers 8.5 não tem esse sistema justamente por o TFS nao ter integrado ele ainda, apenas matriz o possue, a certeza que esse script pode funcionar em até servidores 8.22 ou 8.1 é que ele funciona em matriz e antigamente até as versoes 8.1 e 8.22 quase todos usavam servidores a base da matriz (otserv original) e quase ninguem usava TFS, entao tive que fazer 2 versoes, só estarei postando a versão do TFS, caso alguem queira a da matriz peça por PVT.

 

Vamos começar.

 

Bom uma função que mudou de função no TFS é a getItemName, no TFS pega por UID e na matriz por itemid entao fiz algumas mudanças, mais deixe de lado vamos instalar.

Vá até a pasta creaturescripts, abra o login.lua. antes do utimo:

return TRUE
end

Adcione uma linha ficando assim:

registerCreatureEvent(cid, "loot")
return TRUE
end

Salve. e abra o creaturescripts.xml e adcione esta tag:

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

 

Feito o mesmo abra a pasta scripts e crie o arquivo loot.lua e insira isso:

--- Script by mock
local function find(pa)--- Script by mock
  for i=1,255 do
 pa.stackpos = i
 local corpse = getThingfromPos(pa)
 if isCorpse(corpse.uid) == TRUE then
	if isContainer(corpse.uid) == TRUE then
		  return corpse.uid
	end
end
end
return FALSE
end
local function getConteiner(item)--- Script by mock
  if isContainer(item.uid) == FALSE then
  return ""
  end
  local items = getItemName(item.itemid)..": ("
  local g = doAddContainerItem(item.uid,2815,1)
  for i=1, getContainerCap(item.uid) do
   local k = getContainerItem(item.uid, i)
   if k.itemid ~= 0 then
	  if isContainer(k.uid) == TRUE then
		 items = items..getConteiner(k)..', '
		 print('o0')
	  else
		 if k.type > 1 then
			items = items..k.type..'x '..getItemNameById(k.itemid).."s, "
		 else
		   items = items..getItemNameById(k.itemid)..", "
		 end
	  end
   end
  end
  items = items:sub(1,#items-2)..'.'
  doRemoveItem(g,-1)
  return items..')'
end
function getLoot(pa,cid,nam)--- Script by mock
	 corpse = find(pa)
	 if corpse == FALSE then
		 return FALSE
	 end				   
	 local g = doAddContainerItem(corpse,2815,1)
	 local str = 'Loot de '..nam..': ' 
	 for i=1, getContainerCap(corpse) do
	 			  local a = getContainerItem(corpse, i)
	 			  if a.itemid ~= 0 then
	 				 if isContainer(a.uid) == TRUE then
	 					str = str..getConteiner(a)..' , '
	 				 else
	 					if a.type > 1 then
	 					   str = str..a.type..'x '..getItemNameById(a.itemid)..'s, '
	 					else
	 					   str = str..getItemNameById(a.itemid)..', '
	 					end
	 				 end
				  end

	 end
	 doRemoveItem(g,-1)
	 str = str:sub(1,#str-2)..'.'
	 doPlayerSendTextMessage(cid, 23, str)
end

function onKill(cid, target)--- Script by mock
addEvent(getLoot,100,getCreaturePosition(target),cid,getCreatureName(target))
return 1
end

Apos isso, salve e feche o server, nao adianta dar reload pois todos os players tem que fazer login dinovo.

Apos isso toda vez que um monstro morrer os players verão seu loot conforme a foto:



imagemnfc.png

Só relembrando, tem servidores que ja possue esse sistema como a matriz, algums ja editaram o TFS inserindo esse sistema, porem o oficial não o possue então serve para ele.

Divirtam-se

Editado por Mock
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...