forked from github/server
Merge pull request #52 from badgerman/master
better separation between monsters and NPCs
This commit is contained in:
commit
09be8414c6
2
critbit
2
critbit
|
@ -1 +1 @@
|
|||
Subproject commit 2a7af5e2347217ea4efcf7fb3f0bc9c2681d1a17
|
||||
Subproject commit c267f95e4170c40809effa61af418fbe63d43e48
|
|
@ -12,5 +12,6 @@ return {
|
|||
require('eressea.tunnels'),
|
||||
require('eressea.ponnuki'),
|
||||
require('eressea.astral'),
|
||||
require('eressea.locales'),
|
||||
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.free_game()
|
||||
eressea.read_game("test.dat")
|
||||
os.remove('test.dat')
|
||||
f = get_faction(no)
|
||||
assert_equal(flags, f.flags)
|
||||
end
|
||||
|
|
|
@ -105,6 +105,7 @@ function test_process_quit()
|
|||
eressea.write_game('test.dat')
|
||||
eressea.free_game()
|
||||
eressea.read_game('test.dat')
|
||||
os.remove('test.dat')
|
||||
assert_equal(nil, _G.get_faction(fno))
|
||||
end
|
||||
|
||||
|
|
|
@ -26,18 +26,6 @@ function callbacks(rules, name, ...)
|
|||
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()
|
||||
update_scores()
|
||||
dbname = config.dbname or 'eressea.db'
|
||||
|
@ -153,9 +141,6 @@ function process(rules, orders)
|
|||
process_orders()
|
||||
callbacks(rules, 'update')
|
||||
|
||||
local localechange = { de = { 'ii' } }
|
||||
change_locales(localechange)
|
||||
|
||||
write_files(config.locales)
|
||||
|
||||
file = '' .. get_turn() .. '.dat'
|
||||
|
|
|
@ -77,7 +77,6 @@ set (ERESSEA_SRC
|
|||
keyword.c
|
||||
skill.c
|
||||
json.c
|
||||
creation.c
|
||||
creport.c
|
||||
economy.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
|
|
@ -68,6 +68,7 @@ faction *factions;
|
|||
*/
|
||||
void free_faction(faction * f)
|
||||
{
|
||||
funhash(f);
|
||||
if (f->msgs)
|
||||
free_messagelist(f->msgs);
|
||||
while (f->battles) {
|
||||
|
@ -113,9 +114,12 @@ void funhash(faction * f)
|
|||
{
|
||||
int index = f->no % FMAXHASH;
|
||||
faction **fp = factionhash + index;
|
||||
while (*fp && (*fp) != f)
|
||||
while (*fp && (*fp) != f) {
|
||||
fp = &(*fp)->nexthash;
|
||||
*fp = f->nexthash;
|
||||
}
|
||||
if (*fp == f) {
|
||||
*fp = f->nexthash;
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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 *f = get_monsters();
|
||||
faction *f = findfaction(666);
|
||||
if (!f) {
|
||||
/* shit! */
|
||||
f = findfaction(666);
|
||||
}
|
||||
if (!f) {
|
||||
const race *rc = rc_find("dragon");
|
||||
|
||||
const race *rc = rc_get_or_create("dragon");
|
||||
const char *email = get_param(global.parameters, "monster.email");
|
||||
if (email) {
|
||||
f = addfaction(email, NULL, rc, NULL, 0);
|
||||
}
|
||||
else {
|
||||
f = addfaction("noreply@eressea.de", NULL, rc, NULL, 0);
|
||||
}
|
||||
f = addfaction(email ? email : "noreply@eressea.de", NULL, rc, NULL, 0);
|
||||
renumber_faction(f, 666);
|
||||
faction_setname(f, "Monster");
|
||||
f->options = 0;
|
||||
}
|
||||
if (f) {
|
||||
fset(f, FFL_NPC | FFL_NOIDLEOUT);
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
||||
faction *get_monsters(void) {
|
||||
return get_or_create_monsters();
|
||||
}
|
||||
|
||||
const unit *random_unit_in_faction(const faction * f)
|
||||
{
|
||||
unit *u;
|
||||
|
|
|
@ -54,7 +54,7 @@ extern "C" {
|
|||
|
||||
#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 {
|
||||
struct faction *next;
|
||||
|
|
|
@ -91,20 +91,18 @@ static void test_addfaction(CuTest *tc) {
|
|||
CuAssertIntEquals(tc, M_GRAY, f->magiegebiet);
|
||||
CuAssertIntEquals(tc, turn, f->lastorders);
|
||||
CuAssertPtrEquals(tc, f, findfaction(f->no));
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
static void test_get_monsters(CuTest *tc) {
|
||||
faction *f;
|
||||
CuAssertPtrEquals(tc, NULL, get_monsters());
|
||||
f = get_or_create_monsters();
|
||||
|
||||
free_gamedata();
|
||||
CuAssertPtrNotNull(tc, (f = get_monsters()));
|
||||
CuAssertPtrEquals(tc, f, get_monsters());
|
||||
CuAssertIntEquals(tc, 666, f->no);
|
||||
CuAssertStrEquals(tc, "Monster", f->name);
|
||||
free_gamedata();
|
||||
CuAssertPtrEquals(tc, NULL, get_monsters());
|
||||
f = get_or_create_monsters();
|
||||
CuAssertPtrEquals(tc, f, get_monsters());
|
||||
CuAssertIntEquals(tc, 666, f->no);
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
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, f, f->groups->allies->faction);
|
||||
CuAssertIntEquals(tc, HELP_GIVE, f->groups->allies->status);
|
||||
remove("test.dat");
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
|
|
|
@ -733,7 +733,7 @@ void set_level(unit * u, skill_t sk, int value)
|
|||
{
|
||||
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))
|
||||
return;
|
||||
|
||||
|
|
|
@ -268,7 +268,7 @@ int main(int argc, char **argv)
|
|||
bind_monsters(L);
|
||||
err = eressea_run(L, luafile);
|
||||
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;
|
||||
}
|
||||
#ifdef MSPACES
|
||||
|
|
|
@ -2337,14 +2337,13 @@ static void eval_int36(struct opstack **stack, const void *userdata)
|
|||
|
||||
static void log_orders(const struct message *msg)
|
||||
{
|
||||
faction *f = get_monsters();
|
||||
char buffer[4096];
|
||||
int i;
|
||||
|
||||
for (i = 0; i != msg->type->nparameters; ++i) {
|
||||
if (msg->type->types[i]->copy == &var_copy_order) {
|
||||
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);
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue