1.
Set victim = Random unit
if victim is not a worker then
order every obelisk to use finger of death to the victim
if victim is a worker then do nothing
Imagine that random unit is a worker, then noone will be targeted.
2.
Use boolean comparison and check if the victim is of a unit classification of worker.
3.
Wait 60 seconds -> Wait 60 seconds of game-time
4.
Set WhisperingObelisks = (Units of type Whispering Obelisk)
That leaks... just a stupid native function.
Instead pick every unit and use a matching condition to filter the obelisks.
5.
Do nothing -> -------- do nothing --------
Do nothing is actually doing something. And that something is actually nothing.
Anyway it is eating your performance (a little) and has no effect so should never be used.
You can leave it empty or make a comment if you want to display some clarification.
6.
AllPlayers -> (All Players)
AllPlayers does not have to be in a variable because it is only used once and does not have to be destroyed afterwards (Player groups (force) must be destroyed if it is something else than (All Players))
7.
Set the victim to a random unit from units owned by player with a condition that is mentioned in point 2.
After that, the obelisks will only target a unit that is owned by the last player in the player group.
Also they will target allies too.
If player 1 has a unit and player 2 has a unit, the unit of player 1 is never a victim.
I don't know what the trigger is supposed to do but one thing is sure... it is not doing it.