client_id and dplay_id work fine, I've used them many times without a problem. Check out my following test code:

Code:
///////////////////////////////
#include <acknex.h>
#include <default.c>
///////////////////////////////

void object()
{
	while(my.client_id < 0) wait(1);
	while(1)
	{
		VECTOR temp,col;
		if(dplay_id == my.client_id) vec_set(col,COLOR_GREEN);
		else vec_set(col,COLOR_RED);
		vec_set(temp,my.x);
		vec_to_screen(temp,camera);
		draw_text(str_for_num(NULL,my.client_id),temp.x,temp.y,col);
		wait(1);
	}
}


void main()
{
	fps_max = 60;
	dplay_timeout = 80;
	dplay_localfunction = 2;
	
	while(!key_1 && !key_2) wait(1);
	if(key_1) session_open("mplayer");
	else session_connect("mplayer",NULL);
	
	while(dplay_status < 2) wait(1);
	
	level_load(NULL);
	
	while(dplay_status < 6) wait(1);
	
	if(connection == 2) ent_create(CUBE_MDL,vector(100,30,0),object);
	else ent_create(SPHERE_MDL,vector(100,-30,0),object);
	
	while(1)
	{
		draw_text(str_for_num(NULL,dplay_id),20,20,COLOR_WHITE);
		wait(1);
	}
}



"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends