forked from github/server
Merge branch 'master' of github.com:eressea/server
This commit is contained in:
commit
1e7e5877a1
2
cutest
2
cutest
|
@ -1 +1 @@
|
||||||
Subproject commit 788659594ef87e9f497b8039da764182adfd2943
|
Subproject commit d83cec09a52835274ab8ed4849de16fb8658982a
|
|
@ -0,0 +1,61 @@
|
||||||
|
require "multis"
|
||||||
|
require "e3a.frost"
|
||||||
|
|
||||||
|
function process(orders)
|
||||||
|
local confirmed_multis = { }
|
||||||
|
local suspected_multis = { }
|
||||||
|
|
||||||
|
if open_game(get_turn())~=0 then
|
||||||
|
print("could not read game")
|
||||||
|
return -1
|
||||||
|
end
|
||||||
|
init_summary()
|
||||||
|
|
||||||
|
-- run the turn:
|
||||||
|
if read_orders(orders) ~= 0 then
|
||||||
|
print("could not read " .. orders)
|
||||||
|
return -1
|
||||||
|
end
|
||||||
|
|
||||||
|
-- plan_monsters()
|
||||||
|
local mon = get_faction(666)
|
||||||
|
if mon ~= nil then
|
||||||
|
mon.lastturn = get_turn()
|
||||||
|
end
|
||||||
|
|
||||||
|
if nmr_check(config.maxnmrs or 30)~=0 then
|
||||||
|
return -1
|
||||||
|
end
|
||||||
|
|
||||||
|
process_orders()
|
||||||
|
if xmas2009~=nil then
|
||||||
|
xmas2009()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- create new monsters:
|
||||||
|
spawn_dragons()
|
||||||
|
spawn_undead()
|
||||||
|
|
||||||
|
if get_turn()>=config.kill_after then
|
||||||
|
kill_nonstarters()
|
||||||
|
end
|
||||||
|
-- post-turn updates:
|
||||||
|
update_guards()
|
||||||
|
update_scores()
|
||||||
|
frost.update()
|
||||||
|
|
||||||
|
local localechange = { en = { "L46o" } }
|
||||||
|
change_locales(localechange)
|
||||||
|
|
||||||
|
-- use newfactions file to place out new players
|
||||||
|
-- autoseed(config.basepath .. "/newfactions", false)
|
||||||
|
|
||||||
|
write_files(config.locales)
|
||||||
|
|
||||||
|
file = "" .. get_turn() .. ".dat"
|
||||||
|
if eressea.write_game(file)~=0 then
|
||||||
|
print("could not write game")
|
||||||
|
return -1
|
||||||
|
end
|
||||||
|
return 0
|
||||||
|
end
|
|
@ -0,0 +1,4 @@
|
||||||
|
require "spells"
|
||||||
|
require "e3a.rules"
|
||||||
|
require "e3a.markets"
|
||||||
|
require "e3a.frost"
|
|
@ -18,7 +18,7 @@ fi
|
||||||
echo $ROOT
|
echo $ROOT
|
||||||
$ROOT/$BIN_DIR/eressea/test_eressea
|
$ROOT/$BIN_DIR/eressea/test_eressea
|
||||||
pushd $ROOT/game-e2
|
pushd $ROOT/game-e2
|
||||||
$ROOT/$BIN_DIR/eressea/eressea -e run_tests
|
$ROOT/$BIN_DIR/eressea/eressea runtests.lua
|
||||||
cd $ROOT/game-e3
|
cd $ROOT/game-e3
|
||||||
$ROOT/$BIN_DIR/eressea/eressea -e run_tests
|
$ROOT/$BIN_DIR/eressea/eressea runtests.lua
|
||||||
popd
|
popd
|
||||||
|
|
|
@ -15,16 +15,17 @@ without prior permission by the authors of Eressea.
|
||||||
#include "bind_unit.h"
|
#include "bind_unit.h"
|
||||||
#include "bindings.h"
|
#include "bindings.h"
|
||||||
|
|
||||||
|
#include <kernel/config.h>
|
||||||
#include <sqlite3.h>
|
#include <sqlite3.h>
|
||||||
#include <tolua.h>
|
#include <tolua.h>
|
||||||
|
|
||||||
#define LTYPE_DB TOLUA_CAST "db"
|
#define LTYPE_DB TOLUA_CAST "db"
|
||||||
|
|
||||||
extern int db_update_factions(sqlite3 * db, bool force);
|
extern int db_update_factions(sqlite3 * db, bool force, int game);
|
||||||
static int tolua_db_update_factions(lua_State * L)
|
static int tolua_db_update_factions(lua_State * L)
|
||||||
{
|
{
|
||||||
sqlite3 *db = (sqlite3 *) tolua_tousertype(L, 1, 0);
|
sqlite3 *db = (sqlite3 *) tolua_tousertype(L, 1, 0);
|
||||||
db_update_factions(db, tolua_toboolean(L, 2, 0));
|
db_update_factions(db, tolua_toboolean(L, 2, 0), global.game_id);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,6 +93,7 @@ struct settings global = {
|
||||||
"Eressea", /* gamename */
|
"Eressea", /* gamename */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool lomem = false;
|
||||||
FILE *logfile;
|
FILE *logfile;
|
||||||
FILE *updatelog;
|
FILE *updatelog;
|
||||||
const struct race *new_race[MAXRACES];
|
const struct race *new_race[MAXRACES];
|
||||||
|
@ -1578,10 +1579,6 @@ void freestrlist(strlist * s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* - Meldungen und Fehler ------------------------------------------------- */
|
|
||||||
|
|
||||||
bool lomem = false;
|
|
||||||
|
|
||||||
/* - Namen der Strukturen -------------------------------------- */
|
/* - Namen der Strukturen -------------------------------------- */
|
||||||
typedef char name[OBJECTIDSIZE + 1];
|
typedef char name[OBJECTIDSIZE + 1];
|
||||||
static name idbuf[8];
|
static name idbuf[8];
|
||||||
|
@ -3168,7 +3165,6 @@ void load_inifile(dictionary * d)
|
||||||
make_locales(str);
|
make_locales(str);
|
||||||
|
|
||||||
/* excerpt from [config] (the rest is used in bindings.c) */
|
/* excerpt from [config] (the rest is used in bindings.c) */
|
||||||
game_name = iniparser_getstring(d, "config:game", game_name);
|
global.game_id = iniparser_getint(d, "config:game_id", 0);
|
||||||
|
|
||||||
global.inifile = d;
|
global.inifile = d;
|
||||||
}
|
}
|
||||||
|
|
|
@ -393,6 +393,7 @@ extern "C" {
|
||||||
void *vm_state;
|
void *vm_state;
|
||||||
float producexpchance;
|
float producexpchance;
|
||||||
int cookie;
|
int cookie;
|
||||||
|
int game_id;
|
||||||
int data_version; /* TODO: eliminate in favor of gamedata.version */
|
int data_version; /* TODO: eliminate in favor of gamedata.version */
|
||||||
struct _dictionary_ *inifile;
|
struct _dictionary_ *inifile;
|
||||||
|
|
||||||
|
|
|
@ -129,117 +129,133 @@ db_update_email(sqlite3 * db, const faction * f, const db_faction * dbstate,
|
||||||
|
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
int db_update_factions(sqlite3 * db, bool force)
|
int db_get_game(sqlite3 *db) {
|
||||||
{
|
int game_id = 0;
|
||||||
int game_id = 6;
|
const char sql_game[] =
|
||||||
const char sql_select[] =
|
"SELECT id FROM game WHERE name=?";
|
||||||
"SELECT faction.id, faction.email_id, faction.code, email.email, faction.password_md5, faction.name, faction.lastturn FROM email, faction"
|
sqlite3_stmt *stmt_game = stmt_cache(db, sql_game);
|
||||||
" WHERE email.id=faction.email_id AND faction.game_id=? AND (lastturn IS NULL OR lastturn>?)";
|
res = sqlite3_bind_text(stmt_game, 1, gamename, -1, SQLITE_TRANSIENT);
|
||||||
sqlite3_stmt *stmt_select = stmt_cache_get(db, sql_select);
|
SQL_EXPECT(res, SQLITE_OK);
|
||||||
faction *f;
|
|
||||||
int res;
|
|
||||||
|
|
||||||
res = sqlite3_bind_int(stmt_select, 1, game_id);
|
|
||||||
SQL_EXPECT(res, SQLITE_OK);
|
|
||||||
res = sqlite3_bind_int(stmt_select, 2, turn - 2);
|
|
||||||
SQL_EXPECT(res, SQLITE_OK);
|
|
||||||
for (;;) {
|
|
||||||
sqlite3_uint64 id_faction;
|
|
||||||
int lastturn;
|
|
||||||
|
|
||||||
res = sqlite3_step(stmt_select);
|
res = sqlite3_step(stmt_select);
|
||||||
if (res != SQLITE_ROW)
|
return game_id;
|
||||||
break;
|
}
|
||||||
|
*/
|
||||||
id_faction = sqlite3_column_int64(stmt_select, 0);
|
int db_update_factions(sqlite3 * db, bool force, int game_id)
|
||||||
lastturn = sqlite3_column_int(stmt_select, 6);
|
{
|
||||||
f = get_faction_by_id((int)id_faction);
|
const char sql_select[] =
|
||||||
|
"SELECT faction.id, faction.email_id, faction.code, email.email, faction.password_md5, faction.name, faction.lastturn FROM email, faction"
|
||||||
if (f == NULL || !f->alive) {
|
" WHERE email.id=faction.email_id AND faction.game_id=? AND (lastturn IS NULL OR lastturn>?)";
|
||||||
if (lastturn == 0) {
|
sqlite3_stmt *stmt_select = stmt_cache_get(db, sql_select);
|
||||||
const char sql_update[] = "UPDATE faction SET lastturn=? WHERE id=?";
|
faction *f;
|
||||||
sqlite3_stmt *stmt = stmt_cache_get(db, sql_update);
|
int res;
|
||||||
|
|
||||||
lastturn = f ? f->lastorders : turn - 1;
|
res = sqlite3_bind_int(stmt_select, 1, game_id);
|
||||||
sqlite3_bind_int(stmt, 1, lastturn);
|
SQL_EXPECT(res, SQLITE_OK);
|
||||||
sqlite3_bind_int64(stmt, 2, id_faction);
|
res = sqlite3_bind_int(stmt_select, 2, turn - 2);
|
||||||
res = sqlite3_step(stmt);
|
SQL_EXPECT(res, SQLITE_OK);
|
||||||
SQL_EXPECT(res, SQLITE_DONE);
|
for (;;) {
|
||||||
}
|
sqlite3_uint64 id_faction;
|
||||||
} else {
|
int lastturn;
|
||||||
md5_state_t ms;
|
const char * no_b36;
|
||||||
md5_byte_t digest[16];
|
|
||||||
int i;
|
res = sqlite3_step(stmt_select);
|
||||||
char passwd_md5[MD5_LENGTH_0];
|
if (res != SQLITE_ROW)
|
||||||
sqlite3_uint64 id_email;
|
break;
|
||||||
bool update = force;
|
|
||||||
db_faction dbstate;
|
id_faction = sqlite3_column_int64(stmt_select, 0);
|
||||||
const char *no_b36;
|
lastturn = sqlite3_column_int(stmt_select, 6);
|
||||||
|
no_b36 = (const char *)sqlite3_column_text(stmt_select, 2);
|
||||||
fset(f, FFL_MARK);
|
f = get_faction_by_id((int)id_faction);
|
||||||
dbstate.id_faction = id_faction;
|
if (!f) {
|
||||||
dbstate.id_email = sqlite3_column_int64(stmt_select, 1);
|
int no = atoi36(no_b36);
|
||||||
no_b36 = (const char *)sqlite3_column_text(stmt_select, 2);
|
f = findfaction(no);
|
||||||
dbstate.no = no_b36 ? atoi36(no_b36) : -1;
|
if (f) {
|
||||||
dbstate.email = (const char *)sqlite3_column_text(stmt_select, 3);
|
f->subscription = (int)id_faction;
|
||||||
dbstate.passwd_md5 = (const char *)sqlite3_column_text(stmt_select, 4);
|
}
|
||||||
dbstate.name = (const char *)sqlite3_column_text(stmt_select, 5);
|
}
|
||||||
|
if (!f || !f->alive) {
|
||||||
id_email = dbstate.id_email;
|
if (lastturn == 0) {
|
||||||
res = db_update_email(db, f, &dbstate, force, &id_email);
|
const char sql_update[] = "UPDATE faction SET lastturn=? WHERE id=?";
|
||||||
SQL_EXPECT(res, SQLITE_OK);
|
sqlite3_stmt *stmt = stmt_cache_get(db, sql_update);
|
||||||
|
|
||||||
md5_init(&ms);
|
lastturn = f ? f->lastorders : turn - 1;
|
||||||
md5_append(&ms, (md5_byte_t *) f->passw, (int)strlen(f->passw));
|
sqlite3_bind_int(stmt, 1, lastturn);
|
||||||
md5_finish(&ms, digest);
|
sqlite3_bind_int64(stmt, 2, id_faction);
|
||||||
for (i = 0; i != 16; ++i)
|
res = sqlite3_step(stmt);
|
||||||
sprintf(passwd_md5 + 2 * i, "%.02x", digest[i]);
|
SQL_EXPECT(res, SQLITE_DONE);
|
||||||
|
}
|
||||||
if (!update) {
|
} else {
|
||||||
update = ((id_email != 0 && dbstate.id_email != id_email)
|
md5_state_t ms;
|
||||||
|| dbstate.no != f->no || dbstate.passwd_md5 == NULL
|
md5_byte_t digest[16];
|
||||||
|| strcmp(passwd_md5, dbstate.passwd_md5) != 0 || dbstate.name == NULL
|
int i;
|
||||||
|| strncmp(f->name, dbstate.name, MAX_FACTION_NAME) != 0);
|
char passwd_md5[MD5_LENGTH_0];
|
||||||
}
|
sqlite3_uint64 id_email;
|
||||||
if (update) {
|
bool update = force;
|
||||||
const char sql_update_faction[] =
|
db_faction dbstate;
|
||||||
"UPDATE faction SET email_id=?, password_md5=?, code=?, name=?, firstturn=? WHERE id=?";
|
|
||||||
sqlite3_stmt *stmt_update_faction =
|
fset(f, FFL_MARK);
|
||||||
stmt_cache_get(db, sql_update_faction);
|
dbstate.id_faction = id_faction;
|
||||||
|
dbstate.id_email = sqlite3_column_int64(stmt_select, 1);
|
||||||
res = sqlite3_bind_int64(stmt_update_faction, 1, id_email);
|
dbstate.no = no_b36 ? atoi36(no_b36) : -1;
|
||||||
SQL_EXPECT(res, SQLITE_OK);
|
dbstate.email = (const char *)sqlite3_column_text(stmt_select, 3);
|
||||||
res =
|
dbstate.passwd_md5 = (const char *)sqlite3_column_text(stmt_select, 4);
|
||||||
sqlite3_bind_text(stmt_update_faction, 2, passwd_md5, MD5_LENGTH,
|
dbstate.name = (const char *)sqlite3_column_text(stmt_select, 5);
|
||||||
SQLITE_TRANSIENT);
|
|
||||||
SQL_EXPECT(res, SQLITE_OK);
|
id_email = dbstate.id_email;
|
||||||
res =
|
res = db_update_email(db, f, &dbstate, force, &id_email);
|
||||||
sqlite3_bind_text(stmt_update_faction, 3, no_b36, -1,
|
SQL_EXPECT(res, SQLITE_OK);
|
||||||
SQLITE_TRANSIENT);
|
|
||||||
SQL_EXPECT(res, SQLITE_OK);
|
md5_init(&ms);
|
||||||
res =
|
md5_append(&ms, (md5_byte_t *) f->passw, (int)strlen(f->passw));
|
||||||
sqlite3_bind_text(stmt_update_faction, 4, f->name, -1,
|
md5_finish(&ms, digest);
|
||||||
SQLITE_TRANSIENT);
|
for (i = 0; i != 16; ++i)
|
||||||
SQL_EXPECT(res, SQLITE_OK);
|
sprintf(passwd_md5 + 2 * i, "%.02x", digest[i]);
|
||||||
res = sqlite3_bind_int(stmt_update_faction, 5, turn - f->age);
|
|
||||||
SQL_EXPECT(res, SQLITE_OK);
|
if (!update) {
|
||||||
res = sqlite3_bind_int64(stmt_update_faction, 6, f->subscription);
|
update = ((id_email != 0 && dbstate.id_email != id_email)
|
||||||
SQL_EXPECT(res, SQLITE_OK);
|
|| dbstate.no != f->no || dbstate.passwd_md5 == NULL
|
||||||
res = sqlite3_step(stmt_update_faction);
|
|| strcmp(passwd_md5, dbstate.passwd_md5) != 0 || dbstate.name == NULL
|
||||||
SQL_EXPECT(res, SQLITE_DONE);
|
|| strncmp(f->name, dbstate.name, MAX_FACTION_NAME) != 0);
|
||||||
}
|
}
|
||||||
|
if (update) {
|
||||||
|
const char sql_update_faction[] =
|
||||||
|
"UPDATE faction SET email_id=?, password_md5=?, code=?, name=?, firstturn=? WHERE id=?";
|
||||||
|
sqlite3_stmt *stmt_update_faction =
|
||||||
|
stmt_cache_get(db, sql_update_faction);
|
||||||
|
|
||||||
|
res = sqlite3_bind_int64(stmt_update_faction, 1, id_email);
|
||||||
|
SQL_EXPECT(res, SQLITE_OK);
|
||||||
|
res =
|
||||||
|
sqlite3_bind_text(stmt_update_faction, 2, passwd_md5, MD5_LENGTH,
|
||||||
|
SQLITE_TRANSIENT);
|
||||||
|
SQL_EXPECT(res, SQLITE_OK);
|
||||||
|
res =
|
||||||
|
sqlite3_bind_text(stmt_update_faction, 3, no_b36, -1,
|
||||||
|
SQLITE_TRANSIENT);
|
||||||
|
SQL_EXPECT(res, SQLITE_OK);
|
||||||
|
res =
|
||||||
|
sqlite3_bind_text(stmt_update_faction, 4, f->name, -1,
|
||||||
|
SQLITE_TRANSIENT);
|
||||||
|
SQL_EXPECT(res, SQLITE_OK);
|
||||||
|
res = sqlite3_bind_int(stmt_update_faction, 5, turn - f->age);
|
||||||
|
SQL_EXPECT(res, SQLITE_OK);
|
||||||
|
res = sqlite3_bind_int64(stmt_update_faction, 6, f->subscription);
|
||||||
|
SQL_EXPECT(res, SQLITE_OK);
|
||||||
|
res = sqlite3_step(stmt_update_faction);
|
||||||
|
SQL_EXPECT(res, SQLITE_DONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
for (f = factions; f; f = f->next) {
|
||||||
for (f = factions; f; f = f->next) {
|
if (!fval(f, FFL_MARK)) {
|
||||||
if (!fval(f, FFL_MARK)) {
|
log_error("%s (sub=%d, email=%s) has no entry in the database\n", factionname(f), f->subscription, f->email);
|
||||||
log_error("%s (sub=%d, email=%s) has no entry in the database\n", factionname(f), f->subscription, f->email);
|
} else {
|
||||||
} else {
|
freset(f, FFL_MARK);
|
||||||
freset(f, FFL_MARK);
|
}
|
||||||
}
|
}
|
||||||
}
|
return SQLITE_OK;
|
||||||
return SQLITE_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int db_update_scores(sqlite3 * db, bool force)
|
int db_update_scores(sqlite3 * db, bool force)
|
||||||
|
|
Loading…
Reference in New Issue