Sorry, I'm.......really lazy. :\
This should work, though I can't test it because the server is down.
It requires Presto. It also requires deus pack or my script pack for the "where I am" bit to work... if you can't get either of these, let me know and I'll edit it
// Pack Tracker (standalone)
event::Attach(eventClientMessage, PackMonitor);
function PackMonitor (%cl, %msg) {
%packreceived = Match::String(%msg, "[li] * \"*\"");
if (%packreceived) {
%packzone = Match::Result(0);
%packperson = Match::Result(1);
%packmsg = Match::Result(2);
if (String::FindSubStr(%packmsg, "my pack") != -1) {
remoteEval(2048, fetchData, "zonedesc");
say(0, "#trackpack " @ %packperson);
$LookinForPack = "1";
schedule("$LookinForPack = \"\";", 3);
} // end if
} // end if
%nopack = Match::String(%msg, "* doesn't have any dropped backpacks.");
if (%nopack && $LookinForPack == "1") {
%nopackperson = Match::Result(0);
say(0, "#tell " @ %nopackperson @ ", Sorry, but someone must have picked up your pack. It is gone.");
$LookinForPack = "";
} // end if
%gotpack = Match::String(%msg, "*'s nearest backpack is * of here, * meters away.");
if (%gotpack && $LookinForPack == "1") {
%gotpackperson = Match::Result(0);
%direction = Match::Result(1);
%distance = Match::Result(2);
%town = $RPGdata[zonedesc];
say(0, "#tell " @ %gotpackperson @ ", I am tracking one of your packs! It is " @ %distance @ " meters " @ %direction @ " of where I am (" @ %town @ "). Good luck.");
$LookinForPack = "";
} // end if
} // End PackMonitor
// End Pack Tracker