Ir para conteúdo

[Talkaction] Sistema De Auto Loot (Poketibia)


jackbolin

Posts Recomendados

Eae Xtibianos Blz?

 

Agradecerei a quem comentar o tópico.

Esse Script serve para Poketibia, mais não testei em ot servers de Tibia.

 

Vim Trazer a Vcs Uma Talkaction Bem Legal. Você está cansado de ficar indo até o corpo do pokemon para pegar o loot? Então ake está um sistema que ao invés de você ter que ir no corpo do pokemon pegar o loot, esse script pega automaticamente para você.

 

 

Vamos Ao Script:

 

Vá em Talkactions.xml adicione isso la parte dos players:

 

<talkaction words="/aloot" hide="yes" event="script" value="aloot.lua"/>

 

 

Agora em Crie um Arquivo .lua e com nome de aloot.lua e coloque isso e salve dentro da pasta Talkactions:

 

local stor, limit = 7575, 5 --storage, limit to add.

 

local allow_container = false --empty! not looted with items, atleast for now.

 

function onSay(cid, words, param)

local expl = param:explode(':')

local action, rst = expl[1], expl[2]

if (action:lower() == 'check') then

local infos, list = getPlayerStorageValue(cid, stor), {}

if (infos ~= -1) then

list = tostring(infos):explode(',')

end

local txt = 'Autoloot List:\n'

