ENGLISH BELOW ---------------------------------------------------
HEY !!
Ich bin gerade dabei, mein derzeitigen Single-Player Code in ein Multi-Player Code zu konvertieren.
Zur Hilfe hab ich mir dazu ein neues Projekt angelegt, indem ich die Mechanik erst einmal testen bzw. versuchen will zu verstehen, wie der Multiplayer mit der Engine funktioniert.
Momentan hab ich das System so verstanden, dass auf jedem Rechner eine Instance mit dem selben Quellcode läuft.
Soweit so gut. Mit den AUM's 76/77 bin ich auch schon gut voran gekommen und die Entitys laufen wie sie sollen.
Nur die Kamera will nicht so richtig. Hier der Code aus dem Hilfs-Projekt:
////////////////////////////////////////////////////////////////////////
// Multiplayer Test Project
////////////////////////////////////////////////////////////////////////
#include <acknex.h>
#include <default.c>
////////////////////////////////////////////////////////////////////////
FONT* font_arial = "Arial#20b";
////////////////////////////////////////////////////////////////////////
STRING* str_Message1 = "#30";
////////////////////////////////////////////////////////////////////////
VECTOR* vec_ServerMove = {x=0;y=0;z=0;}
////////////////////////////////////////////////////////////////////////
ENTITY* ent_Camera = 0;
////////////////////////////////////////////////////////////////////////
TEXT* t_DEBUG =
{
pos_x = 10;
pos_y = 10;
font = font_arial;
string = str_Message1;
flags = VISIBLE;
}
////////////////////////////////////////////////////////////////////////
function fROOT_Camera()
{
if(ent_Camera != 0)
{
while(1)
{
camera.x = (ent_Camera.x - 400);
camera.y = ent_Camera.y;
camera.z = (ent_Camera.z + 100);
wait(1);
}
}
}
////////////////////////////////////////////////////////////////////////
function fROOT_Player()
{
while(1)
{
vec_ServerMove.y -= my.skill10;
vec_ServerMove.x += my.skill11;
vec_ServerMove.z += my.skill12;
c_move(my,vec_ServerMove,nullvector,IGNORE_ME | IGNORE_MODELS);
vec_set(vec_ServerMove,nullvector);
ent_sendnow(my);
fROOT_Camera();
wait(1);
}
}
////////////////////////////////////////////////////////////////////////
function fROOT_CreatePlayer()
{
switch(connection)
{
case 2: // Client
{
my = ent_create("player_0.mdl",vector(0,0,150),fROOT_Player);
wait(1);
ent_Camera = my;
while(1)
{
my.skill10 = key_force.x * time_step * 5;
my.skill11 = key_force.y * time_step * 5;
my.skill12 = 0;
send_skill(my.skill10,SEND_VEC);
wait(1);
}
break;
}
default: // Server-Client/Error
{
my = ent_create("player_0.mdl",vector(0,0,150),fROOT_Player);
wait(1);
ent_Camera = my;
while(1)
{
my.skill10 = key_force.x * time_step * 5;
my.skill11 = key_force.y * time_step * 5;
my.skill12 = 0;
wait(1);
}
break;
}
}
}
////////////////////////////////////////////////////////////////////////
function main()
{
fps_max = 60;
level_load ("level_0.wmb");
switch(connection)
{
case 2: // Client
{
str_cpy((t_DEBUG.pstring)[0],"Client");
break;
}
default: // Server-Client/Error
{
str_cpy((t_DEBUG.pstring)[0],"Server-Client/Error");
break;
}
}
fROOT_CreatePlayer();
}
////////////////////////////////////////////////////////////////////////
// E O F
////////////////////////////////////////////////////////////////////////
Ich vermute mal, es liegt an dem Pointer (ent_Camera).
Ohne die Abfrage, ob der Pointer ungleich NULL ist, stürtzt das Programm, im Client-Modus, ab.
Der Server-Modus hingegen funktioniert.
Jetzt zu meiner Logik:
Wenn man also annimmt, das jedes laufende Programm, also jeder laufende Client, den selben Code, wie der Server, besitzt, müssten doch auch jedesmal die Pointer neu erzeugt werden. Somit hat jeder Client, einen eigenen ent_Camera Pointer, den er auch kennen und benutzen sollte.
Tjo, auf dem Client klappts aber nicht.
Woran liegts?
---------------------------------------------------------------
I try to convert my single-player code to an multi-player code.
I've already read the AUM 76 n 77, so it works fine with the entity movement but, the point is now, I don't get it with the handling of the pointers in a multi-player game.
In fact, the function fROOT_Camera doesn't work, if I start the client-mode.
I think the matter in this case is the pointer ent_Camera.
What's wrong?