Gamestudio Links
Zorro Links
Newest Posts
Change chart colours
by 7th_zorro. 05/11/24 09:25
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
3 registered members (Konsti, AndrewAMD, 1 invisible), 1,376 guests, and 1 spider.
Key: Admin, Global Mod, Mod
Newest Members
Hanky27, firatv, wandaluciaia, Mega_Rod, EternallyCurious
19051 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Server/Client Probleme #231008
10/11/08 14:03
10/11/08 14:03
Joined: Mar 2008
Posts: 68
Germany, Essen
V
virtualmarctek Offline OP
Junior Member
virtualmarctek  Offline OP
Junior Member
V

Joined: Mar 2008
Posts: 68
Germany, Essen
[DE] Ich habe 2 Probleme bei Server/Client:
1. Wenn ein Spieler den Server verlässt, wird die enity nicht entfernt
2. wenn der 3. Client connected kommt ein Fehler
(Quelltext und Fehlermeldung, siehe unten)

[EN] I have 2 problems with Server/Client:
1. If a Player left the Server, the enity won't be removed
2. If the 3rd Client connected there comes an Error-MEssage
(Sourcecode and Error-Message, see under this text)

Fehlermeldung/Error-Message:
Quote:
---------------------------
2nd World CLIENT...: client.exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x10014a64" verweist auf Speicher in "0xffc44558". Der Vorgang

"written" konnte nicht auf dem Speicher durchgeführt werden.


Klicken Sie auf "OK", um das Programm zu beenden.
Klicken Sie auf "Abbrechen", um das Programm zu debuggen.
---------------------------
OK Abbrechen
---------------------------


Quelltext/Sourcecode:
Code:
// Codegrundgerüst by: cerberi_croman und virtualmarc

#include <acknex.h>
#include <default.c>
#include "status.c"
#include "windows.h"
#include "d3d9.h"


//---------------------------------------------------------------------------------------------||
// some global vars, defines...
//---------------------------------------------------------------------------------------------||
#define force_x skill1
#define force_y skill2
#define force_z skill3
#define force_pan skill4
#define force_tilt skill5
#define MAX_CONNECTIONS 8

VECTOR camVel;
var force[3];
var vecFrom[3];
var vecTo[3];


//---------------------------------------------------------------------------------------------||
// function prototypes
//---------------------------------------------------------------------------------------------||
void playerAct();
void inputs();
void server_called();
void client_called();
void donothing(){wait(1);}


//---------------------------------------------------------------------------------------------||
// 1st Person Kamera Funktion
//---------------------------------------------------------------------------------------------||
void pl_cam()
{
	while(1) {
		camera.pan = player.pan;
		camera.tilt = 0;
		camera.roll = 0;
		camera.x = player.x;
		camera.y = player.y;
		camera.z = player.z + 50;
		wait(1);
	}
}


//---------------------------------------------------------------------------------------------||
// 3rd Person Kamera Funktion
//---------------------------------------------------------------------------------------------||
/*
var dist_planar =  300; // Distanz vom Spieler
var cam_angle = 0;

void pl_cam()
{
	while(1) {
		camera = player.x - cos (cam_angle) * dist_planar; 
    	camera.y = player.y - sin (cam_angle) * dist_planar; 
    	camera.z = player.z; 
    	camera = cam_angle; 
    	camera.roll = 0; 
    	camera.tilt = 0;
	}
}
*/


//---------------------------------------------------------------------------------------------||
// main function
//---------------------------------------------------------------------------------------------||
int main()
{
	video_mode = 8;
	video_depth = 32;
	video_screen = 2;
	fps_max = 60; // lock fps at 60 for all players
	fps_lock = ON;
	dplay_smooth = 0; // dplay_smooth is causing too much overshoot and jerks
	
	on_server = server_called; // on server event, call server_called()
   on_esc = donothing;
   
   wait(-.3);
   if(connection == 3){
   	people_connected = 1;
   	str_cpy(messages_str, "Connecting as a HOST...");
   	wait(-3);
   	reset(messages_txt, VISIBLE);
   	set(connected, VISIBLE);
   	set(status, VISIBLE);
   	video_window(NULL,NULL,16,"HOST...");
   }
   if(connection == 2){
   	str_cpy(messages_str, "Connecting as a CLIENT...");
   	wait(-3);
   	reset(messages_txt, VISIBLE);
   	set(connected, VISIBLE);
   	set(status, VISIBLE);
   	video_window(NULL,NULL,16,"2nd World CLIENT...");
	}

   level_load("2ndworld.wmb");
   wait(-.3);
   player = ent_create("aim.mdl", vector(0,0,0), playerAct);
   
   wait(-.3);
   
   inputs();
   
    pl_cam();
   while(1)
	{
		again:
		// constantly checks if server is still online
		if(dplay_bps == 0 && dplay_latency == 0 && connection == 2)	{
			if (MessageBox(NULL, "Server is offline and the game will shutdown.", "Error", MB_OK | MB_ICONSTOP) == IDOK){
				sys_exit(NULL);
			}
		}
		if(key_esc){
			while(key_esc){wait(1);}
			if(MessageBox(NULL, "Do you really want to quit?", "Quit?", MB_YESNO | MB_ICONQUESTION) == IDYES){sys_exit(NULL);ent_remove(player);}
				else{wait(1);goto again;}
		}
		wait(1);
	}
	if (event_type == EVENT_LEAVE)
	{
		people_connected -= 1; // one less person connected to server
		send_var(people_connected); // send number of people connected
	}
}


