Simonp1512
DBhispano
- Joined
- Feb 22, 2009
- Messages
- 62
- Reaction score
- 3
EDIT: i'm using tfs 1.3
hi i'm using autoloot system from "printer" thx for that
talkaction works good you can add and remove items i set 25 max items but never pickup the items this is the scripts
Obs "i read on this post AutoLoot System for tfs 1.x (https://otland.net/threads/autoloot-system-for-tfs-1-x.237607/) to do
but is the same issue
if any one can help me i really apreciate that
hi i'm using autoloot system from "printer" thx for that
talkaction works good you can add and remove items i set 25 max items but never pickup the items this is the scripts
Obs "i read on this post AutoLoot System for tfs 1.x (https://otland.net/threads/autoloot-system-for-tfs-1-x.237607/) to do
Maybe what it's trying to loot isn't considered a corpse.
Remove the portion from the if statement in onKill that containsResult should be:Lua:corpse:getType():isCorpse()
Lua:if corpse:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == cid then
but is the same issue
Lua:
dofile('data/lib/libs.lua')
-- AutoLoot config
AUTO_LOOT_MAX_ITEMS = 25
-- Reserved storage
AUTOLOOT_STORAGE_START = 10000
AUTOLOOT_STORAGE_END = AUTOLOOT_STORAGE_START + AUTO_LOOT_MAX_ITEMS
-- AutoLoot config end
NOT_MOVEABLE_ACTION = 8000
PARTY_PROTECTION = 1 -- Set to 0 to disable.
ADVANCED_SECURE_MODE = 1 -- Set to 0 to disable.
STORAGEVALUE_PROMOTION = 30018
customDoorsRange = {
{ openDoor = 26545, closedDoor = 26541 },
{ openDoor = 26545, closedDoor = 26542 },
{ openDoor = 26546, closedDoor = 26543 },
{ openDoor = 26546, closedDoor = 26544 },
{ openDoor = 33121, closedDoor = 33117 },
{ openDoor = 33121, closedDoor = 33118 },
{ openDoor = 33122, closedDoor = 33119 },
{ openDoor = 33122, closedDoor = 33120 },
{ openDoor = 34673, closedDoor = 34671 },
{ openDoor = 34674, closedDoor = 34672 },
{ openDoor = 34677, closedDoor = 34675 },
{ openDoor = 34678, closedDoor = 34676 },
{ openDoor = 12695, closedDoor = 12692 },
{ openDoor = 12703, closedDoor = 12701 },
}
ropeSpots = {384, 418, 8278, 8592, 13189, 14435, 14436, 15635, 19518, 26019, 24621, 24622, 24623, 24624}
doors = {
[1209] = 1211, [1210] = 1211, [1212] = 1214, [1213] = 1214, [1219] = 1220, [1221] = 1222, [1231] = 1233, [1232] = 1233, [1234] = 1236,
[1235] = 1236, [1237] = 1238, [1239] = 1240, [1249] = 1251, [1250] = 1251, [1252] = 1254, [1253] = 1254, [1539] = 1540, [1541] = 1542,
[3535] = 3537, [3536] = 3537, [3538] = 3539, [3544] = 3546, [3545] = 3546, [3547] = 3548, [4913] = 4915, [4914] = 4915, [4916] = 4918,
[4917] = 4918, [5082] = 5083, [5084] = 5085, [5098] = 5100, [5099] = 5100, [5101] = 5102, [5107] = 5109, [5108] = 5109, [5110] = 5111,
[5116] = 5118, [5117] = 5118, [5119] = 5120, [5125] = 5127, [5126] = 5127, [5128] = 5129, [5134] = 5136, [5135] = 5136, [5137] = 5139,
[5138] = 5139, [5140] = 5142, [5141] = 5142, [5143] = 5145, [5144] = 5145, [5278] = 5280, [5279] = 5280, [5281] = 5283, [5282] = 5283,
[5284] = 5285, [5286] = 5287, [5515] = 5516, [5517] = 5518, [5732] = 5734, [5733] = 5734, [5735] = 5737, [5736] = 5737, [6192] = 6194,
[6193] = 6194, [6195] = 6197, [6196] = 6197, [6198] = 6199, [6200] = 6201, [6249] = 6251, [6250] = 6251, [6252] = 6254, [6253] = 6254,
[6255] = 6256, [6257] = 6258, [6795] = 6796, [6797] = 6798, [6799] = 6800, [6801] = 6802, [6891] = 6893, [6892] = 6893, [6894] = 6895,
[6900] = 6902, [6901] = 6902, [6903] = 6904, [7033] = 7035, [7034] = 7035, [7036] = 7037, [7042] = 7044, [7043] = 7044, [7045] = 7046,
[7054] = 7055, [7056] = 7057, [8541] = 8543, [8542] = 8543, [8544] = 8546, [8545] = 8546, [8547] = 8548, [8549] = 8550, [9165] = 9167,
[9166] = 9167, [9168] = 9170, [9169] = 9170, [9171] = 9172, [9173] = 9174, [9267] = 9269, [9268] = 9269, [9270] = 9272, [9271] = 9272,
[9273] = 9274, [9275] = 9276, [10276] = 10277, [10274] = 10275, [10268] = 10270, [10269] = 10270, [10271] = 10273, [10272] = 10273, [10471] = 10472,
[10480] = 10481, [10477] = 10479, [10478] = 10479, [10468] = 10470, [10469] = 10470, [10775] = 10777, [10776] = 10777, [12092] = 12094, [12093] = 12094,
[12188] = 12190, [12189] = 12190, [19840] = 19842, [19841] = 19842, [19843] = 19844, [19980] = 19982, [19981] = 19982, [19983] = 19984, [20273] = 20275,
[20274] = 20275, [20276] = 20277, [17235] = 17236, [18208] = 18209, [13022] = 13023, [10784] = 10786, [10785] = 10786, [12099] = 12101, [12100] = 12101,
[12197] = 12199, [12198] = 12199, [19849] = 19851, [19850] = 19851, [19852] = 19853, [19989] = 19991, [19990] = 19991, [19992] = 19993, [20282] = 20284,
[20283] = 20284, [20285] = 20286, [17237] = 17238, [13020] = 13021, [10780] = 10781, [12095] = 12096, [12195] = 12196, [19845] = 19846, [19985] = 19986,
[20278] = 20279, [10789] = 10790, [12102] = 12103, [12204] = 12205, [19854] = 19855, [19994] = 19995, [20287] = 20288, [10782] = 10783, [12097] = 12098,
[12193] = 12194, [19847] = 19848, [19987] = 19988, [20280] = 20281, [10791] = 10792, [12104] = 12105, [12202] = 12203, [19856] = 19857, [19996] = 19997,
[20289] = 20290, [22814] = 22815, [22815] = 22816, [22817] = 22818, [22819] = 22820, [22823] = 22825, [22824] = 22825, [22826] = 22827, [22828] = 22829,
[25158] = 25159, [25160] = 25161, [25162] = 25163, [25164] = 25165, [27209] = 27210, [27211] = 27212, [33295] = 33296, [34679] = 34680, [34681] = 34682,
[34683] = 34684, [34685] = 34686
}
verticalOpenDoors = {
1211, 1220, 1224, 1228, 1233, 1238, 1242, 1246, 1251, 1256, 1260, 1540, 3546, 3548, 3550, 3552, 4915, 5083, 5109, 5111, 5113, 5115, 5127, 5129, 5131,
5133, 5142, 5145, 5283, 5285, 5289, 5293, 5516, 5737, 5749, 6194, 6199, 6203, 6207, 6251, 6256, 6260, 6264, 6798, 6802, 6902, 6904, 6906, 6908, 7044,
7046, 7048, 7050, 7055, 8543, 8548, 8552, 8556, 9167, 9172, 9269, 9274, 9274, 9269, 9278, 9282, 10270, 10275, 10279, 10283, 10479, 10481, 10485, 10483,
10786, 12101, 12199, 19851, 19853, 19991, 19993, 20284, 20286, 17238, 13021, 10790, 12103, 12205, 19855, 19995, 20288, 10792, 12105, 12203, 19857, 19997,
20290, 22825, 22827, 22829, 22831, 25159, 25163, 26546
}
horizontalOpenDoors = {
1214, 1222, 1226, 1230, 1236, 1240, 1244, 1248, 1254, 1258, 1262, 1542, 3537, 3539, 3541, 3543, 4918, 5085, 5100, 5102, 5104, 5106, 5118,
5120, 5122, 5124, 5136, 5139, 5280, 5287, 5291, 5295, 5518, 5734, 5746, 6197, 6201, 6205, 6209, 6254, 6258, 6262, 6266, 6796, 6800, 6893,
6895, 6897, 6899, 7035, 7037, 7039, 7041, 7057, 8546, 8550, 8554, 8558, 9170, 9174, 9272, 9276, 9280, 9284, 10273, 10277, 10281, 10285,
10470, 10472, 10476, 10474, 10777, 12094, 12190, 19842, 19844, 19982, 19984, 20275, 20277, 17236, 18209, 13023, 10781, 12096, 12196,
19846, 19986, 20279, 10783, 12098, 12194, 19848, 19988, 20281, 22816, 22818, 22820, 22822, 25161, 25165, 26545
}
openSpecialDoors = {
1224, 1226, 1228, 1230, 1242, 1244, 1246, 1248, 1256, 1258, 1260, 1262, 3541, 3543, 3550, 3552, 5104, 5106, 5113, 5115, 5122, 5124, 5131, 5133,
5289, 5291, 5293, 5295, 6203, 6205, 6207, 6209, 6260, 6262, 6264, 6266, 6897, 6899, 6906, 6908, 7039, 7041, 7048, 7050, 8552, 8554, 8556, 8558,
9176, 9178, 9180, 9182, 9278, 9280, 9282, 9284, 10279, 10281, 10283, 10285, 10474, 10476, 10483, 10485, 10781, 12096, 12196, 19846, 19986, 20279,
10783, 12098, 12194, 19848, 19988, 20281, 10790, 12103, 12205, 19855, 19995, 20288, 10792, 12105, 12203, 19857, 19997, 20290
}
questDoors = {
1223, 1225, 1241, 1243, 1255, 1257, 3542, 3551, 5105, 5114, 5123, 5132, 5288, 5290, 5745, 5748, 6202, 6204, 6259, 6261, 6898, 6907, 7040, 7049,
8551, 8553, 9175,9177, 9277, 9279, 10278, 10280, 10475, 10484, 10782, 12097, 19847, 19987, 20280, 10791, 12104, 12204, 12195, 19856, 19996, 20289,
22821, 22830, 25162, 25164
}
levelDoors = {
1227, 1229, 1245, 1247, 1259, 1261, 3540, 3549, 5103, 5112, 5121, 5130, 5292, 5294, 6206, 6208, 6263, 6265, 6896, 6905, 7038, 7047, 8555, 8557,9179, 9181,
9281, 9283, 10282, 10284, 10473, 10482, 10780, 10789, 10780, 12095, 12195, 19845, 19985, 20278, 10789, 12102, 12193, 12202, 19854, 19994, 20287
}
keys = {2086, 2087, 2088, 2089, 2090, 2091, 2092, 10032}
--[ Impact Analyser ]--
updateInterval = 2 --every 2 seconds
-- Healing
healingImpact = {} -- global table to insert data
-- Damage
damageImpact = {} -- global table to insert data
-- New prey => preyTimeLeft
nextPreyTime = {}
--
local start = os.time()
local linecount = 0
debug.sethook(function(event, line)
linecount = linecount + 1
if os.mtime() - start >= 1 then
if linecount >= 30000 then
print(string.format("possible infinite loop in file %s near line %s", debug.getinfo(2).source, line))
debug.sethook()
end
linecount = 0
start = os.time()
end
end, "l")
--
function doCreatureSayWithRadius(cid, text, type, radiusx, radiusy, position)
if not position then
position = Creature(cid):getPosition()
end
local spectators, spectator = Game.getSpectators(position, false, true, radiusx, radiusx, radiusy, radiusy)
for i = 1, #spectators do
spectator = spectators[i]
spectator:say(text, type, false, spectator, position)
end
end
function getBlessingsCost(level)
if level <= 30 then
return 2000
elseif level >= 120 then
return 20000
else
return (level - 20) * 200
end
end
function getPvpBlessingCost(level)
if level <= 30 then
return 2000
elseif level >= 270 then
return 50000
else
return (level - 20) * 200
end
end
function isInRange(pos, fromPos, toPos)
return pos.x >= fromPos.x and pos.y >= fromPos.y and pos.z >= fromPos.z and pos.x <= toPos.x and pos.y <= toPos.y and pos.z <= toPos.z
end
function isNumber(str)
return tonumber(str) ~= nil
end
function Creature.getMonster(self)
return self:isMonster() and self or nil
end
function getTibianTime()
local worldTime = getWorldTime()
local hours = math.floor(worldTime / 60)
local minutes = worldTime % 60
if minutes < 10 then
minutes = '0' .. minutes
end
return hours .. ':' .. minutes
end
function getDistanceBetween(firstPosition, secondPosition)
local xDif = math.abs(firstPosition.x - secondPosition.x)
local yDif = math.abs(firstPosition.y - secondPosition.y)
local posDif = math.max(xDif, yDif)
if firstPosition.z ~= secondPosition.z then
posDif = posDif + 15
end
return posDif
end
table.contains = function(array, value)
for _, targetColumn in pairs(array) do
if targetColumn == value then
return true
end
end
return false
end
string.split = function(str, sep)
local res = {}
for v in str:gmatch("([^" .. sep .. "]+)") do
res[#res + 1] = v
end
return res
end
string.trim = function(str)
return str:match'^()%s*$' and '' or str:match'^%s*(.*%S)'
end
-- Stamina
if nextUseStaminaTime == nil then
nextUseStaminaTime = {}
end
if nextUseStaminaPrey == nil then
nextUseStaminaPrey = {}
end
if nextUseXpStamina == nil then
nextUseXpStamina = {}
end
if lastItemImbuing == nil then
lastItemImbuing = {}
end
if nextDelayPreyReroll == nil then
nextDelayPreyReroll = {}
end
--Boss entry
if not bosssPlayers then
bosssPlayers = {
addPlayers = function (self, cid)
local player = Player(cid)
if not player then return false end
if not self.players then
self.players = {}
end
self.players[player:getId()] = 1
end,
removePlayer = function (self, cid)
local player = Player(cid)
if not player then return false end
if not self.players then return false end
self.players[player:getId()] = nil
end,
getPlayersCount = function (self)
if not self.players then return 0 end
local c = 0
for _ in pairs(self.players) do c = c + 1 end
return c
end
}
end
-- MARRY
PROPOSED_STATUS = 1
MARRIED_STATUS = 2
PROPACCEPT_STATUS = 3
LOOK_MARRIAGE_DESCR = TRUE
ITEM_WEDDING_RING = 2121
ITEM_ENGRAVED_WEDDING_RING = 10502
function getPlayerSpouse(id)
local resultQuery = db.storeQuery("SELECT `marriage_spouse` FROM `players` WHERE `id` = " .. db.escapeString(id))
if resultQuery ~= false then
local ret = result.getDataInt(resultQuery, "marriage_spouse")
result.free(resultQuery)
return ret
end
return -1
end
function setPlayerSpouse(id, val)
db.query("UPDATE `players` SET `marriage_spouse` = " .. val .. " WHERE `id` = " .. id)
end
function getPlayerMarriageStatus(id)
local resultQuery = db.storeQuery("SELECT `marriage_status` FROM `players` WHERE `id` = " .. db.escapeString(id))
if resultQuery ~= false then
local ret = result.getDataInt(resultQuery, "marriage_status")
result.free(resultQuery)
return ret
end
return -1
end
function setPlayerMarriageStatus(id, val)
db.query("UPDATE `players` SET `marriage_status` = " .. val .. " WHERE `id` = " .. id)
end
function Player:getMarriageDescription(thing)
local descr = ""
if getPlayerMarriageStatus(thing:getGuid()) == MARRIED_STATUS then
playerSpouse = getPlayerSpouse(thing:getGuid())
if self == thing then
descr = descr .. " You are "
elseif thing:getSex() == PLAYERSEX_FEMALE then
descr = descr .. " She is "
else
descr = descr .. " He is "
end
descr = descr .. "married to " .. getPlayerNameById(playerSpouse) .. '.'
end
return descr
end
-- The following 2 functions can be used for delayed shouted text
function say(param)
selfSay(text)
doCreatureSay(param.cid, param.text, 1)
end
function delayedSay(text, delay)
local delay = delay or 0
local cid = getNpcCid()
addEvent(say, delay, {cid = cid, text = text})
end
function functionRevert()
Game.setStorageValue(GlobalStorage.FerumbrasAscendantQuest.Habitats.Corrupted, 0)
Game.setStorageValue(GlobalStorage.FerumbrasAscendantQuest.Habitats.Desert, 0)
Game.setStorageValue(GlobalStorage.FerumbrasAscendantQuest.Habitats.Dimension, 0)
Game.setStorageValue(GlobalStorage.FerumbrasAscendantQuest.Habitats.Grass, 0)
Game.setStorageValue(GlobalStorage.FerumbrasAscendantQuest.Habitats.Ice, 0)
Game.setStorageValue(GlobalStorage.FerumbrasAscendantQuest.Habitats.Mushroom, 0)
Game.setStorageValue(GlobalStorage.FerumbrasAscendantQuest.Habitats.Roshamuul, 0)
Game.setStorageValue(GlobalStorage.FerumbrasAscendantQuest.Habitats.Venom, 0)
Game.setStorageValue(GlobalStorage.FerumbrasAscendantQuest.Habitats.AllHabitats, 0)
for a = 1, #basins do
local item = Tile(basins[a].pos):getItemById(24852)
item:transform(12070)
end
local specs, spec = Game.getSpectators(Position(33629, 32693, 12), false, false, 25, 25, 85, 85)
for i = 1, #specs do
spec = specs[i]
if spec:isPlayer() then
spec:teleportTo(Position(33630, 32648, 12))
spec:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
spec:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You were teleported because the habitats are returning to their original form.')
elseif spec:isMonster() then
spec:remove()
end
end
for x = 33611, 33625 do
for y = 32658, 32727 do
local position = Position(x, y, 12)
local tile = Tile(position)
if not tile then
return
end
local ground = tile:getGround()
if not ground then
return
end
ground:remove()
local items = tile:getItems()
if items then
for i = 1, #items do
local item = items[i]
item:remove()
end
end
end
end
for x = 33634, 33648 do
for y = 32658, 32727 do
local position = Position(x, y, 12)
local tile = Tile(position)
if not tile then
return
end
local ground = tile:getGround()
if not ground then
return
end
ground:remove()
local items = tile:getItems()
if items then
for i = 1, #items do
local item = items[i]
item:remove()
end
end
end
end
Game.loadMap('data/world/worldchanges/habitats.otbm')
return true
end
function getLootRandom()
return math.random(0, MAX_LOOTCHANCE) / configManager.getNumber(configKeys.RATE_LOOT)
end
XML:
<?xml version="1.0" encoding="UTF-8"?>
<talkactions>
<!-- commands -->
<talkaction words="/n" separator=" " script="place_npc.lua" />
<!-- players -->
<talkaction words="!autoloot" separator=" " script="autoloot.lua"/>
<talkaction words="!buyhouse" script="buyhouse.lua" />
<talkaction words="!sellhouse" separator=" " script="sellhouse.lua" />
<talkaction words="!leavehouse" script="leavehouse.lua" />
<talkaction words="!serverinfo" script="serverinfo.lua" />
<talkaction words="!aol" script="aol.lua" />
<talkaction words="!backpack" script="backpack.lua" />
<talkaction words="!mount" script="mount.lua" />
<talkaction words="!rope" script="rope.lua" />
<talkaction words="!shovel" script="shovel.lua" />
<talkaction words="!bless" script="bless.lua" />
<talkaction words="!food" script="food.lua" />
<talkaction words="!online" script="online.lua" />
</talkactions>
Lua:
function onSay(player, words, param)
local split = param:split(",")
local action = split[1]
if action == "add" then
local item = split[2]:gsub("%s+", "", 1)
local itemType = ItemType(item)
if itemType:getId() == 0 then
itemType = ItemType(tonumber(item))
if itemType:getId() == 0 then
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "There is no item with that id or name.")
return false
end
end
local itemName = tonumber(split[2]) and itemType:getName() or item
local size = 0
for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do
local storage = player:getStorageValue(i)
if size == AUTO_LOOT_MAX_ITEMS then
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "The list is full, please remove from the list to make some room.")
break
end
if storage == itemType:getId() then
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." is already in the list.")
break
end
if storage <= 0 then
player:setStorageValue(i, itemType:getId())
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." has been added to the list.")
break
end
size = size + 1
end
elseif action == "remove" then
local item = split[2]:gsub("%s+", "", 1)
local itemType = ItemType(item)
if itemType:getId() == 0 then
itemType = ItemType(tonumber(item))
if itemType:getId() == 0 then
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "There is no item with that id or name.")
return false
end
end
local itemName = tonumber(split[2]) and itemType:getName() or item
for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do
if player:getStorageValue(i) == itemType:getId() then
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." has been removed from the list.")
player:setStorageValue(i, 0)
return false
end
end
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." was not founded in the list.")
elseif action == "show" then
local text = "-- Auto Loot List --\n"
local count = 1
for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do
local storage = player:getStorageValue(i)
if storage > 0 then
text = string.format("%s%d. %s\n", text, count, ItemType(storage):getName())
count = count + 1
end
end
if text == "" then
text = "Empty"
end
player:showTextDialog(1950, text, false)
elseif action == "clear" then
for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do
player:setStorageValue(i, 0)
end
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "The autoloot list has been cleared.")
else
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Use the commands: !autoloot {add, remove, show, clear}")
end
return false
end
XML:
<?xml version="1.0" encoding="UTF-8"?>
<creaturescripts>
<!-- autoloot -->
<event type="kill" name="AutoLoot" script="autoloot.lua" />
Lua:
local function scanContainer(cid, position)
local player = Player(cid)
if not player then
return
end
local corpse = Tile(position):getTopDownItem()
if not corpse or not corpse:isContainer() then
return
end
if corpse:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == cid then
for a = corpse:getSize() - 1, 0, -1 do
local containerItem = corpse:getItem(a)
if containerItem then
for b = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do
if player:getStorageValue(b) == containerItem:getId() then
containerItem:moveTo(player)
end
end
end
end
end
end
function onKill(player, target)
if not target:isMonster() then
return true
end
addEvent(scanContainer, 100, player:getId(), target:getPosition())
return true
end
Lua:
-- Autoloot
player:registerEvent("AutoLoot")
-- Completed Quests
function onLogin(player)
for i = 1, #freeQuests do
if player:getStorageValue(freeQuests[i].storage) ~= freeQuests[i].value then
player:setStorageValue(freeQuests[i].storage, freeQuests[i].value)
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, freeQuests[i].questName .. " quest unlocked!")
end
end
return true
end
function Player.sendTibiaTime(self, hours, minutes)
local msg = NetworkMessage()
msg:addByte(0xEF)
msg:addByte(hours)
msg:addByte(minutes)
msg:sendToPlayer(self)
msg:delete()
return true
end
and too many other kind of codes i think is too much spam sorry :(
if any one can help me i really apreciate that
Last edited: