Ir para conteúdo

[OtClient] Auto-Loot


Gengo

Posts Recomendados

  • 1 month later...

Gengos, como posso usar outro autoloot, pq esse do xml n funciona no meu servidor, eu ja tenho um autoloot 

aquele /aloot add: 

troquei até as talk actions no modulo, funcionou, porem se eu deslogo ele limpa os loots adicionados.

Editado por xmaster0
FIZ ERRADO
Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...
Em 03/07/2020 em 18:02, xmaster0 disse:

Gengos, como posso usar outro autoloot, pq esse do xml n funciona no meu servidor, eu ja tenho um autoloot 

aquele /aloot add: 

troquei até as talk actions no modulo, funcionou, porem se eu deslogo ele limpa os loots adicionados.

Onde você errou @xmaster0 ? Compartilha ai que tô com o mesmo problema! kkkkk Sem contar que aparece uns erros no console:

 

[10:24:26.726] [Error - CreatureScript Interface]
[10:24:26.729] In a timer event called from:
[10:24:26.730] domodlib('Loot_func')
[10:24:26.732] function onDeath(cid, corpse, deathList)
[10:24:26.735] local killer,pos = deathList[1],getCreaturePosition(cid)
[10:24:26.737] addEvent(corpseRetireItems,1,killer,pos)
[10:24:26.740] return true
[10:24:26.741] end:onDeath
[10:24:26.742] Description:
[10:24:26.744] [string "info = {..."]:153: bad argument #1 to 'pairs' (table expected, got boolean)
[10:24:26.748] stack traceback:
[10:24:26.749]  [C]: in function 'pairs'
[10:24:26.751]  [string "info = {..."]:153: in function <[string "info = {..."]:142>

