Esempio n. 1
0
File: objects.c Progetto: rzel/dim3
int object_script_spawn(char *name,char *script,char *params,d3pnt *pnt,d3ang *ang,bool hide,char *err_str)
{
	int					idx;
	char				obj_err_str[256];
	spot_type			spot;
	obj_type			*obj;
	
		// create fake spot

	bzero(&spot,sizeof(spot_type));

	strcpy(spot.name,name);
	strcpy(spot.script,script);
	strcpy(spot.params,params);

	memmove(&spot.pnt,pnt,sizeof(d3pnt));
	memmove(&spot.ang,ang,sizeof(d3ang));

		// start object

	idx=object_start(&spot,name,object_type_object,bt_map,obj_err_str);
	if (idx==-1) {
		sprintf(err_str,"Object Spawn Failed: %s",obj_err_str);
		console_add_error(err_str);
		
		return(-1);
	}
	
	obj=server.obj_list.objs[idx];

	obj->script_spawned=TRUE;

		// hide object

	if (hide) {
		obj->hidden=TRUE;
		obj->contact.object_on=FALSE;
		obj->contact.projectile_on=FALSE;
		obj->contact.force_on=FALSE;
	}
	
		// force a spawn call
		
	if (!object_spawn(obj,obj_err_str)) {
		sprintf(err_str,"Object Spawn Failed: %s",obj_err_str);
		console_add_error(err_str);
		
		object_dispose_single(idx);
		return(-1);
	}

		// return index

	return(idx);
}
Esempio n. 2
0
bool server_game_start(char *game_script_name,int skill,network_reply_join_remotes *remotes,char *err_str)
{
	int							n;
	network_request_object_add	*obj_add;
	
		// initialize lists
		
	model_initialize();
		
	object_initialize_list();
	weapon_initialize_list();
	proj_setup_initialize_list();
	
	scripts_initialize();
	script_globals_initialize();
	timers_initialize();

		// setup skill level

	server.skill=skill;
	
		// run game script

	map.info.name[0]=0x0;
	map.info.player_start_name[0]=0x0;
	map.info.player_start_type[0]=0x0;
	map.info.in_load=FALSE;
	
	server.player_obj_uid=-1;
	
	js.game_attach.thing_type=thing_type_game;
	js.game_attach.thing_uid=-1;

	scripts_clear_attach_data(&js.game_attach);
	
	if (!scripts_add(&js.game_attach,"Game",game_script_name,NULL,err_str)) return(FALSE);
	
		// editor map override?
		
	if (setup.editor_override.on) {
		strcpy(map.info.name,setup.editor_override.map);
	}
	
		// can't start a game without a map
	
	if (map.info.name[0]==0x0) {
		strcpy(err_str,"Game: No start map specified in game script");
		return(FALSE);
	}

		// prepare for any script based spawns

	object_script_spawn_start();
	
		// put in additional objects (remotes, bots)
		
	if (remotes!=NULL) {
	
		obj_add=remotes->objects;
		
		for (n=0;n!=remotes->count;n++) {
			remote_add(obj_add,FALSE);
			obj_add++;
		}
	}
	
		// start player object
	
	server.player_obj_uid=object_start(NULL,TRUE,bt_game,-1,err_str);
	if (server.player_obj_uid==-1) {
		scripts_dispose(js.game_attach.script_uid);
		return(FALSE);
	}
			
		// force player to auto-spawn
		// spawing of player needs to happen before map_start events
		
	object_spawn(object_find_uid(server.player_obj_uid));

		// finish any script based spawns

	object_script_spawn_finish();
	
	return(TRUE);
}