Beispiel #1
0
Datei: ipcbase.c Projekt: CaF2/hw
void flib_ipcbase_accept(flib_ipcbase *ipc) {
    if(!log_badargs_if(ipc==NULL) && !ipc->sock && ipc->acceptor) {
        ipc->sock = flib_socket_accept(ipc->acceptor, true);
        if(ipc->sock) {
            flib_log_d("IPC connection accepted.");
            flib_acceptor_close(ipc->acceptor);
            ipc->acceptor = NULL;
        }
    }
}
Beispiel #2
0
void flib_teamlist_clear(flib_teamlist *list) {
	if(!log_badargs_if(list==NULL)) {
		for(int i=0; i<list->teamCount; i++) {
			flib_team_destroy(list->teams[i]);
		}
		free(list->teams);
		list->teams = NULL;
		list->teamCount = 0;
	}
}
Beispiel #3
0
int flib_weaponsetlist_delete(flib_weaponsetlist *list, int pos) {
	if(!log_badargs_if(list==NULL)) {
		flib_weaponset *elem = list->weaponsets[pos];
		if(!deleteWeaponset(&list->weaponsets, &list->weaponsetCount, pos)) {
			flib_weaponset_destroy(elem);
			return 0;
		}
	}
	return -1;
}
Beispiel #4
0
Datei: ipcbase.c Projekt: CaF2/hw
IpcState flib_ipcbase_state(flib_ipcbase *ipc) {
    if(log_badargs_if(ipc==NULL)) {
        return IPC_NOT_CONNECTED;
    } else if(ipc->sock) {
        return IPC_CONNECTED;
    } else if(ipc->acceptor) {
        return IPC_LISTENING;
    } else {
        return IPC_NOT_CONNECTED;
    }
}
Beispiel #5
0
flib_ini *flib_ini_load(const char *filename) {
	flib_ini *result = NULL;
	if(!log_badargs_if(filename==NULL)) {
		flib_ini *tmpIni = flib_calloc(1, sizeof(flib_ini));
		if(tmpIni) {
			tmpIni->inidict = iniparser_load(filename);
			if(tmpIni->inidict) {
				result = tmpIni;
				tmpIni = NULL;
			}
		}
		flib_ini_destroy(tmpIni);
	}
	return result;
}
Beispiel #6
0
flib_weaponset *flib_weaponset_create(const char *name) {
	flib_weaponset *result = NULL;
	if(!log_badargs_if(name==NULL)) {
		flib_weaponset *newSet = flib_calloc(1, sizeof(flib_weaponset));
		if(newSet) {
			newSet->name = flib_strdupnull(name);
			if(newSet->name) {
				setField(newSet->loadout, "", 0, false);
				setField(newSet->crateprob, "", 0, false);
				setField(newSet->crateammo, "", 0, false);
				setField(newSet->delay, "", 0, false);
				result = newSet;
				newSet = NULL;
			}
		}
		flib_weaponset_destroy(newSet);
	}
	return result;
}
Beispiel #7
0
flib_weaponsetlist *flib_weaponsetlist_from_ini(const char *filename) {
	flib_weaponsetlist *result = NULL;
	if(!log_badargs_if(filename==NULL)) {
		flib_ini *ini = flib_ini_load(filename);
		if(!ini) {
			flib_log_e("Missing file %s.", filename);
		} else if(flib_ini_enter_section(ini, "General")) {
			flib_log_e("Missing section \"General\" in file %s.", filename);
		} else {
			flib_weaponsetlist *tmpList = flib_weaponsetlist_create();
			if(tmpList && !fillWeaponsetsFromIni(tmpList, ini)) {
				result = tmpList;
				tmpList = NULL;
			}
			flib_weaponsetlist_destroy(tmpList);
		}
		flib_ini_destroy(ini);
	}
	return result;
}
Beispiel #8
0
Datei: scheme.c Projekt: CaF2/hw
flib_scheme *flib_scheme_create(const char *schemeName) {
    flib_scheme *result = flib_calloc(1, sizeof(flib_scheme));
    if(log_badargs_if(schemeName==NULL) || result==NULL) {
        return NULL;
    }

    result->name = flib_strdupnull(schemeName);
    result->mods = flib_calloc(flib_meta.modCount, sizeof(*result->mods));
    result->settings = flib_calloc(flib_meta.settingCount, sizeof(*result->settings));

    if(!result->mods || !result->settings || !result->name) {
        flib_scheme_destroy(result);
        return NULL;
    }

    for(int i=0; i<flib_meta.settingCount; i++) {
        result->settings[i] = flib_meta.settings[i].def;
    }
    return result;
}
Beispiel #9
0
int flib_ipc_append_style(flib_vector *vec, const char *style) {
    int result = -1;
    char *copy = flib_strdupnull(style);
    if(!log_badargs_if(vec==NULL) && copy) {
        if(!strcmp("Normal", copy)) {
            // "Normal" means no gametype script
            // TODO if an empty script called "Normal" is added to the scripts directory this can be removed
            result = 0;
        } else {
            size_t len = strlen(copy);
            for(size_t i=0; i<len; i++) {
                if(copy[i] == ' ') {
                    copy[i] = '_';
                }
            }

            result = flib_ipc_append_message(vec, "escript %s%s.lua", MULTIPLAYER_SCRIPT_PATH, copy);
        }
    }
    free(copy);
    return result;
}
Beispiel #10
0
int flib_ini_get_sectioncount(flib_ini *ini) {
	if(!log_badargs_if(ini==NULL)) {
		return iniparser_getnsec(ini->inidict);
	}
	return INI_ERROR_OTHER;
}
Beispiel #11
0
flib_team *flib_team_from_ini(const char *filename) {
    if(log_badargs_if(filename==NULL)) {
        return NULL;
    }

    flib_team *result = flib_calloc(1, sizeof(flib_team));
    flib_ini *ini = NULL;

    if(!result) {
        return from_ini_handleError(result, ini);
    }

    ini = flib_ini_load(filename);
    if(!ini) {
        flib_log_e("Error loading team file %s", filename);
        return from_ini_handleError(result, ini);
    }

    if(flib_ini_enter_section(ini, "team")) {
        flib_log_e("Missing section \"Team\" in team file %s", filename);
        return from_ini_handleError(result, ini);
    }
    bool error = false;
    error |= flib_ini_get_str(ini, &result->name, "name");
    error |= flib_ini_get_str(ini, &result->grave, "grave");
    error |= flib_ini_get_str(ini, &result->fort, "fort");
    error |= flib_ini_get_str(ini, &result->voicepack, "voicepack");
    error |= flib_ini_get_str(ini, &result->flag, "flag");
    error |= flib_ini_get_int(ini, &result->rounds, "rounds");
    error |= flib_ini_get_int(ini, &result->wins, "wins");
    error |= flib_ini_get_int(ini, &result->campaignProgress, "campaignprogress");

    int difficulty = 0;
    error |= flib_ini_get_int(ini, &difficulty, "difficulty");

    if(error) {
        flib_log_e("Missing or malformed entry in section \"Team\" in file %s", filename);
        return from_ini_handleError(result, ini);
    }

    for(int i=0; i<HEDGEHOGS_PER_TEAM; i++) {
        char sectionName[32];
        if(snprintf(sectionName, sizeof(sectionName), "hedgehog%i", i) <= 0) {
            return from_ini_handleError(result, ini);
        }
        if(flib_ini_enter_section(ini, sectionName)) {
            flib_log_e("Missing section \"%s\" in team file %s", sectionName, filename);
            return from_ini_handleError(result, ini);
        }
        flib_hog *hog = &result->hogs[i];
        error |= flib_ini_get_str(ini, &hog->name, "name");
        error |= flib_ini_get_str(ini, &hog->hat, "hat");
        error |= flib_ini_get_int(ini, &hog->rounds, "rounds");
        error |= flib_ini_get_int(ini, &hog->kills, "kills");
        error |= flib_ini_get_int(ini, &hog->deaths, "deaths");
        error |= flib_ini_get_int(ini, &hog->suicides, "suicides");
        result->hogs[i].difficulty = difficulty;
        result->hogs[i].initialHealth = TEAM_DEFAULT_HEALTH;

        if(error) {
            flib_log_e("Missing or malformed entry in section \"%s\" in file %s", sectionName, filename);
            return from_ini_handleError(result, ini);
        }
    }

    if(!flib_ini_enter_section(ini, "binds")) {
        result->bindingCount = flib_ini_get_keycount(ini);
        if(result->bindingCount<0) {
            flib_log_e("Error reading bindings from file %s", filename);
            result->bindingCount = 0;
        }
        result->bindings = flib_calloc(result->bindingCount, sizeof(flib_binding));
        if(!result->bindings) {
            return from_ini_handleError(result, ini);
        }
        for(int i=0; i<result->bindingCount; i++) {
            char *keyname = flib_ini_get_keyname(ini, i);
            if(!keyname) {
                error = true;
            } else {
                result->bindings[i].action = flib_urldecode(keyname);
                error |= !result->bindings[i].action;
                error |= flib_ini_get_str(ini, &result->bindings[i].binding, keyname);
            }
            free(keyname);
        }
    }

    if(error) {
        flib_log_e("Error reading team file %s", filename);
        return from_ini_handleError(result, ini);
    }

    flib_ini_destroy(ini);
    return result;
}
Beispiel #12
0
Datei: ipcbase.c Projekt: CaF2/hw
uint16_t flib_ipcbase_port(flib_ipcbase *ipc) {
    if(log_badargs_if(ipc==NULL)) {
        return 0;
    }
    return ipc->port;
}