forked from github/server
Merge branch 'master' of github.com:eressea/server
This commit is contained in:
commit
7bebea4f67
2
critbit
2
critbit
|
@ -1 +1 @@
|
||||||
Subproject commit 2a7af5e2347217ea4efcf7fb3f0bc9c2681d1a17
|
Subproject commit c267f95e4170c40809effa61af418fbe63d43e48
|
|
@ -12,5 +12,6 @@ return {
|
||||||
require('eressea.tunnels'),
|
require('eressea.tunnels'),
|
||||||
require('eressea.ponnuki'),
|
require('eressea.ponnuki'),
|
||||||
require('eressea.astral'),
|
require('eressea.astral'),
|
||||||
|
require('eressea.locales'),
|
||||||
require('eressea.ents')
|
require('eressea.ents')
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
local function change_locales(localechange)
|
||||||
|
for loc, flist in pairs(localechange) do
|
||||||
|
for index, name in pairs(flist) do
|
||||||
|
f = get_faction(atoi36(name))
|
||||||
|
if f ~= nil and f.locale ~= loc then
|
||||||
|
print("LOCALECHANGE ", f, f.locale, loc)
|
||||||
|
f.locale = loc
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local pkg = {}
|
||||||
|
|
||||||
|
function pkg.update()
|
||||||
|
local localechange = { de = { 'ii' } }
|
||||||
|
change_locales(localechange)
|
||||||
|
end
|
||||||
|
|
||||||
|
return pkg
|
|
@ -45,6 +45,7 @@ function test_flags()
|
||||||
eressea.write_game("test.dat")
|
eressea.write_game("test.dat")
|
||||||
eressea.free_game()
|
eressea.free_game()
|
||||||
eressea.read_game("test.dat")
|
eressea.read_game("test.dat")
|
||||||
|
os.remove('test.dat')
|
||||||
f = get_faction(no)
|
f = get_faction(no)
|
||||||
assert_equal(flags, f.flags)
|
assert_equal(flags, f.flags)
|
||||||
end
|
end
|
||||||
|
|
|
@ -105,6 +105,7 @@ function test_process_quit()
|
||||||
eressea.write_game('test.dat')
|
eressea.write_game('test.dat')
|
||||||
eressea.free_game()
|
eressea.free_game()
|
||||||
eressea.read_game('test.dat')
|
eressea.read_game('test.dat')
|
||||||
|
os.remove('test.dat')
|
||||||
assert_equal(nil, _G.get_faction(fno))
|
assert_equal(nil, _G.get_faction(fno))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -26,18 +26,6 @@ function callbacks(rules, name, ...)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function change_locales(localechange)
|
|
||||||
for loc, flist in pairs(localechange) do
|
|
||||||
for index, name in pairs(flist) do
|
|
||||||
f = get_faction(atoi36(name))
|
|
||||||
if f ~= nil and f.locale ~= loc then
|
|
||||||
print("LOCALECHANGE ", f, f.locale, loc)
|
|
||||||
f.locale = loc
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function dbupdate()
|
local function dbupdate()
|
||||||
update_scores()
|
update_scores()
|
||||||
dbname = config.dbname or 'eressea.db'
|
dbname = config.dbname or 'eressea.db'
|
||||||
|
@ -153,9 +141,6 @@ function process(rules, orders)
|
||||||
process_orders()
|
process_orders()
|
||||||
callbacks(rules, 'update')
|
callbacks(rules, 'update')
|
||||||
|
|
||||||
local localechange = { de = { 'ii' } }
|
|
||||||
change_locales(localechange)
|
|
||||||
|
|
||||||
write_files(config.locales)
|
write_files(config.locales)
|
||||||
|
|
||||||
file = '' .. get_turn() .. '.dat'
|
file = '' .. get_turn() .. '.dat'
|
||||||
|
|
|
@ -77,7 +77,6 @@ set (ERESSEA_SRC
|
||||||
keyword.c
|
keyword.c
|
||||||
skill.c
|
skill.c
|
||||||
json.c
|
json.c
|
||||||
creation.c
|
|
||||||
creport.c
|
creport.c
|
||||||
economy.c
|
economy.c
|
||||||
give.c
|
give.c
|
||||||
|
|
|
@ -1,71 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (c) 1998-2014, Enno Rehling <enno@eressea.de>
|
|
||||||
Katja Zedel <katze@felidae.kn-bremen.de
|
|
||||||
Christian Schlittchen <corwin@amber.kn-bremen.de>
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
**/
|
|
||||||
|
|
||||||
#include <platform.h>
|
|
||||||
#include <kernel/config.h>
|
|
||||||
#include "creation.h"
|
|
||||||
#include "monster.h"
|
|
||||||
#include "alchemy.h"
|
|
||||||
|
|
||||||
/* kernel includes */
|
|
||||||
#include <kernel/build.h>
|
|
||||||
#include <kernel/faction.h>
|
|
||||||
#include <kernel/item.h>
|
|
||||||
#include <kernel/plane.h>
|
|
||||||
#include <kernel/race.h>
|
|
||||||
#include <kernel/region.h>
|
|
||||||
#include <kernel/save.h>
|
|
||||||
#include <kernel/ship.h>
|
|
||||||
#include <kernel/terrain.h>
|
|
||||||
#include <kernel/unit.h>
|
|
||||||
|
|
||||||
/* util includes */
|
|
||||||
#include <util/goodies.h>
|
|
||||||
#include <util/lists.h>
|
|
||||||
|
|
||||||
/* libc includes */
|
|
||||||
#include <assert.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <float.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
faction *createmonsters(int no)
|
|
||||||
{
|
|
||||||
faction *f = findfaction(no);
|
|
||||||
|
|
||||||
if (f) {
|
|
||||||
puts("* Fehler! Die Monster Partei gibt es schon.");
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
f = (faction *) calloc(1, sizeof(faction));
|
|
||||||
f->no = no;
|
|
||||||
/* alles ist auf null gesetzt, ausser dem folgenden. achtung - partei
|
|
||||||
* no 0 muss keine orders einreichen! */
|
|
||||||
|
|
||||||
f->email = _strdup("monsters@eressea.de");
|
|
||||||
f->name = _strdup("Monster");
|
|
||||||
f->alive = 1;
|
|
||||||
f->options = (char)(1 << O_REPORT);
|
|
||||||
addlist(&factions, f);
|
|
||||||
fhash(f);
|
|
||||||
return f;
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (c) 1998-2010, Enno Rehling <enno@eressea.de>
|
|
||||||
Katja Zedel <katze@felidae.kn-bremen.de
|
|
||||||
Christian Schlittchen <corwin@amber.kn-bremen.de>
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
**/
|
|
||||||
|
|
||||||
#ifndef H_GC_CREATION
|
|
||||||
#define H_GC_CREATION
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct faction *createmonsters(int no);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
|
@ -35,12 +35,14 @@ static void test_export_no_regions(CuTest * tc) {
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
stream out = { 0 };
|
stream out = { 0 };
|
||||||
int err;
|
int err;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
mstream_init(&out);
|
mstream_init(&out);
|
||||||
err = json_export(&out, EXPORT_REGIONS);
|
err = json_export(&out, EXPORT_REGIONS);
|
||||||
CuAssertIntEquals(tc, 0, err);
|
CuAssertIntEquals(tc, 0, err);
|
||||||
out.api->rewind(out.handle);
|
out.api->rewind(out.handle);
|
||||||
out.api->read(out.handle, buf, sizeof(buf));
|
len = out.api->read(out.handle, buf, sizeof(buf));
|
||||||
|
buf[len] = '\0';
|
||||||
CuAssertStrEquals(tc, "{}", strip(buf));
|
CuAssertStrEquals(tc, "{}", strip(buf));
|
||||||
mstream_done(&out);
|
mstream_done(&out);
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,6 +68,7 @@ faction *factions;
|
||||||
*/
|
*/
|
||||||
void free_faction(faction * f)
|
void free_faction(faction * f)
|
||||||
{
|
{
|
||||||
|
funhash(f);
|
||||||
if (f->msgs)
|
if (f->msgs)
|
||||||
free_messagelist(f->msgs);
|
free_messagelist(f->msgs);
|
||||||
while (f->battles) {
|
while (f->battles) {
|
||||||
|
@ -113,9 +114,12 @@ void funhash(faction * f)
|
||||||
{
|
{
|
||||||
int index = f->no % FMAXHASH;
|
int index = f->no % FMAXHASH;
|
||||||
faction **fp = factionhash + index;
|
faction **fp = factionhash + index;
|
||||||
while (*fp && (*fp) != f)
|
while (*fp && (*fp) != f) {
|
||||||
fp = &(*fp)->nexthash;
|
fp = &(*fp)->nexthash;
|
||||||
|
}
|
||||||
|
if (*fp == f) {
|
||||||
*fp = f->nexthash;
|
*fp = f->nexthash;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static faction *ffindhash(int no)
|
static faction *ffindhash(int no)
|
||||||
|
@ -139,44 +143,24 @@ void set_show_item(faction * f, const struct item_type *itype)
|
||||||
a->data.v = (void *)itype;
|
a->data.v = (void *)itype;
|
||||||
}
|
}
|
||||||
|
|
||||||
faction *get_monsters(void) {
|
|
||||||
faction *f;
|
|
||||||
|
|
||||||
for (f = factions; f; f = f->next) {
|
|
||||||
if ((f->flags & FFL_NPC) && !(f->flags & FFL_DEFENDER)) {
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
faction *get_or_create_monsters(void)
|
faction *get_or_create_monsters(void)
|
||||||
{
|
{
|
||||||
faction *f = get_monsters();
|
faction *f = findfaction(666);
|
||||||
if (!f) {
|
if (!f) {
|
||||||
/* shit! */
|
const race *rc = rc_get_or_create("dragon");
|
||||||
f = findfaction(666);
|
|
||||||
}
|
|
||||||
if (!f) {
|
|
||||||
const race *rc = rc_find("dragon");
|
|
||||||
|
|
||||||
const char *email = get_param(global.parameters, "monster.email");
|
const char *email = get_param(global.parameters, "monster.email");
|
||||||
if (email) {
|
f = addfaction(email ? email : "noreply@eressea.de", NULL, rc, NULL, 0);
|
||||||
f = addfaction(email, NULL, rc, NULL, 0);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
f = addfaction("noreply@eressea.de", NULL, rc, NULL, 0);
|
|
||||||
}
|
|
||||||
renumber_faction(f, 666);
|
renumber_faction(f, 666);
|
||||||
faction_setname(f, "Monster");
|
faction_setname(f, "Monster");
|
||||||
f->options = 0;
|
|
||||||
}
|
|
||||||
if (f) {
|
|
||||||
fset(f, FFL_NPC | FFL_NOIDLEOUT);
|
fset(f, FFL_NPC | FFL_NOIDLEOUT);
|
||||||
}
|
}
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
faction *get_monsters(void) {
|
||||||
|
return get_or_create_monsters();
|
||||||
|
}
|
||||||
|
|
||||||
const unit *random_unit_in_faction(const faction * f)
|
const unit *random_unit_in_faction(const faction * f)
|
||||||
{
|
{
|
||||||
unit *u;
|
unit *u;
|
||||||
|
|
|
@ -54,7 +54,7 @@ extern "C" {
|
||||||
|
|
||||||
#define FFL_SAVEMASK (FFL_DEFENDER|FFL_NEWID|FFL_GM|FFL_NPC|FFL_DBENTRY|FFL_NOIDLEOUT)
|
#define FFL_SAVEMASK (FFL_DEFENDER|FFL_NEWID|FFL_GM|FFL_NPC|FFL_DBENTRY|FFL_NOIDLEOUT)
|
||||||
|
|
||||||
#define is_monsters(f) ((f)->flags&FFL_NPC)
|
#define is_monsters(f) (f && fval(f, FFL_NPC) && f==get_monsters())
|
||||||
|
|
||||||
typedef struct faction {
|
typedef struct faction {
|
||||||
struct faction *next;
|
struct faction *next;
|
||||||
|
|
|
@ -91,20 +91,18 @@ static void test_addfaction(CuTest *tc) {
|
||||||
CuAssertIntEquals(tc, M_GRAY, f->magiegebiet);
|
CuAssertIntEquals(tc, M_GRAY, f->magiegebiet);
|
||||||
CuAssertIntEquals(tc, turn, f->lastorders);
|
CuAssertIntEquals(tc, turn, f->lastorders);
|
||||||
CuAssertPtrEquals(tc, f, findfaction(f->no));
|
CuAssertPtrEquals(tc, f, findfaction(f->no));
|
||||||
|
test_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_get_monsters(CuTest *tc) {
|
static void test_get_monsters(CuTest *tc) {
|
||||||
faction *f;
|
faction *f;
|
||||||
CuAssertPtrEquals(tc, NULL, get_monsters());
|
|
||||||
f = get_or_create_monsters();
|
free_gamedata();
|
||||||
|
CuAssertPtrNotNull(tc, (f = get_monsters()));
|
||||||
CuAssertPtrEquals(tc, f, get_monsters());
|
CuAssertPtrEquals(tc, f, get_monsters());
|
||||||
CuAssertIntEquals(tc, 666, f->no);
|
CuAssertIntEquals(tc, 666, f->no);
|
||||||
CuAssertStrEquals(tc, "Monster", f->name);
|
CuAssertStrEquals(tc, "Monster", f->name);
|
||||||
free_gamedata();
|
test_cleanup();
|
||||||
CuAssertPtrEquals(tc, NULL, get_monsters());
|
|
||||||
f = get_or_create_monsters();
|
|
||||||
CuAssertPtrEquals(tc, f, get_monsters());
|
|
||||||
CuAssertIntEquals(tc, 666, f->no);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CuSuite *get_faction_suite(void)
|
CuSuite *get_faction_suite(void)
|
||||||
|
|
|
@ -50,6 +50,7 @@ static void test_group_readwrite(CuTest * tc)
|
||||||
CuAssertPtrEquals(tc, 0, f->groups->allies->next);
|
CuAssertPtrEquals(tc, 0, f->groups->allies->next);
|
||||||
CuAssertPtrEquals(tc, f, f->groups->allies->faction);
|
CuAssertPtrEquals(tc, f, f->groups->allies->faction);
|
||||||
CuAssertIntEquals(tc, HELP_GIVE, f->groups->allies->status);
|
CuAssertIntEquals(tc, HELP_GIVE, f->groups->allies->status);
|
||||||
|
remove("test.dat");
|
||||||
test_cleanup();
|
test_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -733,7 +733,7 @@ void set_level(unit * u, skill_t sk, int value)
|
||||||
{
|
{
|
||||||
skill *sv = u->skills;
|
skill *sv = u->skills;
|
||||||
|
|
||||||
assert(sk != SK_MAGIC || !u->faction || is_monsters(u->faction) || u->number == 1);
|
assert(sk != SK_MAGIC || !u->faction || u->number == 1 || is_monsters(u->faction));
|
||||||
if (!skill_enabled(sk))
|
if (!skill_enabled(sk))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -268,7 +268,7 @@ int main(int argc, char **argv)
|
||||||
bind_monsters(L);
|
bind_monsters(L);
|
||||||
err = eressea_run(L, luafile);
|
err = eressea_run(L, luafile);
|
||||||
if (err) {
|
if (err) {
|
||||||
log_error("server execution failed with code %d\n", err);
|
log_error("script %s failed with code %d\n", luafile, err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#ifdef MSPACES
|
#ifdef MSPACES
|
||||||
|
|
|
@ -2337,14 +2337,13 @@ static void eval_int36(struct opstack **stack, const void *userdata)
|
||||||
|
|
||||||
static void log_orders(const struct message *msg)
|
static void log_orders(const struct message *msg)
|
||||||
{
|
{
|
||||||
faction *f = get_monsters();
|
|
||||||
char buffer[4096];
|
char buffer[4096];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i != msg->type->nparameters; ++i) {
|
for (i = 0; i != msg->type->nparameters; ++i) {
|
||||||
if (msg->type->types[i]->copy == &var_copy_order) {
|
if (msg->type->types[i]->copy == &var_copy_order) {
|
||||||
const char *section = nr_section(msg);
|
const char *section = nr_section(msg);
|
||||||
nr_render(msg, f ? f->locale : default_locale, buffer, sizeof(buffer), f);
|
nr_render(msg, default_locale, buffer, sizeof(buffer), NULL);
|
||||||
log_debug("MESSAGE [%s]: %s\n", section, buffer);
|
log_debug("MESSAGE [%s]: %s\n", section, buffer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue