for my game (bomberman clon) I solved the problem by creating the entities local with ent_create.

this runs on the player who creates a bomb:
pentity.skill91=bomb_pos.x; // skill91-93 are tracked
pentity.skill92=bomb_pos.y;
pentity.skill93=bomb_pos.z;
pentity.flag1=on; // also tracked.
temp_ent = ent_create("bombe.mdl", bomb_pos,null); // creates the entity local
temp_ent.passable=on; and set in on the player clientside passable
while(key_a==1){wait(1);} // wait until a-button is off
pentity.flag1=off; // send to all player that flag1 is really off. else populace wont send the a new flag1=on.


and here is the code for all other players:

while(1)
{

if(my.flag1)
{
temp.x=my.skill91; // get the position. why? it could be that the players position is on the "other client side" a little bit "slower". so the bomb would be not at the same position as it was created on the player-side... god, my english is terrible today.. and always
temp.y=my.skill92;
temp.z=my.skill93;
ent_create("bombe.mdl", temp,null); // now create the bomb
my.flag1=off; // and flagged off
}
wait(1);
}

this works for small games but not for rpgs or anything else.

oh, and we REALLY need a command to check the ping of a player.
so we can kick a slow player automatically.