Bug #1601 ยป 0085-Load-government-flags-from-the-ruleset.patch
| server/ruleset/ruleload.c | ||
|---|---|---|
|
const char *sec_name = section_name(section_list_get(sec, i));
|
||
|
struct requirement_vector *reqs
|
||
|
= lookup_req_list(file, sec_name, "reqs", government_rule_name(g));
|
||
|
const char **slist;
|
||
|
int j;
|
||
|
const char *sval;
|
||
|
size_t nval;
|
||
|
if (reqs == NULL) {
|
||
|
ok = FALSE;
|
||
| ... | ... | |
|
sz_strlcpy(g->sound_alt2,
|
||
|
secfile_lookup_str_default(file, "-", "%s.sound_alt2", sec_name));
|
||
|
slist = secfile_lookup_str_vec(file, &nval, "%s.flags", sec_name);
|
||
|
BV_CLR_ALL(g->flags);
|
||
|
for (j = 0; j < nval; j++) {
|
||
|
enum gov_flag_id flag;
|
||
|
sval = slist[j];
|
||
|
flag = gov_flag_id_by_name(sval, fc_strcasecmp);
|
||
|
if (!gov_flag_id_is_valid(flag)) {
|
||
|
ruleset_error(NULL, LOG_ERROR, "\"%s\" government \"%s\": unknown flag \"%s\".",
|
||
|
filename, government_rule_name(g), sval);
|
||
|
ok = FALSE;
|
||
|
break;
|
||
|
} else {
|
||
|
BV_SET(g->flags, flag);
|
||
|
}
|
||
|
}
|
||
|
free(slist);
|
||
|
g->helptext = lookup_strvec(file, sec_name, "helptext");
|
||
|
} governments_iterate_end;
|
||
|
}
|
||
| tools/ruleutil/rulesave.c | ||
|---|---|---|
|
governments_re_active_iterate(pg) {
|
||
|
char path[512];
|
||
|
struct ruler_title *prtitle;
|
||
|
const char *flag_names[TF_COUNT];
|
||
|
int set_count;
|
||
|
int flagi;
|
||
|
fc_snprintf(path, sizeof(path), "government_%d", sect_idx++);
|
||
| ... | ... | |
|
}
|
||
|
}
|
||
|
set_count = 0;
|
||
|
for (flagi = 0; flagi < GOVF_USER_FLAG_1 + MAX_NUM_USER_GOVERNMENT_FLAGS; flagi++) {
|
||
|
if (BV_ISSET(pg->flags, flagi)) {
|
||
|
flag_names[set_count++] = gov_flag_id_name(flagi);
|
||
|
}
|
||
|
}
|
||
|
if (set_count > 0) {
|
||
|
secfile_insert_str_vec(sfile, flag_names, set_count,
|
||
|
"%s.flags", path);
|
||
|
}
|
||
|
save_strvec(sfile, pg->helptext, path, "helptext");
|
||
|
} governments_re_active_iterate_end;
|
||