if (#list > 0) then

for k, id in ipairs(list) do

id = id:gsub('_', '')

if tonumber(id) then

txt = txt .. getItemNameById(tonumber(id)) .. ((k < #list) and '\n' or '')

end

end

else

txt = 'Empty'

end

doPlayerPopupFYI(cid, txt)

elseif (action:lower() == 'add') then

local infos, list = getPlayerStorageValue(cid, stor), {}

if (infos ~= -1) then

list = tostring(infos):gsub('_', ''):explode(',')

end

if (#list >= limit) then

return doPlayerSendCancel(cid, 'You already have ' .. limit .. ' autolooting items.')

end

local item = tonumber(rst)

if not item then

item = getItemIdByName(rst, false)

if not item then

return doPlayerSendCancel(cid, 'Esse item nao existe.')

end

end

if not allow_container and isItemContainer(item) then

return doPlayerSendCancel(cid, 'this item can not be autolooted.')

end

local attrs = getItemInfo(item)

if not attrs then

return doPlayerSendCancel(cid, 'Esse item nao existe.')

elseif not attrs.movable or not attrs.pickupable then

return doPlayerSendCancel(cid, 'this item can not be autolooted.')

end

if isInArray(list, item) then

return doPlayerSendCancel(cid, 'Ja foi adicionado.')

end

table.insert(list, tostring(item))

local new = ''

for v, id in ipairs(list) do

new = new .. '_' .. id:gsub('_' ,'') .. ((v < #list) and ',' or '')

end

doPlayerSetStorageValue(cid, stor, tostring(new))

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Item >>' .. getItemNameById(item) .. '<< has been added to the autoloot list.')

elseif (action:lower() == 'remove') then

local infos, list = getPlayerStorageValue(cid, stor), {}

if (infos ~= -1) then

list = tostring(infos):gsub('_', ''):explode(',')

end

if (#list == 0) then

return doPlayerSendCancel(cid, 'You dont have any item added.')

end

local item = tonumber(rst)

if not item then

item = getItemIdByName(rst, false)

if not item then

return doPlayerSendCancel(cid, 'not valid item.')

end

end

if not isInArray(list, item) then

return doPlayerSendCancel(cid, 'This item is not in the list.')

end

local new = ''

for v, id in ipairs(list) do

if (tonumber(id) ~= item) then

new = new .. '_' .. id:gsub('_' ,'') .. ((v < #list) and ',' or '')

end

end

doPlayerSetStorageValue(cid, stor, tostring(new))

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Item >>' .. getItemNameById(item) .. '<< removed from the autoloot list.')

end

return true

end

 

 

 

Gente desculpa, esqueci de por a parte do creaturescripts.

Agr vá em creaturescripts.xml e adicione essa tag:

 

<event type="login" name="aloot_reg" event="script" value="aloot.lua"/>
<event type="kill" name="aloot_kill" event="script" value="aloot.lua"/>

 

 

Agr crie um arquivo .lua e com nome de aloot.lua e coloque isso dentro e salve dentro da pasta creaturescripts/scripts.

 

function onLogin(cid)
registerCreatureEvent(cid, "aloot_kill")
return true
end

local stor = 7575

function autoloot(cid, target, pos)
local function doStack(cid, itemid, new)
	local count = getPlayerItemCount(cid, itemid)
	if (count > 100) then
		count = count - math.floor(count / 100) * 100
	end
	local newCount = count + new
	if (count ~= 0) then
		local find = getPlayerItemById(cid, true, itemid, count).uid
		if (find > 0) then
			doRemoveItem(find)
		else
			newCount = new
		end
	end
	local item = doCreateItemEx(itemid, newCount)
	doPlayerAddItemEx(cid, item, true)
end

local function scanContainer(cid, uid, list)
	for k = (getContainerSize(uid) - 1), 0, -1 do
		local tmp = getContainerItem(uid, k)
		if (isInArray(list, tmp.itemid)) then
			if isItemStackable(tmp.itemid) and (getPlayerItemCount(cid, tmp.itemid) > 0) then
				doStack(cid, tmp.itemid, tmp.type)
			else
				local item = doCreateItemEx(tmp.itemid, tmp.type)
				doPlayerAddItemEx(cid, item, true)
			end
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Looted ' .. tmp.type .. ' ' .. getItemNameById(tmp.itemid) .. '.')
			doRemoveItem(tmp.uid)
		elseif isContainer(tmp.uid) then
			scanContainer(cid, tmp.uid, list)
		end
	end
end

local items = {}
for i = getTileInfo(pos).items, 1, -1 do
	pos.stackpos = i
	table.insert(items, getThingFromPos(pos))
end

if (#items == 0) then
	return
end

local corpse = -1
for _, item in ipairs(items) do
	local name = getItemName(item.uid):lower()
	if name:find(target:lower()) then
		corpse = item.uid
		break
	end
end

if (corpse ~= -1) and isContainer(corpse) then
	scanContainer(cid, corpse, tostring(getPlayerStorageValue(cid, stor)):gsub('_', ''):explode(','))
end
end

function onKill(cid, target, lastHit)
if not isPlayer(target) then
	local infos = getPlayerStorageValue(cid, stor)
	if (infos == -1) then
		return true
	end
	local list = tostring(infos):explode(',')
	if (#list == 0) then
		return true
	end
	addEvent(autoloot, 150, cid, getCreatureName(target), getCreaturePosition(target))
end
return true
end

 

 

 

FIM... Espero que gostem ...agradecerei a quem comentar.

 

Se o script te ajudou:

Vale um REP+?

 

 

Só apertar no + ali no canto da tela.Nao Vai Quebrar a Mão.

 

 

VLW.

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

@lordbug99

O Script te ajudo???

 

 

Então o que custa dar um REP+?

n eu uso o do MatheusMkalo

eu disse que acho que esta faltando partde do script,pelo que vi esse so cria uma lista de items a serem pegos no autoloot,mais n tem um autoloot

---edit---

ae agora ta arrumado

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

  • 2 weeks later...

Galera pra adc o item é /aloot add:nome do item . Para remover o item é /aloot remove:nome do item que foi adicionado e para checar os itens que adicionou é /aloot check

Desculpa por nao respondeer ae é pq tavo sem net.

Link para o comentário
Compartilhar em outros sites

Brother aqui funciono em alguns monstros só, a noticia boa é que funciona, a ruim é que ainda tem bugs, pq eu consigui pegar loot de demon,dragon,ghoul entre outros testados.

mas bosses, demon skell e mais outros la não deu certo

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...