Traffic (GER)

Posted By: 3D_Train_Driver

Traffic (GER) - 12/18/09 21:03

Hallo!
Ich hab mal kurz ne Traffic-Frage.
Was hab ich wohl verkehrt gemacht?
Habe eine kleine MP-Anwendung, einmal mit -sv -cl und einmal mit -cl gestartet.
Funktioniert auch alles super, wenn da nicht so unheimlich viel Traffic auf dem Server wäre und ich weiß nicht wo er herkommt.
Spielfigur kann laufen, rennen und sich drehen.

dplay_bps sagt beim Clienten was zwischen 8 und 12. (halt ich für normal).
Sobald ich auf dem Clienten loslaufe, steigt dplay_bps auf dem Server auf 3000 - 4000 an.

Da haut definitiv was nicht hin.
Wäre für ein paar Tips dankbar.

MfG
Posted By: Germanunkol

Re: Traffic (GER) - 12/18/09 21:42

ich denke dafür brauchen wir code.
So wie sich das anhört schickst du jeden frame die position. Das darfst du nicht machen. du darfst sie nur alle 0,25 sekunden (oder noch weniger, je nach spiel-typ) schicken, und musst zwischen den updates auf den anderen clienten interpolieren bzw vorrausberechnen, wo es wahrscheinlich ist, dass die person hinläuft. (also in die gleiche richtung weiter, oder gleich weiterdrehen etc).
Posted By: 3D_Train_Driver

Re: Traffic (GER) - 12/19/09 10:02

Hi!
Alles klar. Ich vermute, wir kriegen das auch ohne code hin.
Habe dplay_entrate mal auf 8 gesetzt. Also alle halbe Sekunde.
Animation läuft flüssig, nur dass die Entities auf dem clienten jetzt alle halbe sekunde weiter"hüpfen". dplay_bps liegt auf dem Server jetzt bei 36 oder so. Das haut auf jeden Fall hin und entspricht dem, was ich mir in etwa vorgestellt habe.
Posted By: 3D_Train_Driver

Re: Traffic (GER) - 12/21/09 18:13

Jemand ne Lösung parat? Mir fehlt dazu etwas Erklärung im Manual, oder ich verstehe es einfach nicht. Die Animationszustände werden gesandt und die Spielfiguren animieren alle auf allen Klienten richtig.
Nur mit dem Bewegen will es einfach nicht klappen. Die Variable player.force_x wird versandt und die Entities bewegen sich nur auf dem Server. Auf den Klienten siehts dank dplay_entrate=8; wie eine Diashow aus.
Code:
function move_me(){
...
...
...
my.turnspeed=15;
my.speed=8;
while(1){
my.pan += my.force_x * my.turnspeed * time;
		my.dist_x = my.force_y * my.speed * time;
		my.dist_y = 0;
		my.dist_z = 0;
		c_move(my,my.dist_x,nullvector,glide + ignore_passable);
wait(1);}
}


function spieler_erstellen(){
player=ent_create(name_spielermodell,temp,move_me);
}

function keyboardinput(){
	while (1){
		if (player){
			force_x_old = player.force_x; //store old force values
			force_y_old = player.force_y;
			player.force_x = 0;
			player.force_y = 0;
				if ((key_w == 1)||(key_cuu == 1)){player.force_y = 1;}
				if ((key_a == 1)||(key_cul == 1)){player.force_x = 1;}
				if ((key_d == 1)||(key_cur == 1)){player.force_x = -1;}
				if ((key_s == 1)||(key_cud == 1)){player.force_y = -1;}
				if (key_shift == 1){player.force_y *= 1.5;player.force_x *= 1.5;}
				if(player.force_x != force_x_old || player.force_y != force_y_old){
						if(connection==2||connection==3){
							send_skill(player.force_x,SEND_VEC);
							}
						
					}
				}
	wait(1);
	}
}


Dann wohl doch mit Code. laugh

MfG
Posted By: SchokoKeks

Re: Traffic (GER) - 12/22/09 01:51

das sieht für mich nach mehreren problemen aus:

1. move_me() wird durch das ent_create nur auf dem server ausgeführt. du müsstest es mit proc_local(...) noch auf den clients starten.

2. keyboardinput läuft zwar (vermutlich) auf den clienten und auf dem server, aber der input wird durch die if-abfrage mit connection == 2 oder 3 nur gesendet, wenn es auf dem sever läuft. das könnte natürlich auch absicht sein.
füge mal bei dem send_skill(..) noch SEND_ALL zu SEND_VEC hinzu,also:
Code:
send_skill(player.force_x,SEND_VEC | SEND_ALL);


dannach sollte schonmal der spieler vom server bei allen richtig laufen.

was die animationen angeht, die sehen zwar wohl momentan korrekt aus, aber früher oder später wirst du um traffic zu sparen NOSEND_FRAME für die entitys aktiviere müssen und die animationen auch lokal handhaben müssen.

Ich weiß nicht ob das bei dir überhaupt ein problem ist, da reicht der code nicht aus, aber trotzdem:
Was die steuerung der entitys der clienten angeht, so musst du deren force erst mit SEND_VEC zum server senden, der wiederum dann diese mit SEND_VEC | SEND_ALL zu den anderen clienten weitersendet, natürlich solltest du sie nur senden wenn sich die werte auch verändert haben.

wenn du noch fragen hast, einfach fragen.
-SchokoKeks
Posted By: 3D_Train_Driver

Re: Traffic (GER) - 12/22/09 16:18

OK.
Das mit proc_local hatte ich in dem code beispiel übersprungen.
Ich habe natürlich eine lokale playerfunktion. die kümmert sich derzeit nur um die animation.
Posted By: SchokoKeks

Re: Traffic (GER) - 12/22/09 19:44

hat es denn geholfen ein SEND_ALL hinzuzufügen?
Posted By: 3D_Train_Driver

Re: Traffic (GER) - 01/03/10 22:57

Hi Schokokeks! Ein gesundes, neues Jahr 2010!
Nein, es hat nichts gebracht mit dem SEND_ALL.
Ich habe es zumindest hinbekommen, dass der Client selbst sich auf dem Clienten-PC bewegen kann. Nun "hüpfen" aber alle anderen Clienten alle halbe Sekunde weiter (dplay_entrate = 8;).
Hm....
Hatte eine Scriptvorlage genutzt. Doch dort ist dplay_entrate=0;.
Daher werden alle Clienten immerzu aktualisiert.

Kann doch jetzt nicht so schwer sein, denk ich mal.

Grüße
Posted By: Tobias

Re: Traffic (GER) - 01/10/10 16:43

Ich weiss nicht wie weit du schon bist, aber warum fängst du nicht einfach mit dem Tutorial an? Dann lernst du zumindest die Grundlagen.

Player flüssig bewegen mit wenig Traffic sollte doch wohl kein Problem sein. Schwieriger wirds erst bei Kämpfen und anderen Feinheiten.
Posted By: 3D_Train_Driver

Re: Traffic (GER) - 01/24/10 20:32

Na, wenn es kein Problem ist, dann kann es mir ja sicher ein jeder erklären. Mehrere Projekte basieren bereits auf den mir bekannten Tutorials. Nur leider kommt in keinem mir bekannten Tutorial drin vor, dass man durch setzen von dplay_entrate=4 oder 8 oder eben größer als 1 eine Unmenge an Traffic einspart.
Mit dplay_entrate=1 haut ja auch alles supi hin. Nur nützen mir 7000 bps für 3 Spieler sehr wenig. Das Problem liegt eher darin, dass scheinbar trotz dplay_localfunction=2; und proc_local... offensichtlich immer nur die Figur des Klienten sich richtig verhält. Alle Figuren, die nicht zum Klienten gehören, werden von der Engine nur "geupdatet".
Noch Vorschläge?
Posted By: Tobias

Re: Traffic (GER) - 01/30/10 18:53

Dann sag doch erstmal was genau du vom Multiplayer Tutorial nicht verstanden hast. Dort ist ja schon alles ausführlich erklärt. Wofür brauchst du noch proc_local und wieso hast du 7000 bps, wenn das Tutorial nur 100 bps für 3 Spieler braucht?
Posted By: 3D_Train_Driver

Re: Traffic (GER) - 01/30/10 23:04

OK.
Also. Ich habe auch noch mal im Online Tutorial nachgesehen. Dort ist es mit dplay_entrate=4; erklärt. Ändert aber trotzdem nichts.
Meine Spielerfiguren laufen auf dem Server super herum.
Und die Klienten selbst laufen auf Ihren eigenen PCs auch gut herum. Nur irgendwie führen die anderen Figuren alle die lokale Bewegungsfunktion offensichtlich nicht aus. Denn die werden nur alle 0,25s geupdatet.
Habe dplay_localfunction=2; gesetzt. geht nicht.
Habe es mit proc_local versucht. geht auch nicht.
Habe das Tutorial eigentlich komplett abgeschrieben. geht trotzdem nicht.

Ich weise aber deutlich darauf hin, dass ich "nur" A6 Pro habe!

Danke, Tobias
Posted By: Tobias

Re: Traffic (GER) - 01/31/10 14:48

Ah, das erklärt es, denn das Tutorial funktioniert nur mit A7!

Niedriger Traffic geht wohl auch mit A6, aber anders. In A7 ist es besser. Mit A6 habe ich auch nie ein vernünftiges MP hingekriegt. Ich glaube die im Tutorial beschriebene Methode mit dem Nachsynchronisieren wird nur von A7 unterstützt.
Posted By: 3D_Train_Driver

Re: Traffic (GER) - 01/31/10 15:32

Aha.
Und nun?
Hab ich jetzt wohl Pech gehabt?

Es muß ja einen Anreiz geben A7 zu kaufen. :-)
Posted By: Dark_samurai

Re: Traffic (GER) - 01/31/10 16:00

Du kannst Plugins benutzen. ANet z.B. sollte auch mit A6 funktionieren.
Posted By: Widi

Re: Traffic (GER) - 01/31/10 17:44

ANet, zu empfehlen...
© 2024 lite-C Forums