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

auto loot duplicando itens nao stackaveis


Question

Versão do Servidor: TFS - 0.3.5
Tipo de Script: actions
Código:
 
function onUse(cid, item, frompos, item2, topos) 
if isWatchingTv(cid) then return true end
	local quemMatou = getItemAttribute(item.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
			   doPlayerSendCancel(cid, "Você não pode abrir um loot que não é seu.")	
			   return true
			end
		end
	end
	      local autoLootList = getAllItensInMyList(cid)
		  local bag = getPlayerSlotItem(cid, 3).uid
		  local itemsToRemove = {}
		  
		  if isCollectAll(cid) then
		    for a = 0, getContainerSize(item.uid) do
				local it = getContainerItem(item.uid, a)
					if it.uid > 0 then
					   if addItemInFreeBag(bag, it.itemid, it.type) ~= false then
					      table.insert(itemsToRemove, it.uid)
					   end
					end
			end
		 end
		  
		  if #autoLootList > 0 and not isCollectAll(cid) then
			  for a = 0, getContainerSize(item.uid) do
				local it = getContainerItem(item.uid, a)
					if it.uid > 0 then
					for i = 1, #autoLootList do 
							if getItemInfo(it.itemid).name == autoLootList[i] then
							   if addItemInFreeBag(bag, it.itemid, it.type) ~= false then
								  table.insert(itemsToRemove, it.uid)
							   end
							end
						end
					end
			   end
		  end
		  
		  if #itemsToRemove > 0 then
		     for i = 1, #itemsToRemove do
			    doChangeTypeItem(itemsToRemove[i], 0)
			 end
		  end
	
end

ja testei varias correçoes que procurei e nenhuma funcionou, se alguem puder ajudar agradeço,

obs: no meu server aparece 0.3.6 mas nao achei essa opçao pra marcar no topico

Link to post
Share on other sites

13 answers to this question

Recommended Posts

  • 0
Em 17/07/2020 em 11:22, swainnoxus disse:
Versão do Servidor: TFS - 0.3.5
Tipo de Script: actions
Código:
  Ocultar conteúdo


function onUse(cid, item, frompos, item2, topos) 
if isWatchingTv(cid) then return true end
	local quemMatou = getItemAttribute(item.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
			   doPlayerSendCancel(cid, "Você não pode abrir um loot que não é seu.")	
			   return true
			end
		end
	end
	      local autoLootList = getAllItensInMyList(cid)
		  local bag = getPlayerSlotItem(cid, 3).uid
		  local itemsToRemove = {}
		  
		  if isCollectAll(cid) then
		    for a = 0, getContainerSize(item.uid) do
				local it = getContainerItem(item.uid, a)
					if it.uid > 0 then
					   if addItemInFreeBag(bag, it.itemid, it.type) ~= false then
					      table.insert(itemsToRemove, it.uid)
					   end
					end
			end
		 end
		  
		  if #autoLootList > 0 and not isCollectAll(cid) then
			  for a = 0, getContainerSize(item.uid) do
				local it = getContainerItem(item.uid, a)
					if it.uid > 0 then
					for i = 1, #autoLootList do 
							if getItemInfo(it.itemid).name == autoLootList[i] then
							   if addItemInFreeBag(bag, it.itemid, it.type) ~= false then
								  table.insert(itemsToRemove, it.uid)
							   end
							end
						end
					end
			   end
		  end
		  
		  if #itemsToRemove > 0 then
		     for i = 1, #itemsToRemove do
			    doChangeTypeItem(itemsToRemove[i], 0)
			 end
		  end
	
end

ja testei varias correçoes que procurei e nenhuma funcionou, se alguem puder ajudar agradeço,

obs: no meu server aparece 0.3.6 mas nao achei essa opçao pra marcar no topico

Duplica sempre? Tanto com collect all quanto pegando itens específicos?

Link to post
Share on other sites
  • 0
15 horas atrás, Yan18 disse:

Duplica sempre? Tanto com collect all quanto pegando itens específicos?

meu autoloot coleta todos os itens, mas qlq item nao stackavel que eu colocar dentro do corpo morto vai ser duplicado, da pra fazer infinitas vezes, oq ta acontecendo´é que pega o item, mas nao remove do corpo

22 horas atrás, LeoTK disse:

@swainnoxus

da uma olhada nesse

ja tinha tentado esse, da o msm erro que o cara fala la, fala que o corpo nao é meu

Link to post
Share on other sites
  • 0
1 hora atrás, swainnoxus disse:

meu autoloot coleta todos os itens, mas qlq item nao stackavel que eu colocar dentro do corpo morto vai ser duplicado, da pra fazer infinitas vezes, oq ta acontecendo´é que pega o item, mas nao remove do corpo

ja tinha tentado esse, da o msm erro que o cara fala la, fala que o corpo nao é meu

É poketibia seu servidor?

Link to post
Share on other sites
  • 0
59 minutos atrás, swainnoxus disse:

sim poketibia

 

Olha o link que o @LeoTK te mostrou acima. 

 

Mas, sobre o sistema, não é para remover o corpo, não tem sentido isso. O corpse dos monstros no Tibia são configurado no items.xml para desaparecer em determinado tempo na tag Decay. Já é configurado por lá, não é ideal remover por script, ainda mais em Poketibia.

Link to post
Share on other sites
  • 0
21 minutos atrás, LeoTK disse:

@swainnoxus se você ler no próprio tópico tem a resolução do problema inclusive o link que te enviei lá foi do comentário com a resolução do problema

 

logo abaixo desse comentario tem esse aki

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

é o mesmo problema que eu tenho

12 minutos atrás, Yan18 disse:

Olha o link que o @LeoTK te mostrou acima. 

 

Mas, sobre o sistema, não é para remover o corpo, não tem sentido isso. O corpse dos monstros no Tibia são configurado no items.xml para desaparecer em determinado tempo na tag Decay. Já é configurado por lá, não é ideal remover por script, ainda mais em Poketibia.

nao amigo, eu nao quero remover o corpo, o item nao stacavel dentro do corpo que nao é removido, por exemplo, se eu colocar uma bike dentro do corpo e ficar abrindo o corpo, cada vem que eu abrir o corpo vem uma bike pra mim, e a bike continua no corpo, isso acontece com qualquer item nao agrupavel que tiver no corpo

Link to post
Share on other sites
  • 0

@swainnoxus entendi, referente ao problema de duplicar deve estar dando algum conflito na verificação do item não agrupável, sobre o problema de ser dono do corpo não sei informar
@Yan18 acho que teria que ter uma correção na verificação do item sinceramente não testei o script ainda 

Link to post
Share on other sites
  • 0
3 minutos atrás, swainnoxus disse:

logo abaixo desse comentario tem esse aki

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

é o mesmo problema que eu tenho

nao amigo, eu nao quero remover o corpo, o item nao stacavel dentro do corpo que nao é removido, por exemplo, se eu colocar uma bike dentro do corpo e ficar abrindo o corpo, cada vem que eu abrir o corpo vem uma bike pra mim, e a bike continua no corpo, isso acontece com qualquer item nao agrupavel que tiver no corpo

Entendi, mas, ai não é que está duplicando, mas sim que não está removendo o item do corpse, o que faz total diferença. Do jeito que você falou, dava a entender que assim que coletava os itens, vinha duplicado os não empilháveis. 

 

1 hora atrás, LeoTK disse:

@swainnoxus entendi, referente ao problema de duplicar deve estar dando algum conflito na verificação do item não agrupável, sobre o problema de ser dono do corpo não sei informar
@Yan18 acho que teria que ter uma correção na verificação do item sinceramente não testei o script ainda 

Sim.

Link to post
Share on other sites
  • 0
28 minutos atrás, Yan18 disse:

Entendi, mas, ai não é que está duplicando, mas sim que não está removendo o item do corpse, o que faz total diferença. Do jeito que você falou, dava a entender que assim que coletava os itens, vinha duplicado os não empilháveis. 

 

Sim.

tem ideia de como resolver?

Link to post
Share on other sites
  • 0
Em 19/07/2020 em 13:49, LeoTK disse:

@swainnoxus entendi, referente ao problema de duplicar deve estar dando algum conflito na verificação do item não agrupável, sobre o problema de ser dono do corpo não sei informar
@Yan18 acho que teria que ter uma correção na verificação do item sinceramente não testei o script ainda 

sabe como fazer essa correçao?

Link to post
Share on other sites

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 bruninho38
      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  
    • 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