@kiyaku
typischer denkfehler bei multiplayer spielen
du musst dir IMMER vor augen halten, das alle clienten die exakt selbe aktion ausführen.
du machst server auf, spieler wird erstellt.
er hat die aktion actPlayer.
ein client connectet, erstmal wird nun die entity des servers nacherstellt, diese hat nun die action actPlayer.
der client erstellt eine eigene entity, und diese hat auch actplayer.
beide spielerfiguren reagieren folglich immer auf eine tasteneingabe, da ja beide auf eine cursor down anweisung warten. beide haben ja die selbe aktion.
wie löst man das nun?
die main function ist 100%ig lokal. alles was du da vorbereitest ist sozusagen für den bestimmten clienten.

also folgendes in die main():
player = GSTNet_ent_create("warlock.mdl", nullvector, "actPlayer");

es wird eine entity erstellt, mit dem pointer player. der player pointer kennt aber nur dein spiel. folglich ist player dann IMMER deine figur.
nun kannst du in den spieler aktionen herausbekommen, ob diese entity überhaupt deine figur ist.

action actPlayer
{
wait(1);

GSTNet_TrackEntity(my, GSTNet_TrackPos);
if(player==me)
{
while(1)
{
if(key_cuu)
{
player.z += 0.1; //sicherheitshalber "player" angeben.
}
wait(1);
}
}
else
{
// hier kommt alles hin was die anderen clienten machen. z.b. eine funktion welche lokal nun diese entity animiert etc.
}
}

dann müsste es funktionieren