(GER) Hosting Game????

Posted By: Espér

(GER) Hosting Game???? - 12/19/09 18:47

Hallo.

Ich hab en kleines problem mit dme hosten eines Spiels. Seit nun 3 Stunden les ich mir hier: MP Anleitung, den letzten Abschnitt immer und immer wieder durch...

Und ich komm nicht dahinter was des heißen soll.. bzw.. was ich eigentlich tun muss...
Zumal es diesen letzten Abschnitt nicht auf Deutsch gibt..


Ich habe 1 kleinen code nach dieser Anleitung geschrieben. Und will den mal online mit nem freund testen...
Ich hab aber kein plan von dem Serverzeugs...
Ich hab einen Serverpart bei All-Inkl.com


UND,
Gibt es einen weg "-sv" und "-cl" zu setzen, ohne das der Spieler "Ausführen"/die kommandozeile nutzen muss???


Kann mir da wer helfen pls ^^?
Posted By: Progger

Re: (GER) Hosting Game???? - 12/19/09 19:06

Schau mal hier
http://www.youtube.com/watch?v=6Utda0wwcH8

Vielleicht hilft es ja
Der Video beitrag ist nicht von mir !!!!!
Posted By: Espér

Re: (GER) Hosting Game???? - 12/19/09 19:33

LÄUFT JETZT!


scheint so als hätten wir die falsche IP eingetragen.. blöder fehler...
Posted By: Espér

Re: (GER) Hosting Game???? - 12/20/09 14:31

ok.. vergesst was ich gepostet habe..


Ich erstelle eine Patrone, sobald die linke Maustaste gedrückt wurde.
Hier der codepart dazu:
Click to reveal..
Code:
[...]
		vec_for_vertex(my_vertex.x, my, 155);
[...]

if(my.skill5 == 1 && my.skill93 == 0 && my.skill94 != 0)
			{
				bulget[bulnumb] = ent_create("bullet.mdl", my_vertex.x, flybullet);
				set(bulget[bulnumb], PASSABLE);
				vec_set(bulget[bulnumb].pan, my.pan);
				
				bulnumb += 1;
				if(bulnumb > 2900)
				{
					bulnumb = 0;
				}
				debugvar_1 = bulnumb;
				my.skill94 -= 1;
				wait(1);
				my.skill93 = 1;
			}
			else if(my.skill5 == 0 && my.skill93 == 1)
			{
				my.skill93 = 0;
			}

[...]



Das erstellt die Patrone, weißt die richtung des Spielers zu und lässt die aktion abfahren:
Click to reveal.. ("action flybullet()")
Code:
action flybullet()
{
	//my.z += 5;
	wait(1);
	//c_setminmax(my);
	my.lightrange = 10;
	c_move(my, vector(40*time_step, 0,0), NULL, GLIDE | IGNORE_PASSABLE);
	while(1)
	{
		if(you)
		{
			if(you.skill90 == 1 && my.client_id != dplay_id)
			{
				if((you.skill96==0) && (you.skill97>0))
				{
					you.skill97 -= 200;
					break;
				}
			}
			else
			{
				c_move(my, vector(40*time_step, 0,0), NULL, GLIDE | IGNORE_PASSABLE);
				c_scan(my.x, my.pan, vector(360, 0, 10), IGNORE_ME);
			}
		}
		else
		{
			c_move(my, vector(40*time_step, 0,0), NULL, GLIDE | IGNORE_PASSABLE);
			c_scan(my.x, my.pan, vector(360, 0, 20), IGNORE_ME);
		}
		if(my.x > 735 || my.x < -745 || my.y > 115 || my.y < -1385)
		{
			break;
		}
		wait(1);
	}
	my.lightrange = 60;
	ExploA2();
	ExploB2();
	ExploC2();
	ExploD2();
	killflare2();
	ent_remove(my);
}



The problem ist nun folgendes:

Ich kann mich selbst abschießen... o.O"

Wie kann ich das unterbinden.. ich will nur gegner treffen können.
D.h.
Nicht mich. Und niemanden aus dem Team.







Ein weiteres Problem ist auf folgendem Screenshot zu erkennen:

