project_files/frontlib/ipc/ipcprotocol.c
changeset 7271 5608ac657362
parent 7230 240620f46dd7
child 7275 15f722e0b96f
equal deleted inserted replaced
7269:5b0aeef8ba2a 7271:5608ac657362
    46 		flib_log_e("null parameter in flib_ipc_append_mapconf");
    46 		flib_log_e("null parameter in flib_ipc_append_mapconf");
    47 	} else if(tempvector) {
    47 	} else if(tempvector) {
    48 		bool error = false;
    48 		bool error = false;
    49 
    49 
    50 		if(map->mapgen == MAPGEN_NAMED) {
    50 		if(map->mapgen == MAPGEN_NAMED) {
    51 			error |= flib_ipc_append_message(tempvector, "emap %s", map->name);
    51 			if(map->name) {
       
    52 				error |= flib_ipc_append_message(tempvector, "emap %s", map->name);
       
    53 			} else {
       
    54 				flib_log_e("Missing map name");
       
    55 				error = true;
       
    56 			}
    52 		}
    57 		}
    53 		if(map->theme && !mappreview) {
    58 		if(map->theme && !mappreview) {
    54 			error |= flib_ipc_append_message(tempvector, "etheme %s", map->theme);
    59 			if(map->theme) {
    55 		}
    60 				error |= flib_ipc_append_message(tempvector, "etheme %s", map->theme);
       
    61 			} else {
       
    62 				flib_log_e("Missing map theme");
       
    63 				error = true;
       
    64 			}
       
    65 		}
       
    66 		error |= flib_ipc_append_seed(tempvector, map->seed);
    56 		error |= flib_ipc_append_message(tempvector, "e$template_filter %i", map->templateFilter);
    67 		error |= flib_ipc_append_message(tempvector, "e$template_filter %i", map->templateFilter);
    57 		error |= flib_ipc_append_message(tempvector, "e$mapgen %i", map->mapgen);
    68 		error |= flib_ipc_append_message(tempvector, "e$mapgen %i", map->mapgen);
    58 
    69 
    59 		if(map->mapgen == MAPGEN_MAZE) {
    70 		if(map->mapgen == MAPGEN_MAZE) {
    60 			error |= flib_ipc_append_message(tempvector, "e$maze_size %i", map->mazeSize);
    71 			error |= flib_ipc_append_message(tempvector, "e$maze_size %i", map->mazeSize);
    95 	} else {
   106 	} else {
    96 		return flib_ipc_append_message(vec, "eseed %s", seed);
   107 		return flib_ipc_append_message(vec, "eseed %s", seed);
    97 	}
   108 	}
    98 }
   109 }
    99 
   110 
       
   111 int flib_ipc_append_script(flib_vector *vec, const char *script) {
       
   112 	if(!vec || !script) {
       
   113 		flib_log_e("null parameter in flib_ipc_append_script");
       
   114 		return -1;
       
   115 	} else {
       
   116 		return flib_ipc_append_message(vec, "escript %s", script);
       
   117 	}
       
   118 }
       
   119 
   100 int flib_ipc_append_gamescheme(flib_vector *vec, const flib_cfg *scheme) {
   120 int flib_ipc_append_gamescheme(flib_vector *vec, const flib_cfg *scheme) {
   101 	int result = -1;
   121 	int result = -1;
   102 	flib_vector *tempvector = flib_vector_create();
   122 	flib_vector *tempvector = flib_vector_create();
   103 	if(!vec || !scheme) {
   123 	if(!vec || !scheme) {
   104 		flib_log_e("null parameter in flib_ipc_append_gamescheme");
   124 		flib_log_e("null parameter in flib_ipc_append_gamescheme");
   153 		if(!perHogAmmo && !noAmmoStore) {
   173 		if(!perHogAmmo && !noAmmoStore) {
   154 			error |= appendWeaponSet(tempvector, team->hogs[0].weaponset);
   174 			error |= appendWeaponSet(tempvector, team->hogs[0].weaponset);
   155 			error |= flib_ipc_append_message(tempvector, "eammstore");
   175 			error |= flib_ipc_append_message(tempvector, "eammstore");
   156 		}
   176 		}
   157 
   177 
   158 		char *hash = team->hash ? team->hash : "00000000000000000000000000000000";
   178 		// TODO
       
   179 		char *hash = team->ownerName ? team->ownerName : "00000000000000000000000000000000";
   159 		error |= flib_ipc_append_message(tempvector, "eaddteam %s %"PRIu32" %s", hash, team->color, team->name);
   180 		error |= flib_ipc_append_message(tempvector, "eaddteam %s %"PRIu32" %s", hash, team->color, team->name);
   160 
   181 
   161 		if(team->remoteDriven) {
   182 		if(team->remoteDriven) {
   162 			error |= flib_ipc_append_message(tempvector, "erdriven");
   183 			error |= flib_ipc_append_message(tempvector, "erdriven");
   163 		}
   184 		}
   210 		bool error = false;
   231 		bool error = false;
   211 		bool perHogAmmo = false;
   232 		bool perHogAmmo = false;
   212 		bool sharedAmmo = false;
   233 		bool sharedAmmo = false;
   213 
   234 
   214 		error |= flib_ipc_append_message(vec, netgame ? "TN" : "TL");
   235 		error |= flib_ipc_append_message(vec, netgame ? "TN" : "TL");
   215 		error |= flib_ipc_append_seed(vec, setup->seed);
       
   216 		if(setup->map) {
   236 		if(setup->map) {
   217 			error |= flib_ipc_append_mapconf(tempvector, setup->map, false);
   237 			error |= flib_ipc_append_mapconf(tempvector, setup->map, false);
   218 		}
   238 		}
   219 		if(setup->script) {
   239 		if(setup->script) {
   220 			error |= flib_ipc_append_message(tempvector, "escript %s", setup->script);
   240 			error |= flib_ipc_append_message(tempvector, "escript %s", setup->script);
   223 			error |= flib_ipc_append_gamescheme(tempvector, setup->gamescheme);
   243 			error |= flib_ipc_append_gamescheme(tempvector, setup->gamescheme);
   224 			sharedAmmo = getGameMod(setup->gamescheme, GAMEMOD_SHAREDAMMO_MASKBIT);
   244 			sharedAmmo = getGameMod(setup->gamescheme, GAMEMOD_SHAREDAMMO_MASKBIT);
   225 			// Shared ammo has priority over per-hog ammo
   245 			// Shared ammo has priority over per-hog ammo
   226 			perHogAmmo = !sharedAmmo && getGameMod(setup->gamescheme, GAMEMOD_PERHOGAMMO_MASKBIT);
   246 			perHogAmmo = !sharedAmmo && getGameMod(setup->gamescheme, GAMEMOD_PERHOGAMMO_MASKBIT);
   227 		}
   247 		}
   228 		if(setup->teams && setup->teamcount>0) {
   248 		if(setup->teams && setup->teamCount>0) {
   229 			uint32_t *clanColors = flib_calloc(setup->teamcount, sizeof(uint32_t));
   249 			uint32_t *clanColors = flib_calloc(setup->teamCount, sizeof(uint32_t));
   230 			if(!clanColors) {
   250 			if(!clanColors) {
   231 				error = true;
   251 				error = true;
   232 			} else {
   252 			} else {
   233 				int clanCount = 0;
   253 				int clanCount = 0;
   234 				for(int i=0; i<setup->teamcount; i++) {
   254 				for(int i=0; i<setup->teamCount; i++) {
   235 					flib_team *team = setup->teams[i];
   255 					flib_team *team = setup->teams[i];
   236 					bool newClan = false;
   256 					bool newClan = false;
   237 
   257 
   238 					// Find the clan index of this team (clans are identified by color).
   258 					// Find the clan index of this team (clans are identified by color).
   239 					// The upper 8 bits (alpha) are ignored in the engine as well.
   259 					// The upper 8 bits (alpha) are ignored in the engine as well.