forked from github/server
Merge branch 'develop' of github.com:eressea/server into develop
This commit is contained in:
commit
563a08de97
|
@ -93,6 +93,9 @@
|
|||
<param name="GiveRestriction" value="3"/>
|
||||
<param name="hunger.long" value="1"/>
|
||||
<param name="init_spells" value="0"/>
|
||||
<param name="world.era" value="2"/>
|
||||
<param name="seed.population.min" value="8"/>
|
||||
<param name="seed.population.max" value="8"/>
|
||||
<param name="rules.reserve.twophase" value="1"/>
|
||||
<param name="rules.owners.force_leave" value="1"/>
|
||||
<param name="rules.give.max_men" value="-1"/>
|
||||
|
|
|
@ -116,6 +116,8 @@
|
|||
<param name="study.expensivemigrants" value="1"/>
|
||||
<param name="study.speedup" value="2"/>
|
||||
<param name="world.era" value="3"/>
|
||||
<param name="seed.population.min" value="8"/>
|
||||
<param name="seed.population.max" value="8"/>
|
||||
<param name="rules.migrants" value="0"/>
|
||||
<param name="rules.reserve.twophase" value="1"/>
|
||||
<param name="rules.owners.force_leave" value="1"/>
|
||||
|
|
|
@ -152,7 +152,7 @@ static int tolua_make_island(lua_State * L)
|
|||
int s = (int)tolua_tonumber(L, 3, 0);
|
||||
int n = (int)tolua_tonumber(L, 4, s / 3);
|
||||
|
||||
n = build_island_e3(x, y, n, s);
|
||||
n = build_island_e3(NULL, x, y, n, s);
|
||||
tolua_pushnumber(L, n);
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -1500,7 +1500,7 @@ report_computer(const char *filename, report_context * ctx, const char *charset)
|
|||
FILE *F = fopen(filename, "wt");
|
||||
|
||||
if (era < 0) {
|
||||
era = get_param_int(global.parameters, "world.era", 2);
|
||||
era = get_param_int(global.parameters, "world.era", 1);
|
||||
}
|
||||
if (F == NULL) {
|
||||
perror(filename);
|
||||
|
|
37
src/gmtool.c
37
src/gmtool.c
|
@ -65,6 +65,7 @@
|
|||
|
||||
static int g_quit;
|
||||
int force_color = 0;
|
||||
newfaction * new_players = 0;
|
||||
|
||||
state *current_state = NULL;
|
||||
|
||||
|
@ -793,7 +794,7 @@ static void handlekey(state * st, int c)
|
|||
region *r;
|
||||
char sbuffer[80];
|
||||
static char kbuffer[80];
|
||||
int n, nx, ny;
|
||||
int n, nx, ny, minpop, maxpop;
|
||||
|
||||
switch (c) {
|
||||
case FAST_RIGHT:
|
||||
|
@ -846,12 +847,20 @@ static void handlekey(state * st, int c)
|
|||
loaddata(st);
|
||||
break;
|
||||
case 'B':
|
||||
/*
|
||||
make_block(st->cursor.x, st->cursor.y, 6, select_terrain(st, NULL));
|
||||
*/
|
||||
if (!new_players) {
|
||||
sprintf(sbuffer, "%s/newfactions", basepath());
|
||||
new_players = read_newfactions(sbuffer);
|
||||
}
|
||||
cnormalize(&st->cursor, &nx, &ny);
|
||||
n = rng_int() % 8 + 8;
|
||||
build_island_e3(nx, ny, n, n * 3);
|
||||
minpop = get_param_int(global.parameters, "seed.population.min", 8);
|
||||
maxpop = get_param_int(global.parameters, "seed.population.max", minpop);
|
||||
if (maxpop > minpop) {
|
||||
n = rng_int() % (maxpop - minpop) + minpop;
|
||||
}
|
||||
else {
|
||||
n = minpop;
|
||||
}
|
||||
build_island_e3(&new_players, nx, ny, n, n * 3);
|
||||
st->modified = 1;
|
||||
st->wnd_info->update |= 1;
|
||||
st->wnd_status->update |= 1;
|
||||
|
@ -1052,8 +1061,11 @@ static void handlekey(state * st, int c)
|
|||
tag_region(st->selected, nx, ny);
|
||||
break;
|
||||
case 'A':
|
||||
if (!new_players) {
|
||||
sprintf(sbuffer, "%s/newfactions", basepath());
|
||||
seed_players(sbuffer, false);
|
||||
new_players = read_newfactions(sbuffer);
|
||||
}
|
||||
seed_players(&new_players, false);
|
||||
st->wnd_map->update |= 1;
|
||||
break;
|
||||
case '/':
|
||||
|
@ -1332,15 +1344,14 @@ const char *prompt)
|
|||
return buffer[0] != 0;
|
||||
}
|
||||
|
||||
void seed_players(const char *filename, bool new_island)
|
||||
void seed_players(newfaction **players, bool new_island)
|
||||
{
|
||||
newfaction *players = read_newfactions(filename);
|
||||
if (players != NULL) {
|
||||
while (players) {
|
||||
int n = listlen(players);
|
||||
if (players) {
|
||||
while (*players) {
|
||||
int n = listlen(*players);
|
||||
int k = (n + ISLANDSIZE - 1) / ISLANDSIZE;
|
||||
k = n / k;
|
||||
n = autoseed(&players, k, new_island ? 0 : TURNS_PER_ISLAND);
|
||||
n = autoseed(players, k, new_island ? 0 : TURNS_PER_ISLAND);
|
||||
if (n == 0) {
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ extern "C" {
|
|||
struct state;
|
||||
struct region;
|
||||
struct terrain_type;
|
||||
struct newfaction;
|
||||
|
||||
int gmmain(int argc, char *argv[]);
|
||||
int curses_readline(struct lua_State *L, char *buffer, size_t size,
|
||||
|
@ -35,7 +36,7 @@ extern "C" {
|
|||
void state_close(struct state *);
|
||||
|
||||
void make_block(int x, int y, int radius, const struct terrain_type *terrain);
|
||||
void seed_players(const char *filename, bool new_island);
|
||||
void seed_players(struct newfaction **players, bool new_island);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -904,10 +904,9 @@ static void smooth_island(region_list * island)
|
|||
}
|
||||
}
|
||||
|
||||
static void starting_region(region * r, region * rn[])
|
||||
static void starting_region(newfaction ** players, region * r, region * rn[])
|
||||
{
|
||||
int n;
|
||||
|
||||
oceans_around(r, rn);
|
||||
freset(r, RF_MARK);
|
||||
for (n = 0; n != MAXDIRECTIONS; ++n) {
|
||||
|
@ -915,11 +914,19 @@ static void starting_region(region * r, region * rn[])
|
|||
}
|
||||
terraform_region(r, newterrain(T_PLAIN));
|
||||
prepare_starting_region(r);
|
||||
addplayer(r, addfaction("enno@eressea.de", itoa36(rng_int()), races, default_locale, 0));
|
||||
if (players && *players) {
|
||||
newfaction *nf = *players;
|
||||
const struct race *rc = nf->race ? nf->race : races;
|
||||
const struct locale *lang = nf->lang ? nf->lang : default_locale;
|
||||
const char * passwd = nf->password ? nf->password : itoa36(rng_int());
|
||||
addplayer(r, addfaction(nf->email, passwd, rc, lang, 0));
|
||||
*players = nf->next;
|
||||
free_newfaction(nf);
|
||||
}
|
||||
}
|
||||
|
||||
/* E3A island generation */
|
||||
int build_island_e3(int x, int y, int numfactions, int minsize)
|
||||
int build_island_e3(newfaction ** players, int x, int y, int numfactions, int minsize)
|
||||
{
|
||||
#define MIN_QUALITY 1000
|
||||
int nfactions = 0;
|
||||
|
@ -961,8 +968,8 @@ int build_island_e3(int x, int y, int numfactions, int minsize)
|
|||
|
||||
get_neighbours(r, rn);
|
||||
q = region_quality(r, rn);
|
||||
if (q >= MIN_QUALITY && nfactions < numfactions) {
|
||||
starting_region(r, rn);
|
||||
if (q >= MIN_QUALITY && nfactions < numfactions && *players) {
|
||||
starting_region(players, r, rn);
|
||||
minq = _min(minq, q);
|
||||
maxq = _max(maxq, q);
|
||||
++nfactions;
|
||||
|
@ -976,8 +983,8 @@ int build_island_e3(int x, int y, int numfactions, int minsize)
|
|||
region *rn[MAXDIRECTIONS];
|
||||
get_neighbours(r, rn);
|
||||
q = region_quality(r, rn);
|
||||
if (q >= MIN_QUALITY * 4 / 3 && nfactions < numfactions) {
|
||||
starting_region(r, rn);
|
||||
if (q >= MIN_QUALITY * 4 / 3 && nfactions < numfactions && *players) {
|
||||
starting_region(players, r, rn);
|
||||
minq = _min(minq, q);
|
||||
maxq = _max(maxq, q);
|
||||
++nfactions;
|
||||
|
|
|
@ -40,7 +40,7 @@ extern "C" {
|
|||
*terrains[], int distribution[], int size);
|
||||
|
||||
extern int seed_adamantium(struct region *r, int base);
|
||||
extern int build_island_e3(int x, int y, int numfactions, int minsize);
|
||||
extern int build_island_e3(newfaction **players, int x, int y, int numfactions, int minsize);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue