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
1 registered members (M_D), 1,430 guests, and 3 spiders.
Key: Admin, Global Mod, Mod
Newest Members
firatv, wandaluciaia, Mega_Rod, EternallyCurious, howardR
19050 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Problem mit Entities und dem Besitzer #220846
08/10/08 09:16
08/10/08 09:16
Joined: Aug 2008
Posts: 18
Germany
D
Der_Kekser Offline OP
Newbie
Der_Kekser  Offline OP
Newbie
D

Joined: Aug 2008
Posts: 18
Germany
Hallo,
ich möchte ein Strategiespiel wie Age of Empires erstellen. Ich habe aber nun das Problemm, dass egal wer das Gebäude erstellt hat es immer dem Server-Client gehört. Dadurch kan der Server-Client die gebäude benutzen aber die Clienten, die die Gebäude erstellt haben nicht.

Hier der Code:
Code:
var video_mode = 7;// 800x600 pixels
var video_depth = 32; // 32 bit mode
var shadow_stencil = on;
var startposition[3] = 0, 50,0;
var startposition2[3] = 0, -50,0;
var clicked_destroy = 0;
var breaking = 0;

string map_wmb = <testmap.wmb>;

bmap backmenue_tga = <backmenue.tga>;
bmap destroy_tga = <buttondestroy.tga>;

panel backmenue_pan 
{
	bmap = backmenue_tga;
	pos_x = 0;
	pos_y = 0;
	layer = 10;
	flags = overlay, refresh;
}

panel destroy_button_pan
{
	bmap = destroy_tga;
	pos_x = 0;
	pos_y = 0;
	layer = 11;
	flags = overlay, refresh;
	on_click = click_destroy();
}

function click_destroy(){
	clicked_destroy = 1;
	wait(1);
	clicked_destroy = 0;
	buttons_ausblenden();
}

function buttons_ausblenden(){
	destroy_button_pan.visible = off;
	breaking = 1;
	wait(1);
	breaking = 0;
}

function buttons_ausrichten(){
	backmenue_pan.visible = on;
	backmenue_pan.scale_x = screen_size.x/800;
	backmenue_pan.scale_y = screen_size.y/600;
	backmenue_pan.pos_x = screen_size.x - backmenue_pan.size_x * (screen_size.x/800);
	backmenue_pan.pos_y = screen_size.y - backmenue_pan.size_y * (screen_size.y/600);
	
	destroy_button_pan.scale_x = screen_size.x/800;
	destroy_button_pan.scale_y = screen_size.y/600;
	destroy_button_pan.pos_x =740 * screen_size.x/800;
  	destroy_button_pan.pos_y =540 * screen_size.y/600;
}

function clickevent(){	
	if (event_type == event_click){
		if (my.skill1 == player_name){
			if (my.skill2 == 1){
				breaking = 1;
				wait(1);
				breaking = 0;
				
				destroy_button_pan.visible = on;
				
				while(breaking == 0){
					my.skill3 = clicked_destroy;
					wait(1);
				}
			}
		}
		
		if (my.skill1 != player_name){
			if (my.skill2 == 1){
				
			}
		}
	}
	
	wait(1);
}

action roboterfabrik(){
	my.skill1 = player_name;
	my.skill2 = 1;
	my.skill3 = 0;
	my.skill4 = 0;
	my.enable_click = on;
	my.event = clickevent;
	ent_sendnow(my);
	while(my.skill3 == 0){
		wait(1);
	}
	ent_remove(me);
}

function server_event(){
	ent_create("dummy.mdl",startposition,roboterfabrik);
	wait(1);
}

function client_event(){
	ent_create("dummy.mdl", startposition2, roboterfabrik);
	wait(1);	
}

function main()
{
	fps_max = 140;
	level_load (map_wmb);
	ph_setgravity(vector(0,0,0));
	sky_color.red = 1;
	sky_color.green = 1;
	sky_color.blue = 1;
   
	buttons_ausrichten();
   
	wait (3);
	camera_player();
	maus();
	
	if (!connection){
		wait (-4);
		sys_exit(NULL);
	}
	if (connection == 3){
		server_event();
	}
	else {
		client_event();
	}
}

function camera_player(){
	camera.pos = startposition;
	camera.x = startposition[0] + cos(camera.pan)*-500;
	camera.y = startposition[1] + sin(camera.pan)*-500;
	camera.z += 1000;
	camera.tilt = -69;
	/**
	while(1){
		if (mouse_pos.x > screen_size.x -2||key_cur){
			camera.x += sin(camera.pan)*6;
			camera.y += cos(camera.pan)*-6;
		}
		if (mouse_pos.x < 2||key_cul){
			camera.x += sin(camera.pan)*-6;
			camera.y += cos(camera.pan)*6;
		}
		if (mouse_pos.y > screen_size.y -2||key_cud){
			camera.x += cos(camera.pan)*-6;
			camera.y += sin(camera.pan)*-6;
		}
		if (mouse_pos.y < 2||key_cuu){
			camera.x += cos(camera.pan)*6;
			camera.y += sin(camera.pan)*6;
		}
	*/	
		wait(1);
	}
}

Function maus() { 
	while(1) { 
		mouse_range=100000;
		mouse_mode=1;
		mouse_pos.x = Pointer.x;
		mouse_pos.y = Pointer.y;
		wait(1); 
	} 
}

on_click = buttons_ausblenden;

ich bin für jede Idee dankbar

Re: Problem mit Entities und dem Besitzer [Re: Der_Kekser] #221425
08/13/08 23:19
08/13/08 23:19
Joined: Nov 2002
Posts: 913
Berlin, Germany
S
SchokoKeks Offline
User
SchokoKeks  Offline
User
S

Joined: Nov 2002
Posts: 913
Berlin, Germany
sorry für die spät antwort. das problem ist eher der konzept deines codes. ich programmiere auch ein multiplayer strategiespiel.

wie du in der main-funktion schon richtig differenziert hast (connection kann aber auch auf dem server den wert 1 haben!) werden die _event funktionen jeweils auf dem server und dem clienten ausgeführt. die funktion roboterfabrik, die dann bei ent_create als parameter übergeben wird startet immer auf dem server! deshalb wird immer der wert player_name vom server genommen. ent_create funktioniert so. du musst den code also überdenken.

(warum my.skill1 = player_name keinen fehler produziert weiß ich nicht, aber man kann variablen (my.skill1) keine strings zuweisen.)

was du benötigst ist ein aufruf von proc_client am anfang von roboterfabrik (aber erst nach wait(-0.5)). die dort angegebene funktion läuft dann auf dem client der ent_create ausgelöst hat. hier kannst du den skill1 dann setzen und per send_skill senden.

bei meinem spiel bekommt jeder spieler seine ID (1, 2, 3, 4). dazu gibt es einige arbeiter als starteinheiten.
keines der gebäude wird dannach per ent_create beim client erzeugt, sondern alle beim server. die arbeiter bekommen den auftrag vom client durch die übertragung einiger skills (send_skill). die neuen gebäude übernehmen dort einfach die ID ihres erbauers. das setzt natürlich vorraus das man die gebäude durch einheiten erreichten lässt.

eins ist auch noch ganz wichtig: der server ist bei connection == 3 noch gleichzeitig client. es sollte daher das client_event auch dort ausgelöst werden, und der gleiche code laufen können wie bei clients. das server_event sollte für dinge wie das checken der siegbedingungen zuständig sein.

Last edited by SchokoKeks; 08/13/08 23:19.
Re: Problem mit Entities und dem Besitzer [Re: SchokoKeks] #221502
08/14/08 10:53
08/14/08 10:53
Joined: Aug 2008
Posts: 18
Germany
D
Der_Kekser Offline OP
Newbie
Der_Kekser  Offline OP
Newbie
D

Joined: Aug 2008
Posts: 18
Germany
danke, werde ich sofort mal bisschen ändern.


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