Also, an update for anyone wanting to perform this sort of process, I needed to add a line that undefined the hate_target variable so that it would get a new random hate target next time the timer rolled around. Before I did this, it would keep the original hate target indefinately.
Code:
sub EVENT_TIMER{
if ($timer == 1){
my $hate_target = $npc->GetHateRandom();
my $hate_name = $hate_target->GetName();
my $hate_id = $hate_target->GetID();
quest::shout("My hate target is $hate_name");
$npc->CastSpell(5051, $hate_id);
undef $hate_target;
}
}