Bom, tenho percebi a má fé dos mappers hoje em dia, que em grande parte se utilizam de lugares escondidos, então fiz um script que checa tile por tile os items que ali existem e então, caso for um item suspeito, adiciona numa tabela este item, junto com sua posição.
Este script nesta versão, está verificando items de houses também, eu fiz um pouco correndo e não fiz perfeito por isto então.
O script não retira os items do mapa, simplesmente faz o log para você ir até algum map editor retirá-los.
Screenshoots:
Script LUA (checkitems.lua):
-- configsdelay = 2000 -- delay em milisegundos de cada tile a ser checado, não troque
stackpos_delay = 100 -- delay em milisegundos de cada stackpos a ser checada, não troque
startPosition = {
x = 100,
y = 100,
z = 2,
stackpos = 0
} -- de onde começa a ser checado (todos valores têm que ser menores de onde termina)
finishPosition = {
x = 1000,
y = 1000,
z = 14,
stackpos = 7
} -- posição que acaba de checar (todos valores têm que ser maiores de onde começa)
-- não edite as posições caso não saiba como configurá-las
GROUP_ALLOWED = 5 -- players com group_id maior que este poderão executar a talkaction
editedItems = {
2195, -- boots of haste
2206, -- time ring
2342, -- helmet of the ancients
2343, -- helmet of the ancients
2358, -- boots of waterwalking
2381, -- halberd
2387, -- double axe
2390, -- magic longsword
2391, -- war hammer
2392, -- fire sword
2393, -- giant sword
2396, -- ice rapier
2400, -- magic sword
2407, -- bright sword
2408, -- warlord sword
2414, -- dragon lance
2415, -- great axe
2421, -- thunder hammer
2424, -- silver mace
2425, -- obsidian lance
2426, -- naginata
2427, -- guardian halberd
2430, -- knight axe
2431, -- stonecutter axe
2432, -- fire axe
2433, -- enchanted staff
2434, -- dragon hammer
2435, -- dwarven axe
2436, -- skull staff
2437, -- golden mace
2438, -- epee
2440, -- daramanian waraxe
2443, -- ravager's axe
2444, -- hammer of wrath
2445, -- crystal mace
2446, -- pharaoh sword
2447, -- twin axe
2451, -- djinn blade
2452, -- heavy mace
2453, -- arcane staff
2454, -- war axe
2457, -- steel helmet
2462, -- devil helmet
2463, -- plate armor
2464, -- chain armor
2465, -- brass armor
2466, -- golden armor
2469, -- dragon scale legs
2470, -- golden legs
2471, -- golden helmet
2472, -- magic plate armor
2474, -- winged helmet
2475, -- warrior helmet
2476, -- knight armor
2477, -- knight legs
2479, -- strange helmet
2483, -- scale armor
2486, -- noble armor
2487, -- crown armor
2488, -- crown legs
2489, -- dark armor
2490, -- dark helmet
2491, -- crown helmet
2492, -- dragon scale mail
2493, -- demon helmet
2494, -- demon armor
2495, -- demon legs
2496, -- horned helmet
2497, -- crusader helmet
2498, -- royal helmet
2499, -- amazon helmet
2500, -- amazon armor
2501, -- ceremonial mask
2502, -- dwarven helmet
2503, -- dwarven armor
2504, -- dwarven legs
2505, -- elven armor
2506, -- dragon scale helmet
2507, -- elven legs
2514, -- mastermind shield
2516, -- dragon shield
2517, -- shield of honour
2519, -- crown shield
2520, -- demon shield
2522, -- great shield
2523, -- blessed shield
2528, -- tower shield
2534, -- vampire shield
2536, -- medusa shield
2537, -- amazon shield
2539, -- phoenix shield
2542, -- tempest shield
2547, -- power bolt
2640, -- soft boots
2644, -- bunny slippers
2645, -- steel boots
2646, -- golden boots
2647, -- plate legs
2656, -- blue robe
3961, -- lich staff
3962, -- beastslayer axe
3965, -- hunting spear
3968, -- leopard armor
3969, -- horseman helmet
3972, -- beholder helmet
3982, -- crocodile boots
5462, -- pirate boots
5741, -- skull helmet
6132, -- soft boots
6391, -- nightmare shield
6433, -- necromancer shield
6528, -- avenger
6529, -- infernal bolt
6553, -- ruthless axe
7363, -- piercing bolt
7365, -- onyx arrow
7367, -- enchanted spear
7368, -- assassin star
7378, -- royal spear
7379, -- brutetamer's staff
7380, -- headchopper
7382, -- demonrage sword
7383, -- relic sword
7384, -- mystic blade
7386, -- mercenary sword
7387, -- diamond sceptre
7388, -- vile axe
7389, -- heroic axe
7390, -- justice seeker
7391, -- thaian sword
7392, -- orcish maul
7402, -- dragon slayer
7403, -- berserker
7404, -- assassin dagger
7405, -- havoc blade
7406, -- blacksteel sword
7407, -- haunted blade
7408, -- wyvern fang
7410, -- queen's sceptre
7411, -- ornamented axe
7412, -- butcher's axe
7413, -- titan axe
7414, -- abyss hammer
7415, -- cranial basher
7416, -- bloody edge
7417, -- runed sword
7418, -- nightmare blade
7419, -- dreaded cleaver
7420, -- reaper's axe
7422, -- jade hammer
7424, -- lunar staff
7426, -- amber staff
7427, -- chaos mace
7428, -- bonebreaker
7429, -- blessed sceptre
7430, -- dragonbone staff
7431, -- demonbone
7432, -- furry club
7433, -- ravenwing
7434, -- royal axe
7436, -- angelic axe
7437, -- sapphire hammer
7449, -- crystal sword
7451, -- shadow sceptre
7452, -- spiked squelcher
7453, -- executioner
7454, -- glorious axe
7456, -- noble axe
7457, -- fur boots
7461, -- krimhorn helmet
7462, -- ragnir helmet
7463, -- mammoth fur cape
7730, -- blue legs
7745, -- relic sword
7746, -- mystic blade
7747, -- blacksteel sword
7748, -- dragon slayer
7750, -- knight axe
7751, -- heroic axe
7752, -- headchopper
7753, -- war axe
7755, -- crystal mace
7756, -- cranial basher
7757, -- orcish maul
7758, -- war hammer
7764, -- relic sword
7765, -- mystic blade
7766, -- blacksteel sword
7767, -- dragon slayer
7769, -- knight axe
7770, -- heroic axe
7771, -- headchopper
7772, -- war axe
7774, -- crystal mace
7775, -- cranial basher
7776, -- orcish maul
7777, -- war hammer
7855, -- relic sword
7856, -- mystic blade
7857, -- blacksteel sword
7858, -- dragon slayer
7860, -- knight axe
7861, -- heroic axe
7862, -- headchopper
7863, -- war axe
7865, -- crystal mace
7866, -- cranial basher
7867, -- orcish maul
7868, -- war hammer
7870, -- relic sword
7871, -- mystic blade
7872, -- blacksteel sword
7873, -- dragon slayer
7875, -- knight axe
7876, -- heroic axe
7877, -- headchopper
7878, -- war axe
7880, -- crystal mace
7881, -- cranial basher
7882, -- orcish maul
7883, -- war hammer
7884, -- terra mantle
7885, -- terra legs
7886, -- terra boots
7891, -- magma boots
7892, -- glacier shoes
7893, -- lightning boots
7894, -- magma legs
7895, -- lightning legs
7896, -- glacier kilt
7897, -- glacier robe
7898, -- lightning robe
7899, -- magma coat
8819, -- magician's robe
8821, -- witchhunter's cloak
8865, -- dark lord's cape
8866, -- serpent coat
8867, -- dragon robe
8868, --
8869, -- greenwood coat
8870, -- spirit cloak
8871, -- focus cape
8872, -- belted cape
8877, -- lavos armor
8878, -- crystalline armor
8879, -- voltage armor
8880, -- swamplair armor
8881, -- fireborn giant armor
8882, -- earthborn titan armor
8883, -- windborn colossus armor
8884, -- oceanborn leviathan armor
8885, -- divine plate
8886, -- molten plate
8887, -- frozen plate
8888, -- master archer's armor
8889, -- skullcracker armor
8890, -- robe of the underworld
8891, -- paladin armor
8892, -- ethno coat
8906, -- fiery rainbow shield
8907, -- icy rainbow shield
8908, -- sparking rainbow shield
8909, -- terran rainbow shield
8924, -- hellforged axe
8925, -- solar axe
8927, -- dark trinity mace
8928, -- obsidian truncheon
8929, -- stomper
8930, -- emerald sword
8932, -- calamity
9776, -- yalahari armor
9777, -- yalahari leg piece
9932, -- firewalker boots
9933 -- firewalker boots
} -- items que serão acusados no script, caso encontrados em algum tile
-- end configs
function checkStackPos(parameters)
cid = parameters.cid
position = parameters.position
stackpos = position.stackpos
loopFinished = true
if (stackpos <= finishPosition.stackpos) then
loopFinished = false
item = getThingfromPos(position)
itemid = item.itemid
if (itemid == 0) then
itemname = "Nothing"
else
itemname = getItemNameById(itemid)
end
doPlayerSendTextMessage(cid,20,"Position: (X: "..position.x..", Y: "..position.y..", Z: "..position.z..") Stackpos: "..position.stackpos..", Item: "..itemname.."")
if (isInArray(editedItems, itemid) == TRUE and itemid > 0) then
doPlayerSendTextMessage(cid,20,"AN EDITED ITEM FOUND!!!")
db.executeQuery("INSERT INTO `mapitems_logs` VALUES("..itemid..",'"..itemname.."',"..position.x..","..position.y..","..position.z..","..position.stackpos..")")
end
position.stackpos = position.stackpos + 1
else
position.stackpos = startPosition.stackpos
end
if (loopFinished == false) then
stackpos_parameters = {
cid = cid,
position = position
}
addEvent(checkStackPos,stackpos_delay,stackpos_parameters)
else
if (currentlyPos.y < finishPosition.y) then
currentlyPos.y = currentlyPos.y + 1
else
currentlyPos.y = startPosition.y
currentlyPos.x = currentlyPos.x + 1
end
if (currentlyPos.x > finishPosition.x) then
currentlyPos.z = currentlyPos.z + 1
currentlyPos.x = startPosition.x
currentlyPos.y = startPosition.y
end
end
end
function checkTile(parameters)
cid = parameters.cid
currentlyPos = parameters.position
loopFinished = true
if (currentlyPos.z <= finishPosition.z) then
loopFinished = false
doSendMagicEffect(currentlyPos, 6)
stackpos_parameters = {
cid = cid,
position = currentlyPos
}
addEvent(checkStackPos,0,stackpos_parameters)
doPlayerSendTextMessage(cid,20,"Checking Position (X: "..currentlyPos.x..", Y: "..currentlyPos.y..", Z: "..currentlyPos.z..")")
end
if (loopFinished == false) then
parameters = {
cid = cid,
position = currentlyPos
}
addEvent(checkTile,0,parameters)
else
doPlayerSendTextMessage(cid,20,"Log complete! Look at the table `mapitems_logs` created on your database.")
end
end
function onSay(cid, words, param)
if (getPlayerGroupId(cid) >= GROUP_ALLOWED) then
currentlyPos = {x=startPosition.x,y=startPosition.y,z=startPosition.z,stackpos=startPosition.st
ackpos}
parameters = {
cid = cid,
position = currentlyPos
}
db.executeQuery("DROP TABLE IF EXISTS `mapitems_logs`")
db.executeQuery("CREATE TABLE `mapitems_logs` (`itemid` INT( 15 ) NOT NULL ,`itemname` VARCHAR( 255 ) NOT NULL ,`x` INT( 15 ) NOT NULL ,`y` INT( 15 ) NOT NULL ,`z` INT( 15 ) NOT NULL ,`stackpos` INT( 15 ) NOT NULL )")
addEvent(checkTile,delay,parameters)
else
doPlayerSendTextMessage(cid,20,"Your group ID is lower than needed.")
end
end
Tag XML:
<talkaction words="/checkitems" event="script" value="checkitems.lua"/>
Configure a parte em negrito que se auto explica.
Script testado e feito inteiramente no distro cryingdamson3.
Este script demora a ser executado, dependendo do mapa (5000~10000 sqms²) pode levar até 5 horas... então execute em um servidor sem ninguém online, só você e o mapa, e então fique afk
Para checar o log depois basta entrar na tabela `mapitems_logs` que é criada na database do seu otserver.
É isso, até mais.