Jump to content
×
×
  • Create New...
  • 0

poketibia [Pedido] Autoloot pegando os itens sem precisar click no corpo


Question

Olá pessoal,

Estou procurando a alguns dias e não consegui fazer da certo ate o momento, então acho que mais pessoas devem ter a mesma dificuldade.

Atualmente alguns servidores de poketibia tem um autoloot que é ativado assim que o monstro morre, você não precisa ir lá click no corpo e nem ficar configurando qual item vc quer.

Uso a base do PokemasterX, esse servidores já te um script que pega todos os loot's, porem precisa click no poke morto, se alguém conseguir fazer o scrip funcionar se click no corpo ou tiver outro script ajudaria muito.

Obrigado!

Script que uso hoje:
 

function getContainerBackpack(containeruid) 

local containers = {} 

	if type(getContainerSize(containeruid)) ~= "number" then 
		return false 
	end 
	
	for slot = 0, getContainerSize(containeruid)-1 do 
	local item = getContainerItem(containeruid, slot) 
	
		if item.itemid == 0 then 
			break 
		end 
		
		if isContainer(item.uid) then 
			table.insert(containers, item.uid) 
		end 
	end 

	for i = 1, #containers do
		if #containers > 1 then
			table.remove(containers, containers[i+1])
		end
		if #containers > 2 then
			table.remove(containers, containers[i+2])
		end
		if #containers > 3 then
			table.remove(containers, containers[i+3])
		end
		if #containers > 4 then
			table.remove(containers, containers[i+4])
		end
		if #containers > 5 then
			table.remove(containers, containers[i+5])
		end
	end
		
	for i = 1, #containers do 
		for _, x in ipairs(getContainerBackpack(containers[i])) do 
			table.insert(containers, x) 
		end 
	end 
	
	return containers 
end

function getContainerItems(containeruid)
	local items = {}
	local containers = {}
	if type(getContainerSize(containeruid)) ~= "number" then
		return false
	end
	for slot = 0, getContainerSize(containeruid)-1 do
		local item = getContainerItem(containeruid, slot)
		if item.itemid == 0 then
			break
		end
		if isContainer(item.uid) then
			table.insert(containers, item.uid)
		end
		table.insert(items, item)
	end
	if #containers > 0 then
		for i,x in ipairs(getContainerItems(containers[1])) do
			table.insert(items, x)
		end
		table.remove(containers, 1)
	end
	return items
end

function isCorpse(item)
	return string.find(getItemNameById(item.itemid), "fainted") or string.find(getItemNameById(item.itemid), "defeated ")
end

function getCorpsesPosition(position)
	local toret = { } -- table to return items
	
	position.stackpos = 1
	
	while true do -- loop to catch the items and insert them in toret table
		local thing = getThingfromPos(position)
		if thing.itemid == 0 then -- thing doesn't exist, break the loop...
			break
		end
		
		if thing.uid > 0 and isContainer(thing.uid) and isCorpse(thing) then
			table.insert(toret,thing)
		end
		
		position.stackpos = position.stackpos + 1 -- get next item
	end
	
	return toret
end

function doPlayerAddItemStacking(cid, itemid, quant) -- by mkalo
	local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)
	local piles = 0
	if #item > 0 then
		for i,x in pairs(item) do
			if getThing(x).type < 100 then
				local it = getThing(x)
				doTransformItem(it.uid, itemid, it.type+quant)
				if it.type+quant > 100 then
					doPlayerAddItem(cid, itemid, it.type+quant-100)
				end
			else
				piles = piles+1
			end
		end
	else
		return doPlayerAddItem(cid, itemid, quant)
	end
	if piles == #item then
		doPlayerAddItem(cid, itemid, quant)
	end
end

function doLoot(cid, corpse)

	if not isCollectAll(cid) then
		return true
	end
	
	if not isContainer(corpse.uid) then
		return false
	end
	
	local itemsToLootAllWindow = {}
	
	for _, loot in pairs(getContainerItems(corpse.uid)) do
		local slot = getPlayerSlotItem(cid, 3).uid
		local container = getContainerBackpack(slot)
		local item1 = getPlayerStorageValue(cid, 251461):explode("|") or 0
		
		function configLoot()
			local itt = "".. tostring(getItemInfo(loot.itemid).clientId) .."|".. loot.type .."|"
			local ittt1, ittt2 = itt:explode("|")[1], itt:explode("|")[2]
			local itr = ittt1 .."-".. ittt2 .."-"
			table.insert(itemsToLootAllWindow, itr)				
			doRemoveItem(loot.uid)
			doSendPlayerExtendedOpcode(cid, 69, table.concat(itemsToLootAllWindow))	
		end

		--// Sistema de Daily Itens \\--
		
		if inDailyItens(cid) then	
			if tonumber(item1[1]) == loot.itemid then
				doPlayerSendTextMessage(cid, 20, "[Daily Itens]: Resta você coletar ["..(tonumber(item1[3]) - getPlayerItemCount(cid, item1[1])) - loot.type.."] "..getItemNameById(loot.itemid)..".")
			end
							
			if tonumber(item1[2]) == loot.itemid then
				doPlayerSendTextMessage(cid, 20, "[Daily Itens]: Resta você coletar ["..(tonumber(item1[4]) - getPlayerItemCount(cid, item1[2])) - loot.type.."] "..getItemNameById(loot.itemid)..".")
			end
							
			if tonumber(item1[5]) == loot.itemid then
				doPlayerSendTextMessage(cid, 20, "[Daily Itens]: Resta você coletar ["..(tonumber(item1[7]) - getPlayerItemCount(cid, item1[5])) - loot.type.."] "..getItemNameById(loot.itemid)..".")
			end		
			
			if tonumber(item1[6]) == loot.itemid then
				doPlayerSendTextMessage(cid, 20, "[Daily Itens]: Resta você coletar ["..(tonumber(item1[8]) - getPlayerItemCount(cid, item1[6])) - loot.type.."] "..getItemNameById(loot.itemid)..".")
			end
		end
			
		--// Sistema de Daily Itens \\--
		
			if #container < 1 then
				doPlayerAddItem(cid, loot.itemid, loot.type)
				configLoot()	
			end					
		
			for i = 1, #container do
				if #container >= 1 then
					if getContainerSlotsFree(container[i]) >= 1 then
						doAddContainerItem(container[i], loot.itemid, loot.type)	
						configLoot()	
						break
					end
				else
					doPlayerAddItem(cid, loot.itemid, loot.type)
					configLoot()				  	
				end
			end			
		end	
	end

function checkLoot(cid, corpse, SemMensagem)

	if not isContainer(corpse.uid) then
		return false
	end

	local quemMatou = getItemAttribute(corpse.uid, "corpseowner")
	
	if quemMatou then
		local player = getCreatureByName(quemMatou)
		if isPlayer(player) then
			local isInParyWithPlayer = false
			if isInParty(cid) and isInParty(player) then
				isInParyWithPlayer = isPartyEquals(player, cid)
			end
			
			if getCreatureName(cid) ~= getCreatureName(player) and not isInParyWithPlayer then
				if not SemMensagem then
					doPlayerSendCancel(cid, "Você não pode abrir um loot que não é seu.")
				end
				return false
			end
		end
	end
	return true
end

function onUse(cid, item, frompos, item2, topos)

	
	if isWatchingTv(cid) then 
		return true 
	end

	if not isContainer(item.uid) then
		return true
	end
	
	if not isCollectAll(cid) then
		return false
	end

	local maxItem = 800
	if isContainer(item.uid)then
		if (getPlayerTotalItem(cid) + #getAllItemsFromContainer(item)) > maxItem then
			doPlayerSendCancel(cid, "Você não pode carregar mais itens pois já lotou a quantidade de slot's disponíveis")
			return false
		end
	else
		if getPlayerTotalItem(cid) + 1 > maxItem then
			doPlayerSendCancel(cid, "Você não pode carregar mais itens pois já lotou a quantidade de slot's disponíveis")
			return false
		end
	end
	
	local openCorpse = 	#getContainerItems(item.uid) < 1

	if checkLoot(cid, item, false) then
		doLoot(cid, item)
	end
	
	for _, corpse in pairs(getCorpsesPosition(getThingPosition(item.uid))) do
		if checkLoot(cid, corpse, false) then
			doLoot(cid, corpse)	
		end
	end
	
	if openCorpse then
		return false
	end
	
	return true
end

 

Link to post
Share on other sites

2 answers to this question

Recommended Posts

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.


    Administrador |  Diretor |  Coordenador |  Moderador |  Suporter |  Estagiário |  Herói
  • Similar Content

    • By jenison06
      Alguem consegue adaptar sistema de contagem, o meu nao esta contando apenas no abra e msmo assim so conta 1 ball.
       
      Action ( Catch.lua)
       
      Lib (catch system.lua)
      Checatch (Talkaction)
      function onSay(cid, words, param, channel) if param == "" then return true end getBrokesIn(cid, param) return true end  
    • By KaboFlow
      Versão do Servidor: TFS - 0.3.4 Tipo de Script: actions Código: Ocupo um reviver com tempo de 10 minutos.
      para o nível 200+
    • By KaboFlow
      Como todos sabem existem milhares de servidores de poketibia para download aqui no fórum, mas nenhum esta 100%, quando eu falo 100% é dos sistemas principais e não das edições. Então resolvi pegar uma base PField OpenSource aqui do fórum mesmo e começar um projeto comunitário totalmente aberto, para tentarmos deixar a base 100% com os sistemas principais de um servidor de poketibia para quem quiser começar um projeto serio usar este server como base.
       Mas porque eu escolhi a base PField? Simples, por ela ser uma base mais antiga e mais limpa, sem todas as gambiarras, armadilhas e menos poluída. A minha meta é trabalharmos no server opensource,  criado do 0 tambem, e todos se ajudarem para quando ficar com os sistemas básicos 100% dai a galera começar a fazer suas edições
       
      ATENÇÃO: Não sou programador, sou meia boca em quase tudo e tenho esperança que com a ajuda de todos conseguiremos deixar a base perfeita para futuros projetos. Peço que não briguem aqui no tópico por causa de créditos, reps etc. Caso alguém tenha autoria em algo e não estiver nos créditos me avise que estarei adicionando. Não quero reputação, apenas quero fazer algo bom para a comunidade com a ajuda de vocês.
      Inicialmente estaremos corrigindo os bugs e adicionando os sistemas principais deixando a base mais atualizada, quem quiser pegar a base e já ir editando não fique perguntando aqui no tópico, porque como eu disse a prioridade inicial são os sistemas básicos.
       
       
      • Menu:
                       ├ Informações;
        ├ Prints;
      ├ Bugs;
                 ├ Download;
             └ Créditos.
       

       
       
       
       

      • Prints •
       
      • Informações Basicas •
       


       
       
       
      • Créditos •
      •ADM Kabo
      •Kevick
      •Aberos
      •Avronex
      •Lordbaxx
      •CipSoft
      •PxG
      •Nintendo
      Se faltar algum me avisem.
       
      Se tiver algo errado no tópico me avisem, não tenho muita experiencia em posts.
       
       
       
    • By KaboFlow
      Versão do Servidor: TFS - 0.3.4 Tipo de Script: actions Código: que cura metade da vida do pokémon
       
      uma poção que cura em%
      exemplo
      usar a poção cura você em 50% da vida do pokémon
    • By strongernxs
      Fala Galera do XT, Trouxe Pra vocês o sistema de Guardian Incompleto para que todos possam ajudar a fazer... Foi desenvolvido por mim a parte em lua...
       
      Actions > crie o arquivo guardian.lua
      Actions.xml > coloque itemID > e o resto da TAG
       
      Favor não retirar os créditos, Seja Grato a quem Está tentando disponibilizar algo que é pago para ser feito...
       
       
       
       
       
      --- CREATED BY CLOUD ---
       
      local config = {
          pokemons = {"Guardian Mewtwo", "Guardian Mewtwo"}, -- nome dos pokemons que podem ser sumonados,
          time = {summon = 1*60, cd = 2*60}, -- tempo de duração e tempo de cd
          level = 125, -- define o level mínimo para se usar o item
          storages = {summon = 5549, cd = 5550}
      }
      msg = {finish = "Acabou o Tempo.", begin = "Voce Sumonou Seu Guardian Por" .. config.time.summon/60 .. " Minutos"}
      function removePokemon(poke, cid)
          if isCreature(poke) then
              doRemoveCreature(poke)
              doPlayerSay(cid, msg.finish, TALKTYPE_PLAYER_SAY)
         end
      end
         
      function onUse(cid, item, fromPosition, itemEx, toPosition)
          setPlayerStorageValue(cid, config.storages.cd, 0)
          if (getPlayerStorageValue(cid, config.storages.cd) - os.time()) <= 0 then
              if getPlayerLevel(cid) > config.level then
                  pokemon = doCreateMonster(config.pokemons[math.random(1, #config.pokemons)], getCreaturePosition(cid))
                  setPlayerStorageValue(cid, config.storages.cd, os.time() + config.time.cd)
                  doConvinceCreature(cid, pokemon)
                       addEvent(function()
               if isPlayer(cid) then
              doPlayerSay(cid, "Eu Escolho Voce. I Choose You.")
             end
           end, 10) 
                   addEvent(function()
                  if isPlayer(cid) then
                  doPlayerSay(cid, "Acabou o Tempo do Guardian. Finished Time Of Guardian.")
                 end
          end, 10000)
                  doPlayerSay(cid, msg.begin, TALKTYPE_PLAYER_SAY)
                  addEvent(removePokemon, config.time.summon*1000, pokemon, cid)
              else
                  doPlayerSendCancel(cid, "Voce Nao Tem Level Para Usar o Summon.")
              end
          else
              doPlayerSendCancel(cid, "Desculpe o Item Esta em Coowndown.")
          end
      return true
      end 
       
      Não Esqueçam de Criar o XML do Monster com nome Guardian, e add na lib