Could it be because it's constantly checking for the item and not stopping so it spawns infinite NPCs and crashes the zone? You could do this, maybe? Just threw it together really fast.
Code:
sub EVENT_SAY
{
$check = 0;
if ($text =~/Hail/i)
{
if(plugin::check_hasitem($client, 1445) && $check == 0)
{
quest::say("The King awaits.");
quest::spawn2(999296,0,0,-118,2439,-262,128);
$check = 1;
}
else
{
}
}
}