Eigentlich sollte da nur 1 patrone sein...
Starte ich nur den Server.. kommt auch nur 1 patrone.
Sobald aber ein Client dazukommt, fängt das an mit spinnen und erstellt das alles mehrfach...



Hat wer ideen? ^_^
Posted By: Espér

Online Shooting problem - 12/21/09 00:55

For a better understanding.. The last Problems in English:


When i hit the left mouse button, a bullet is created.
Here´s the code:
Click to reveal..
Code:
[...]
		vec_for_vertex(my_vertex.x, my, 155);
[...]

if(my.skill5 == 1 && my.skill93 == 0 && my.skill94 != 0)
			{
				bulget[bulnumb] = ent_create("bullet.mdl", my_vertex.x, flybullet);
				set(bulget[bulnumb], PASSABLE);
				vec_set(bulget[bulnumb].pan, my.pan);
				
				bulnumb += 1;
				if(bulnumb > 2900)
				{
					bulnumb = 0;
				}
				debugvar_1 = bulnumb;
				my.skill94 -= 1;
				wait(1);
				my.skill93 = 1;
			}
			else if(my.skill5 == 0 && my.skill93 == 1)
			{
				my.skill93 = 0;
			}

[...]


This creates the bullet, set´s the fly angle and the action:
Click to reveal.. ("action flybullet()")
Code:
action flybullet()
{
	//my.z += 5;
	wait(1);
	//c_setminmax(my);
	my.lightrange = 10;
	c_move(my, vector(40*time_step, 0,0), NULL, GLIDE | IGNORE_PASSABLE);
	while(1)
	{
		if(you)
		{
			if(you.skill90 == 1 && my.client_id != dplay_id)
			{
				if((you.skill96==0) && (you.skill97>0))
				{
					you.skill97 -= 200;
					break;
				}
			}
			else
			{
				c_move(my, vector(40*time_step, 0,0), NULL, GLIDE | IGNORE_PASSABLE);
				c_scan(my.x, my.pan, vector(360, 0, 10), IGNORE_ME);
			}
		}
		else
		{
			c_move(my, vector(40*time_step, 0,0), NULL, GLIDE | IGNORE_PASSABLE);
			c_scan(my.x, my.pan, vector(360, 0, 20), IGNORE_ME);
		}
		if(my.x > 735 || my.x < -745 || my.y > 115 || my.y < -1385)
		{
			break;
		}
		wait(1);
	}
	my.lightrange = 60;
	ExploA2();
	ExploB2();
	ExploC2();
	ExploD2();
	killflare2();
	ent_remove(my);
}



The problem is now:
I can shot myself into hell. o.O"

How can i say the bullet, not to hit me and my team members?







The second problem is shown on the next screen:

Actually there should only be 1 bullet...
When i just start a servergame - it creates just 1.
But, when a client joines the game, multiple bullets are created all over the screen when i shot.



I hope someone can help me ^.^
Posted By: MrGuest

Re: Online Shooting problem - 12/21/09 01:07

heya, the only way i managed to do it before for no friendly fire (ugly way) was to set the team of each bullet to the same of the person who fired it,

then use IGNORE_YOU if bullet.team == you.team, trace again ignoring you

i asked a while ago about IGNORE_FLAG2 and IGNORE_FLAG3, etc for doing traces but apparantly these are already being used in different things (so much for user customisation)

the multiple bullets i wouldn't be able to tell without looking at some code

hope this helps
Posted By: Espér

Online Shooting problem!!! need help Y_Y - 12/21/09 01:11

ok.. i updated the Script a bit.

here´s the mainscript:
Click to reveal.. ("tankwars.c")
Code:
//=================================================================================================================================
//
//                                       EINBINDEN DER UNTERORDNER UND SCRIPTS
//
//=================================================================================================================================
#include <acknex.h>
#include <default.c>
#include "defines.c"
#include "particles.c"




var debugvar_1;
var debugvar_2;
var debugvar_3;
var playercount = 0;

ENTITY* my_id[3000];
//=================================================================================================================================
//
//                                               FUNKTIONEN
//
//=================================================================================================================================
function on_client_event() // terminate client when server disconnects
{ 
	if (event_type == EVENT_LEAVE) sys_exit("Spiel verlassen!"); 
}

function player_rungame() // reskill2 player when client disconnects
{ 
	if (event_type == EVENT_DISCONNECT) ent_remove(me);
}

//=================================================================================================================================
//
//                                               AKTIONEN
//
//=================================================================================================================================
action flybullet()
{
	set(my, PASSABLE | SHADOW | CAST);
	while(1)
	{
		c_move(my, vector(40*time_step,0,0), NULL, GLIDE | IGNORE_FLAG2 | IGNORE_PASSABLE);
		c_scan(my, my.pan, vector(360,0,20), IGNORE_FLAG2 | IGNORE_PASSABLE | IGNORE_ME);
		if(you)
		{
			if(you.status == 3)
			{
				break;
			}
			else if((you.player_id != my.own_id) && (you.player_team != my.own_team) && (you.status == 2 || you.status == 0))
			{
				you.health -= 50;
				break;
			}
			else if(my.x >= 5000 && my.x <= -5000 && my.y >= 5000 && my.y <= -5000)
			{
				break;
			}
		}
		wait(1);
	}
	ExploA2();
	ExploB2();
	ExploC2();
	ExploD2();
	killflare2();
	ent_remove(my);
}


action spieleraktion()
{
	////////////////////////////////////////////////////// ERSTELLEN DER VIEWS UND LOKALEN OBJEKTE
	VIEW* mycam = view_create(500);
	mycam.size_x = screen_size.x;
	mycam.size_y = screen_size.y;
	mycam.tilt = -90;
	set(mycam, SHOW);
	VIEW* minimap = view_create(1000);
	minimap.pos_x = 10;
	minimap.pos_y = 10;
	minimap.size_x = 250;
	minimap.size_y = 150;
	set(minimap, SHOW);
	reset(camera, SHOW);
	
	PANEL* MM_border = pan_create("", 2000);
	MM_border.pos_x = 6;
	MM_border.pos_y = 6;
	MM_border.bmap = bmap_create("MM_Frame.tga");
	set(MM_border, SHOW);
	
	ENTITY* bulget[3000];
	////////////////////////////////////////////////////// ERSTELLEN DER EVENTS UND FLAGS
	my.event = player_rungame;
	my.emask |= ENABLE_DISCONNECT;
	my.smask |= NOSEND_FRAME; // don't send animation
	set(my, CAST | SHADOW | FAT);
	////////////////////////////////////////////////////// ERSTELLEN DER SKILLS
	//my.skill1 wird vom Mainscript erstellt und gibt die SpielerID an.
	my.health = 1000;
	my.energy = 3000;
	
	////////////////////////////////////////////////////// ERSTELLEN DER LOKALEN DATENTYPEN
	var aniprozent = 0;
	var skill1_old = 0, skill2_old = 0, skill3_old = 0, skill4_old = 0, skill5_old = 0, skill6_old = 0, skill7_old = 0, skill8_old = 0, skill9_old = 0, skill10_old = 0;
	var skill11_old = 0, skill12_old = 0, skill13_old = 0, skill14_old = 0, skill15_old = 0;
	var skill42_old = 0, skill43_old = 0, skill44_old = 0;
	var skill59_old = 0, skill50_old = 0, skill51_old = 0, skill52_old = 0, skill53_old = 0;
	var skill97_old = 0, skill98_old = 0, skill99_old = 0;
	var bulnumb = 0;
	var distance = 0;
	VECTOR* my_vertex = nullvector;
	VECTOR* my_boneang = {x=0; y=0; z=0;}
	ANGLE* my_newboneang;
	////////////////////////////////////////////////////// ERSTELLEN DER KOLLISIONSHÜLLE
	wait(1);
	c_setminmax(my);
	vec_set(my.max_x, vector(my.max_x-12, my.max_y, my.max_z+30));
	vec_set(my.min_x, vector(my.min_x, my.min_y, my.min_z));
	
	////////////////////////////////////////////////////// MAINCODE
	while (1) 
	{
		if (my.client_id == dplay_id)   // player created by this client?
		{
			if (key_w-key_s != my.skill2) { // forward/backward key state changed?
				my.skill2 = key_w-key_s;
				send_skill(my.skill2,0); // send the key state in reliable mode
			}
			if (key_a-key_d != my.skill3) { // rotation key changed?
				my.skill3 = key_a-key_d; 
				send_skill(my.skill3,0); // send rotation state in reliable mode
			}
			if (key_shift != my.skill8) { // running key state changed?
				my.skill8 = key_shift;
				send_skill(my.skill8,0); // send the key state in reliable mode
			}
			if (mouse_right != my.skill6) {
				my.skill6 = mouse_right;
				send_skill(my.skill6,0);
			}
			if (mouse_left != my.skill5) {
				my.skill5 = mouse_left;
				send_skill(my.skill5,0);
			}
			if (key_e != my.button_e) {
				my.button_e = key_e;
				send_skill(my.button_e,0);
			}
			if (key_space != my.button_space) {
				my.button_space = key_space;
				send_skill(my.button_space,0);
			}
			if (key_enter != my.button_enter) {
				my.button_enter = key_enter;
				send_skill(my.button_enter,0);
			}
			if (key_tab != my.button_tab) {
				my.button_tab = key_tab;
				send_skill(my.button_tab,0);
			}
		}

		if (connection & CONNECT_SERVER) // running on the server?
		{
			if (my.skill1 != skill1_old) {
				send_skill(my.skill1,SEND_ALL);
				skill1_old = my.skill1;
			}
			if (my.skill2 != skill2_old) {
				send_skill(my.skill2,SEND_ALL);
				skill2_old = my.skill2;
			}
			if (my.skill3 != skill3_old) {
				send_skill(my.skill3,SEND_ALL);
				skill3_old = my.skill3;
			}
			if (my.skill4 != skill4_old) {
				send_skill(my.skill4,SEND_ALL);
				skill4_old = my.skill4;
			}
			if (my.skill5 != skill5_old) {
				send_skill(my.skill5,SEND_ALL);
				skill5_old = my.skill5;
			}
			if (my.skill5 != skill5_old) {
				send_skill(my.skill5,SEND_ALL);
				skill5_old = my.skill5;
			}
			if (my.skill6 != skill6_old) {
				send_skill(my.skill6,SEND_ALL);
				skill6_old = my.skill6;
			}
			if (my.skill8 != skill8_old) {
				send_skill(my.skill8,SEND_ALL);
				skill8_old = my.skill8;
			}
			if (my.skill10 != skill10_old) {
				send_skill(my.skill10,SEND_ALL);
				skill10_old = my.skill10;
			}
			if (my.skill11 != skill11_old) {
				send_skill(my.skill11,SEND_ALL);
				skill11_old = my.skill11;
			}
			
			if (my.skill42 != skill12_old) {
				send_skill(my.skill12,SEND_ALL);
				skill12_old = my.skill12;
			}
			if (my.skill15 != skill15_old) {
				send_skill(my.skill15,SEND_ALL);
				skill15_old = my.skill15;
			}
			if (my.skill42 != skill42_old) {
				send_skill(my.skill12,SEND_ALL);
				skill12_old = my.skill12;
			}
			if (my.skill43 != skill43_old) {
				send_skill(my.skill13,SEND_ALL);
				skill13_old = my.skill13;
			}
			if (my.skill44 != skill44_old) {
				send_skill(my.skill14,SEND_ALL);
				skill14_old = my.skill14;
			}
			
			if (my.skill50 != skill50_old) {
				send_skill(my.skill50,SEND_ALL);
				skill50_old = my.skill50;
			}
			if (my.skill51 != skill51_old) {
				send_skill(my.skill51,SEND_ALL);
				skill51_old = my.skill51;
			}
			if (my.skill53 != skill53_old) {
				send_skill(my.skill53,SEND_ALL);
				skill53_old = my.skill53;
			}
			
			if (my.skill97 != skill97_old) {
				send_skill(my.skill97,SEND_ALL);
				skill97_old = my.skill97;
			}
			if (my.skill98 != skill98_old) {
				send_skill(my.skill98,SEND_ALL);
				skill98_old = my.skill98;
			}
			if (my.skill99 != skill99_old) {
				send_skill(my.skill99,SEND_ALL);
				skill99_old = my.skill99;
			}
		}
		
		
		if(my.status == 0)
		{
			my.pan += my.skill3*10*time_step;
			distance = my.skill2*(10*(my.skill8+1))*time_step;
			c_move(my, vector(distance,0,0), NULL, GLIDE | IGNORE_SPRITES | IGNORE_PASSABLE);

			if(my.y < -500 && my.y > -1160 && (my.x > 530 || my.x < -530))
			{
				vec_set(mycam.x, vector(my.x, my.y, my.z + 400));
			}
			else
			{
				c_move(my, NULL, vector(0,0,-1), GLIDE | IGNORE_SPRITES | IGNORE_PASSABLE);
				vec_set(mycam.x, vector(my.x, my.y, my.z + 800));
			}
			minimap.tilt = -90;
			vec_set(minimap.x, vector(my.x, my.y, my.z + 1300));
			
			
			if(my.button_e == 1 && my.get_e == 0)
			{
				if(my.get_map == 0)
				{
					set(minimap, SHOW); set(MM_border, SHOW); my.get_map = 1;
				}
				else
				{
					reset(minimap, SHOW); reset(MM_border, SHOW); my.get_map = 0;
				}
				my.get_e = 1;
			}
			else if(my.button_e == 0 && my.get_e == 1)
			{
				my.get_e = 0;
			}
			
			
			if(my.skill5 == 1 && my.get_shot1 == 0)
			{
				if(bulget[bulnumb] != NULL)
				{
					ent_remove(bulget[bulnumb]);
					bulget[bulnumb] = NULL;
				}
				bulget[bulnumb] = ent_create("Bullet.mdl", my.x, flybullet);
				bulget[bulnumb].own_id = my.player_id;
				bulget[bulnumb].own_team = my.player_team;
				bulget[bulnumb].pan = my.pan;
				bulnumb ++;
				if(bulnumb >= 2980){bulnumb = 0;}
				my.get_shot1 = 1;
			}
			else if(my.skill5 == 0 && my.get_shot1 == 1)
			{
				my.get_shot1 = 0;
			}
			
			
			if(my.health <= 1)
			{
				ExploA();
				ExploB();
				ExploC();
				ExploD();
				killflare();
				ent_morph(my, "Spielmodell_killed.mdl");
				my.status = 1;
			}
		}
		else
		{
			if(my.button_space == 1 && my.get_space == 0)
			{
				ent_morph(my, "Spielmodell.mdl");
				my.health = 1000;
				random_seed(0);
				vec_set(my.x, vector(-350+random(700),0,50));
				wait(1);
				my.status = 0;
				my.get_space = 1;
			}
			else if(my.button_enter == 1 && my.get_enter == 0)
			{
				ent_morph(my, "Spielmodell.mdl");
				my.health = 1000;
				random_seed(0);
				vec_set(my.x, vector(-350+random(700),0,50));
				wait(1);
				my.status = 0;
				my.get_enter = 1;
			}
		}
		
		if(my.button_space == 0 && my.get_space == 1){my.get_space = 0;}
		if(my.button_enter == 0 && my.get_enter == 1){my.get_enter = 0;}
		
		wait(1);
	}
}


//=================================================================================================================================
//
//                                               DAS MAINSCRIPT UND SERVERTEST/SENDEN
//
//=================================================================================================================================
function main() 
{
	video_mode = 8;
	if (!connection) { // not started with -cl / -sv -cl?
		if (!session_connect(app_name,"")) // no client found on the localhost?
		session_open(app_name); // start as server
	}
	do { wait(1); }
	while (dplay_status < 2); // wait until the session is opened or joined
	dplay_entrate = 4;  // 16 ticks/4 = 4 updates per second
	dplay_smooth = 0;   // dead reckoning not needed
	dplay_localfunction = 2;

	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Basis
	shadow_stencil = 2;
	shadow_mode |= IGNORE_MODELS;
	
	level_load ("mp_game.wmb");
	vec_set(camera.x, vector(0, 0, 0));
	vec_set(camera.pan, vector (0, -90, 0)); // set a proper camera rotation
	vec_set(sky_color.red, vector (10, 10, 10)); // Sky Color
	mouse_mode = 2;
	mouse_pointer = 1;
	mouse_spot.x = 16;
	mouse_spot.y = 16; 
	mouse_map = bmap_create("cursor.png");
	
	
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	if (connection & CONNECT_SERVER) { // this instance of the game runs on the server
		video_window(0,0,0,"Servertest");
		random_seed(0); // allow random player positions
		my_id[playercount] = ent_create ("Spielmodell.mdl", vector(-350+random(700),0,50), spieleraktion); // create OWN player
		wait(1);
		my_id[playercount].skill1 = playercount;
		playercount += 1;
		send_var_to(NULL,playercount);
	} 
	else 
	{ // otherwise, it runs on a connected client
		video_window(0,0,0,player_name);
		random_seed(0); // allow random player positions
		my_id[playercount] = ent_create ("Spielmodell.mdl", vector(-350+random(700),0,50), spieleraktion); // create other players
		wait(1);
		my_id[playercount].skill1 = playercount;
		playercount += 1;
		send_var_to(NULL,playercount);
	}
	while(1)
	{
		vec_set(mouse_pos.x, mouse_cursor.x);
		wait(1);
	}
}