:(

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...
Em 16/07/2020 em 10:42, Alberto Gavi disse:

Onde você errou @xmaster0 ? Compartilha ai que tô com o mesmo problema! kkkkk Sem contar que aparece uns erros no console:

 


[10:24:26.726] [Error - CreatureScript Interface]
[10:24:26.729] In a timer event called from:
[10:24:26.730] domodlib('Loot_func')
[10:24:26.732] function onDeath(cid, corpse, deathList)
[10:24:26.735] local killer,pos = deathList[1],getCreaturePosition(cid)
[10:24:26.737] addEvent(corpseRetireItems,1,killer,pos)
[10:24:26.740] return true
[10:24:26.741] end:onDeath
[10:24:26.742] Description:
[10:24:26.744] [string "info = {..."]:153: bad argument #1 to 'pairs' (table expected, got boolean)
[10:24:26.748] stack traceback:
[10:24:26.749]  [C]: in function 'pairs'
[10:24:26.751]  [string "info = {..."]:153: in function <[string "info = {..."]:142>

:(

 

Cara eu fiz exatamente como ta no post, só n funciona o autoloot. Ai usei outro autoloot q tem aqui no xtibia, n achei o tutorial mas parece com esse : 

Obs> deixei tudo como o gengo postou, porem adicionei outro autoloot ou seja ficou com 2 autoloots no serv :/

mas deu certo, só adicionei os comandos do autoloot alternativo q deixei o link

 

Vai em loot.lua 

Procura   por 

g_game.talk('!autoloot add, '..edtItemName:getText())

 

e adiciona em baixo isso:

g_game.talk('/aloot add: '..edtItemName:getText())

essa é a logica, repara q o comando /aloot add é o comando do autoloot alternativo

 

depois tu procura o comando pra remover e adiciona o comando análogo

 

pq deixei os dois autoloots? pq n sou bom de programar, entao foi uma gambiarra, até tentei tirar o autoloot do gengos, mas da uns bugs no mod, pq este ta recebendo os valores por opcode, tentei fazer algo parecido com o autoloot alternativo pra ele enviar os dados pro mod, mas n deu certo, toda vez q deslogava os itens do autoloot desapareciam ai por enquanto n descubro como deixar o codigo mais clean ficou assim
 

 

 

Link para o comentário
Compartilhar em outros sites

  • 2 months later...
  • 4 weeks later...

Como faço para modificar essa função? 

maxSlot = 5

Queria 5 para premium e 3 para free, tem essa função:

-- altere ao seu gosto podendo fazer: g_game.getLocalPlayer():isPremium() and valorX or valorY

quando altero ocorre varios erros...

Link para o comentário
Compartilhar em outros sites

  • 1 year later...
Em 15/12/2018 em 10:57, Gengo disse:

Fala ai galera do xtibia estou aqui trazendo mais um module para o otClient.
Esses dias atras estavo jogando pokestorm e me deparei com o autoloot e decidi fazer um parecido com o deles e então pensei porque não trazer para a comunidade? Afinal não vejo muitos modulos de autoloot para otClient o unico que vi foi o autoloot da DxP, porem não é muito intuitivo comparado com modulo da pokestorm, bom sem mais enrolação vamos lá.

 

Feito o download do arquivo, coloque-o na pasta do seu otClient em /modules/ e pronto já é possível "utilizar-lo", porem com algumas exceções de algumas configurações básicas que temos que fazer para poder utilizar-lo com algumas eficiências.

 

Na pasta do seu otClient/data/ crie uma pasta chamada items e coloque o seus arquivos items.otb e items.xml.

Vai até a pasta do seu otClient/modules/game_things abre o arquivo things.lua e procure a função load(), e coloque o seguinte:

g_things.loadOtb ('/items/items.otb')
g_things.loadXml('/items/items.xml')

Obs: Não se assustem quando entrarem no client para logar, no inicio vai dar uma travada, mas depois de esperar uns segundos ele normaliza, pois o único problema é que o carregamento dos arquivos dos items eles são demorados.

 

Também é preciso fazer umas configurações rápida na parte do servidor para poder funcionar.


Copie e cole esse script e coloque na pasta do servidor em  mods/ e de o nome de autoloot.xml

  Mostrar conteúdo oculto
<?xml version="1.0" encoding="ISO-8859-1"?>
<mod name="Loot System" version="1.0" author="Vodkart And Mkalo" contact="none.com" enabled="yes">
<config name="Loot_func"><![CDATA[

info = {
	AutomaticDeposit = true,
	BlockMonsters = {},
	BlockItemsList = {2123,2515},
	Max_Slots = {free = 3, premium = 5},
	Storages = {27000,28001,28002}
}
function setPlayerStorageTable(cid, storage, tab)
	local tabstr = "&"
	for i,x in pairs(tab) do
		tabstr = tabstr .. i .. "," .. x .. ";"
	end
	setPlayerStorageValue(cid, storage, tabstr:sub(1, #tabstr-1))
end
function getPlayerStorageTable(cid, storage)
	local tabstr = getPlayerStorageValue(cid, storage)
	local tab = {}
	if type(tabstr) ~= "string" then
		return {}
	end
	if tabstr:sub(1,1) ~= "&" then
		return {}
	end
	local tabstr = tabstr:sub(2, #tabstr)
	local a = string.explode(tabstr, ";")
	for i,x in pairs(a) do
		local b = string.explode(x, ",")
		tab[tonumber(b[1]) or b[1]] = tonumber(b[2]) or b[2]
	end
	return tab
end
function isInTable(cid, item)
	for _,i in pairs(getPlayerStorageTable(cid, info.Storages[1]))do
		if tonumber(i) == tonumber(item) then
			return true
		end
	end
	return false
end
function addItemTable(cid, item)
	local x = {}
	for i = 1,#getPlayerStorageTable(cid, info.Storages[1]) do
		table.insert(x,getPlayerStorageTable(cid, info.Storages[1])[i])
	end
	if x ~= 0 then
		table.insert(x,tonumber(item))
		setPlayerStorageTable(cid, info.Storages[1], x)
	else
		setPlayerStorageTable(cid, info.Storages[1], {item})
	end
end
function removeItemTable(cid, item)
	local x = {}
	for i = 1,#getPlayerStorageTable(cid, info.Storages[1]) do
		table.insert(x,getPlayerStorageTable(cid, info.Storages[1])[i])
	end
	for i,v in ipairs(x) do
		if tonumber(v) == tonumber(item) then
			table.remove(x,i)
		end
	end
	return setPlayerStorageTable(cid, info.Storages[1], x)
end
function ShowItemsTabble(cid)
	local n,str = 0,"[+] Auto Loot Commands [+]\n\n!autoloot item name --> To add ou Remove item from list.\n!autoloot money --> To collect gold automatically.\n!autoloot clear --> To clear the list.\n!autoloot on/off --> To enable or disable the collecting of items in the system.\n\n[+] Auto Loot Info [+]\n\nSystem: "..(getPlayerStorageValue(cid, info.Storages[3]) <= 0 and "Activated" or "Disabled")..".\nGold Collecting: "..(getPlayerStorageValue(cid, info.Storages[2]) > 0 and "Activated" or "Disabled")..".\nBalance Total: ["..getPlayerBalance(cid).."] gp's.\nMaximum Slots: ["..#getPlayerStorageTable(cid, info.Storages[1]).."/"..(isPremium(cid) and info.Max_Slots.premium or info.Max_Slots.free).."]\n\n[+] Auto Loot Slots [+]\n\n"
	for i = 1,#getPlayerStorageTable(cid, info.Storages[1]) do
		n = n + 1
		str = str.."Slot "..n.." - "..getItemNameById(getPlayerStorageTable(cid, info.Storages[1])[i]).."\n"
	end
	return doPlayerPopupFYI(cid, str)
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 getItemsInContainerById(container, itemid) -- Function By Kydrai
	local items = {}
	if isContainer(container) and getContainerSize(container) > 0 then
		for slot=0, (getContainerSize(container)-1) do
			local item = getContainerItem(container, slot)
			if isContainer(item.uid) then
				local itemsbag = getItemsInContainerById(item.uid, itemid)
				for i=0, #itemsbag do
					table.insert(items, itemsbag[i])
				end
			else
				if itemid == item.itemid then
					table.insert(items, item.uid)
				end
			end
		end
	end
	return items
end
function doPlayerAddItemStacking(cid, itemid, amount) -- revisado
	local item, _G = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid), 0
	if #item > 0 then
		for _ ,x in pairs(item) do
			local ret = getThing(x)
			if ret.type < 100 then
				doTransformItem(ret.uid, itemid, ret.type+amount) 
				if ret.type+amount > 100 then
					doPlayerAddItem(cid, itemid, ret.type+amount-100)
				end
				break
			else
				_G = _G+1
			end
		end
		if _G == #item then
			doPlayerAddItem(cid, itemid, amount)
		end
	else
		return doPlayerAddItem(cid, itemid, amount)
	end
end
function AutomaticDeposit(cid,item,n)
	local deposit = item == tonumber(2160) and (n*10000) or tonumber(item) == 2152 and (n*100) or (n*1)
	return doPlayerDepositMoney(cid, deposit)
end
function corpseRetireItems(cid, pos)
	local check = false
	for i = 0, 255 do
		pos.stackpos = i
		tile = getTileThingByPos(pos)
		if tile.uid > 0 and isCorpse(tile.uid) then
			check = true break
		end
	end
	if check == true then
		local items = getContainerItems(tile.uid)
		for i,x in pairs(items) do
			if isInArray(getPlayerStorageTable(cid, info.Storages[1]), tonumber(x.itemid)) or getPlayerStorageValue(cid, info.Storages[2]) > 0 and isInArray({2148,2152,2160},tonumber(x.itemid)) then
				if isItemStackable(x.itemid) then
					doPlayerAddItemStacking(cid, x.itemid, x.type)
					if info.AutomaticDeposit == true and isInArray({2148,2152,2160}, tonumber(x.itemid)) then
						AutomaticDeposit(cid,x.itemid,x.type)
					end
				else
					doPlayerAddItem(cid, x.itemid)
				end
				doRemoveItem(x.uid)
			end
		end
	end
end
]]></config>
<event type="login" name="LootLogin" event="script"><![CDATA[
function onLogin(cid)
	registerCreatureEvent(cid, "LootEventKIll")
	if isPremium(cid) and getPlayerStorageValue(cid, 27001) <= 0 then
		setPlayerStorageValue(cid, 27001, 1)
	elseif getPlayerStorageValue(cid, 27001) > 0 and not isPremium(cid) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[Auto Loot] You premium is Over, Start a new list!")
		setPlayerStorageValue(cid, 27001, -1)
		setPlayerStorageValue(cid, info.Storages[1], -1)
	end
	return true
end]]></event>
<event type="kill" name="LootEventKIll" event="script"><![CDATA[
domodlib('Loot_func')
function onKill(cid, target, lastHit) 
	if isPlayer(cid) and getPlayerStorageValue(cid, info.Storages[3]) <= 0 and isMonster(target) and not isInArray(info.BlockMonsters, getCreatureName(target):lower()) then
		addEvent(corpseRetireItems, 0, cid ,getThingPos(target))
	end
	return true
end]]></event>
<talkaction words="!autoloot;/autoloot" event="buffer"><![CDATA[
domodlib('Loot_func')
local slots = isPremium(cid) and info.Max_Slots.premium or info.Max_Slots.free
if not param:lower() or param:lower() == "" then
	return true
elseif param:lower() == "clean" then
	setPlayerStorageValue(cid, info.Storages[1], -1)
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] Your list has been cleaned.") 
	return true
elseif isInArray({"on","off"}, param:lower()) then
	setPlayerStorageValue(cid, info.Storages[3], getPlayerStorageValue(cid, info.Storages[3]) <= 0 and 1 or 0)
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] "..(getPlayerStorageValue(cid, info.Storages[3]) > 0 and "Stopped" or "Started")..".")
	return true
end

local param = string.explode(param, ",")
if param[1]:lower() == "add" then
local item = getItemIdByName(param[2], false)
if not item then
	doPlayerSendCancel(cid, "This item does not exist.")
	return true
end
local var = isInTable(cid, item)

if isInArray(info.BlockItemsList, item) then
	doPlayerSendCancel(cid, "You can not add this item in the list!")
	return true
elseif not var and #getPlayerStorageTable(cid, info.Storages[1]) >= slots then
	doPlayerSendCancel(cid, "max "..slots.." from auto loot") return true
end
if not var then
	addItemTable(cid, item)
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[AutoLoot] You added the item ["..param[2].."] in the list")
elseif param[1]:lower() == "remove" then
	local item = getItemIdByName(param[2], false)
	if not item then
		doPlayerSendCancel(cid, "This item does not exist.")
		return true
	end
	removeItemTable(cid, item)
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[AutoLoot] You removed the item ["..param[2].."] from the list")
end

return true]]></talkaction>
</mod>

 


Ainda na pasta do seu servidor abre o arquivo /data/creaturescripts/scripts/login.lua e coloque o seguinte script dentro da função onLogin:

local loot = ''
for i = 1, #getPlayerStorageTable(cid, info.Storages[1]) do
  loot = loot..getItemInfo(getPlayerStorageTable(cid, info.Storages[1])[i]).clientId..'-'..getItemNameById(getPlayerStorageTable(cid, info.Storages[1])[i])..'@'
end
doSendPlayerExtendedOpcode(cid, 157, loot)


Feito todos os passos corretamente, configurado certo, deve ficar assim no game:

auto_loot.png.24d504b065011ea525edd52e66a9f355.png

 

Bom espero que tenham entendido e gostado, não sou muito de ficar escrevendo tutorial, até uma próxima. 

 

Download

 

Créditos

  Mostrar conteúdo oculto

Gengo(eu) - módule para o otClient.

Vodkart e Mkalo - autoloot na parte do servidor.

 

o meu foi mais não está coletando os itens sabe fala o pq ?

 

Link para o comentário
Compartilhar em outros sites

  • 1 month later...
  • 5 months later...

desculpa eu reviver esse topico mas to com um erro no system que fica assim quando coloca no alto loot

 

2131081426_2022-07-12(1).png.218290f2298ae4010342ac1589fd62b6.png

 

se alguem solber me ajudar a resolver isso eu agradeço

 

Link para o comentário
Compartilhar em outros sites

Em 12/07/2022 em 14:11, rafersiq disse:

desculpa eu reviver esse topico mas to com um erro no system que fica assim quando coloca no alto loot

 

2131081426_2022-07-12(1).png.218290f2298ae4010342ac1589fd62b6.png

 

se alguem solber me ajudar a resolver isso eu agradeço

 

 

O script de auto loot do gengo utiliza a funçaõ: getItemInfo para obter uma informação do item, portanto se isso acontece, significa que talvez o item possa não estar registrado no items.xml.

Link para o comentário
Compartilhar em outros sites

31 minutos atrás, Thalles Vitor disse:

 

O script de auto loot do gengo utiliza a funçaõ: getItemInfo para obter uma informação do item, portanto se isso acontece, significa que talvez o item possa não estar registrado no items.xml.

 

ja dessisti desse auto loot , vou comprar de voce o system mais pra frente

Link para o comentário
Compartilhar em outros sites

  • 3 months later...
  • 3 months later...

Adicionei tudo certinho na BASE DXP porem na distro aparece isso e nao entra no char pq sera ? Esse info eu teria q muda pra algo q meu server aceita?

 

[06/02/2023 19:25:03] [Error - CreatureScript Interface] 
[06/02/2023 19:25:03] data/creaturescripts/scripts/player/login.lua:onLogin
[06/02/2023 19:25:03] Description: 
[06/02/2023 19:25:03] data/creaturescripts/scripts/player/login.lua:51: attempt to index global 'info' (a nil value)
[06/02/2023 19:25:03] stack traceback:
[06/02/2023 19:25:03]     data/creaturescripts/scripts/player/login.lua:51: in function <data/creaturescripts/scripts/player/login.lua:48>

Link para o comentário
Compartilhar em outros sites

Em 06/02/2023 em 19:30, maiconmoreira disse:

Adicionei tudo certinho na BASE DXP porem na distro aparece isso e nao entra no char pq sera ? Esse info eu teria q muda pra algo q meu server aceita?

 

[06/02/2023 19:25:03] [Error - CreatureScript Interface] 
[06/02/2023 19:25:03] data/creaturescripts/scripts/player/login.lua:onLogin
[06/02/2023 19:25:03] Description: 
[06/02/2023 19:25:03] data/creaturescripts/scripts/player/login.lua:51: attempt to index global 'info' (a nil value)
[06/02/2023 19:25:03] stack traceback:
[06/02/2023 19:25:03]     data/creaturescripts/scripts/player/login.lua:51: in function <data/creaturescripts/scripts/player/login.lua:48>

 

tem alguma parte do system que ta interferindo no login.lua:onLogin

 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...