//---------------------------------------------------------------------------------------------||
// function for handling inputs
//---------------------------------------------------------------------------------------------||
void inputs()
{
	while(1){
		player.force_x = (key_w - key_s) * time_step * 7;
		player.force_y = (key_a - key_d) * time_step * 7;
		player.force_pan -= mouse_force.x * 2 * time_step;
		
		if(connection == 2){
			send_skill(player.force_x, SEND_VEC);
			send_skill(player.force_pan, 0);
		}
		
		wait(1);
	}
}


//---------------------------------------------------------------------------------------------||
// move player function
//---------------------------------------------------------------------------------------------||
void movePl()
{
	while(1){
		my.pan = my.force_pan;
		my.tilt = my.force_tilt;
	
		force[0] = my.force_x * 15 * time_step;
		force[1] = my.force_y * 10 * time_step;
		force[2] = 0;
		
		move_mode = GLIDE|IGNORE_PASSABLE|IGNORE_PASSENTS|IGNORE_YOU;
		c_move(my, force, nullvector,move_mode);
		
		if (my.force_x || my.force_y || my.force_z)
		{
			trace_mode = IGNORE_SPRITES|IGNORE_PASSENTS|IGNORE_PASSABLE|IGNORE_MODELS|USE_BOX;
			vec_set(vecFrom,my.x);
			vec_set(vecTo,my.x);
			vecTo[2] -= 400;
			result = c_trace(vecFrom,vecTo,trace_mode);
			my.z = target.z + ((my.max_z - my.min_z)/2);//Set to the floor
		}
		
		wait(1);
	}
}


//---------------------------------------------------------------------------------------------||
// player action
//---------------------------------------------------------------------------------------------||
action playerAct()
{
	my.emask |= ENABLE_DISCONNECT;
	my.smask |= NOSEND_FRAME;
	
	c_setminmax(my);
	
	wait(-.3);
	ent_sendnow(my);
	wait(-.3);

	set(me, SHADOW);
	movePl();
}


//---------------------------------------------------------------------------------------------||
// function Server_Called(): server was called
//---------------------------------------------------------------------------------------------||
void server_called()
{
	if ((event_type == EVENT_JOIN) && (people_connected < MAX_CONNECTIONS))
	{
		people_connected += 1; // another person connected
		send_var(people_connected); // send number of people connected
	}
	if (event_type == EVENT_LEAVE)
	{
		people_connected -= 1; // one less person connected to server
		send_var(people_connected); // send number of people connected
	}
	if (event_type == EVENT_DISCONNECT)
	{
		ent_remove(player); // remove ent of player that quit
	}
}


//--------------------------------------------------------------------
// player events
//--------------------------------------------------------------------
void player_events()
{
	if (event_type == EVENT_DISCONNECT)
	{
		ent_remove(player); // remove ent of player that quit
	}
}



mfg, Marc V.
Re: Server/Client Probleme [Re: virtualmarctek] #231052
10/11/08 18:33
10/11/08 18:33
Joined: Aug 2008
Posts: 55
A
asd Offline
Junior Member
asd  Offline
Junior Member
A

Joined: Aug 2008
Posts: 55
versuch mal, beim server event unter leave ent_remove(ENTITY* ent); oder so... bin mir nich sicher ob die funktion stimmt!

Re: Server/Client Probleme [Re: virtualmarctek] #231079
10/11/08 20:11
10/11/08 20:11
Joined: Aug 2003
Posts: 7,439
Red Dwarf
Michael_Schwarz Offline
Senior Expert
Michael_Schwarz  Offline
Senior Expert

Joined: Aug 2003
Posts: 7,439
Red Dwarf
Code:
action playerAct()
{
	my.emask |= ENABLE_DISCONNECT;
	my.smask |= NOSEND_FRAME;
	my.event = player_events; // << !
	
	c_setminmax(my);
	
	wait(-.3);
	ent_sendnow(my);
	wait(-.3);

	set(me, SHADOW);
	movePl();
}


Code:
void player_events()
{
	if (event_type == EVENT_DISCONNECT)
	{
		ent_remove(player); // can sty this way, but better with the "ME" pointer
	}
}



"Sometimes JCL reminds me of Notch, but more competent" ~ Kiyaku
Re: Server/Client Probleme [Re: Michael_Schwarz] #231595
10/15/08 15:58
10/15/08 15:58
Joined: Mar 2008
Posts: 68
Germany, Essen
V
virtualmarctek Offline OP
Junior Member
virtualmarctek  Offline OP
Junior Member
V

Joined: Mar 2008
Posts: 68
Germany, Essen
ok i will try

Edit1: mhh ... on compiling the following error came (not the first time):

Quote:
Compiling CLIENT.C - [Esc] to abort..
Error in 'D:\Anwendungen\Programmieren\3DGameStudioA7\include\avars.h' line 634: 'ENGINE_CONTACT' undeclared identifier

< ENGINE_CONTACT hit;
>


Edit2: No It doesn't work

Last edited by virtualmarctek; 10/15/08 16:21.

mfg, Marc V.

Moderated by  HeelX, Spirit 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1