Click to reveal.. ("defines.c")
Code:
#define player_id    skill1  // The id of this Player
#define own_id       skill99 // The id of this Player
#define player_team  skill97  // The id of this Player        
#define own_team     skill98 // The id of this Player     

#define move         skill2  // movement in X-Direction
#define rotate       skill3  // rotating left/right

#define skinning     skill4  // Wich Model is chosen by the player?
#define shot1        skill5  // shot with primary ammo
#define shot2        skill6  // shot with secondary ammo
#define weapon       skill7  // Wich Weapon is Equiped?

#define button_shift skill8  // is Shift pressed?
#define button_e     skill9  // is E pressed?
#define button_space skill10 // is SPACE pressed?
#define button_enter skill11 // is ENTER pressed?
#define button_tab   skill12 // is TAB pressed?

#define health       skill42 // Health of the Player
#define energy       skill43 // Energy of the Player
#define status       skill44 // 0=alive, 1=Dead, 2=frozen, 3=wall

#define towerrotate  skill15 // The new Turret-tower angle


#define get_e     skill59 // is E pressed SWITCH?
#define get_space skill60 // is SPACE pressed SWITCH?
#define get_enter skill61 // is ENTER pressed SWITCH?
#define get_map   skill62 // is Minimap opened SWITCH?
#define get_shot1 skill63 // is Shit1 pressed SWITCH?



What are the Problem at the moment:
1.) The bullets are hitting.. nothing.... o.O
2.) The code creates multiple bullets at the same time...
3.) client seems to lag strong.
Posted By: Espér

Re: Online Shooting problem!!! need help Y_Y - 12/23/09 23:47

*push* is there really no one who knows what i made wrong?
Posted By: EvilSOB

Re: Online Shooting problem!!! need help Y_Y - 12/24/09 01:02

Have you looked at my last PM?

Bullet hits and multiples fixed...kindof, lag beyond my skills...
Posted By: Espér

Re: Online Shooting problem!!! need help Y_Y - 12/24/09 02:18

ah.. have seen it.. will try it out next week...
Posted By: EvilSOB

Re: Online Shooting problem!!! need help Y_Y - 12/24/09 02:25

no probs... catch ya later. Merry Christmas and all that jazz....
Posted By: Espér

Online Shooting problem!!! need help Y_Y - 01/11/10 18:11

ok..
i was reading AUM 76-79 for the multiplayer Code.. ( needed to completely rewrite the codes)

And.. hey.. it works.. but not every part ^^
I got gravity, movement and shooting.

BUT:
- No respawn (there´s no respawn manual in the AUM...)
- The bullets from the server can hit everything, but the client bullets just hit walls.. but no entities..

i´m working at that problem now for 4 Days.. and i´m nearly at a "i give up!".

Here´s the Project Source: http://daten.rmxpworld.de/TankWars/MP_test.rar


I really hope someone can help me with that 2 problems fast ^^
thx for any help
© 2024 lite-C Forums