Merge branch 'master' of github.com:eressea/server

This commit is contained in:
Enno Rehling 2014-07-03 05:15:47 -07:00
commit ccbcf14458
11 changed files with 128 additions and 30 deletions

10
configure vendored
View File

@ -1,12 +1,6 @@
#!/bin/sh #!/bin/sh
git submodule update --init git submodule update --init
MACHINE=`uname -m`
[ -z "$CC" ] && [ ! -z `which gcc` ] && CC="gcc"
[ -z "$CC" ] && [ ! -z `which tcc` ] && CC="tcc"
[ -z "$CC" ] && [ ! -z `which cc` ] && CC="cc"
[ -z "$JOBS" ] && JOBS=$(nproc)
BIN_DIR="build-$MACHINE-$CC-Debug"
DISTCC=`which distcc` DISTCC=`which distcc`
if [ ! -z "$DISTCC" ] ; then if [ ! -z "$DISTCC" ] ; then
JOBS=`distcc -j` JOBS=`distcc -j`
@ -19,8 +13,6 @@ fi
fi fi
echo "Building with $CC and $JOBS jobs" echo "Building with $CC and $JOBS jobs"
mkdir -p $BIN_DIR CC="$CC" s/cmake-init
cd $BIN_DIR
CC="$CC" ../s/cmake-init
make -j$JOBS make -j$JOBS
make test make test

View File

@ -31,4 +31,4 @@ fi
cd $ROOT/$BIN_DIR cd $ROOT/$BIN_DIR
make $MAKEOPTS && make test make $MAKEOPTS && make test
cd - cd $OLDPWD

View File

@ -44,4 +44,4 @@ cmake .. \
-DCMAKE_INCLUDE_PATH=$INCLUDE_PATH \ -DCMAKE_INCLUDE_PATH=$INCLUDE_PATH \
-DCMAKE_PREFIX_PATH=$PREFIX_PATH \ -DCMAKE_PREFIX_PATH=$PREFIX_PATH \
-DCMAKE_INSTALL_PREFIX=$HOME/eressea $* -DCMAKE_INSTALL_PREFIX=$HOME/eressea $*
cd - cd $OLDPWD

View File

@ -16,4 +16,4 @@ BIN_DIR="build-$MACHINE-$CC-Debug"
cd $ROOT/$BIN_DIR cd $ROOT/$BIN_DIR
make install make install
cd - cd $OLDPWD

View File

@ -18,4 +18,4 @@ fi
$ROOT/$BIN_DIR/eressea/test_eressea $ROOT/$BIN_DIR/eressea/test_eressea
cd $ROOT cd $ROOT
$ROOT/$BIN_DIR/eressea/eressea -v0 scripts/runtests.lua $ROOT/$BIN_DIR/eressea/eressea -v0 scripts/runtests.lua
cd - cd $OLDWPD

View File

@ -36,8 +36,9 @@ int config_parse(const char *json)
int line; int line;
char buffer[10]; char buffer[10];
const char *xp = json, *lp, *ep = cJSON_GetErrorPtr(); const char *xp = json, *lp, *ep = cJSON_GetErrorPtr();
for (line=0,lp=xp;xp && xp<ep;++line,lp=xp+1) { for (line=1,lp=xp;xp && xp<ep;++line,lp=xp+1) {
xp = strchr(lp, '\n'); xp = strchr(lp, '\n');
if (xp>=ep) break;
} }
xp = (ep > json + 10) ? ep - 10 : json; xp = (ep > json + 10) ? ep - 10 : json;
strncpy(buffer, xp, sizeof(buffer)); strncpy(buffer, xp, sizeof(buffer));

View File

@ -1170,7 +1170,10 @@ param_t findparam(const char *s, const struct locale * lang)
const void * match; const void * match;
void **tokens = get_translations(lang, UT_PARAMS); void **tokens = get_translations(lang, UT_PARAMS);
critbit_tree *cb = (critbit_tree *)*tokens; critbit_tree *cb = (critbit_tree *)*tokens;
if (cb_find_prefix(cb, str, strlen(str), &match, 1, 0)) { if (!cb) {
log_error_n("no parameters defined in locale %s", locale_name(lang));
}
else if (cb_find_prefix(cb, str, strlen(str), &match, 1, 0)) {
cb_get_kv(match, &i, sizeof(int)); cb_get_kv(match, &i, sizeof(int));
result = (param_t)i; result = (param_t)i;
} }

View File

@ -345,6 +345,35 @@ static void json_buildings(cJSON *json) {
} }
} }
static void json_spells(cJSON *json) {
cJSON *child;
if (json->type != cJSON_Object) {
log_error_n("spells is not a json object: %d", json->type);
return;
}
for (child = json->child; child; child = child->next) {
if (child->type == cJSON_Object) {
spell *sp;
cJSON * item = cJSON_GetObjectItem(child, "index");
sp = create_spell(child->string, item ? item->valueint : 0);
for (item = child->child; item; item = item->next) {
if (strcmp(item->string, "index") == 0) {
continue;
}
else if (strcmp(item->string, "cast") == 0) {
sp->cast = (spell_f)get_function(item->valuestring);
}
else if (strcmp(item->string, "fumble") == 0) {
sp->fumble = (fumble_f)get_function(item->valuestring);
}
else if (strcmp(item->string, "syntax") == 0) {
sp->syntax = _strdup(item->valuestring);
}
}
}
}
}
static void json_items(cJSON *json) { static void json_items(cJSON *json) {
cJSON *child; cJSON *child;
if (json->type!=cJSON_Object) { if (json->type!=cJSON_Object) {
@ -560,10 +589,13 @@ void json_config(cJSON *json) {
else if (strcmp(child->string, "skills")==0) { else if (strcmp(child->string, "skills")==0) {
json_skills(child); json_skills(child);
} }
else if (strcmp(child->string, "buildings")==0) { else if (strcmp(child->string, "buildings") == 0) {
json_buildings(child); json_buildings(child);
} }
else if (strcmp(child->string, "terrains")==0) { else if (strcmp(child->string, "spells") == 0) {
json_spells(child);
}
else if (strcmp(child->string, "terrains") == 0) {
json_terrains(child); json_terrains(child);
} else { } else {
log_error_n("config contains unknown attribute %s", child->string); log_error_n("config contains unknown attribute %s", child->string);

View File

@ -8,6 +8,7 @@
#include "keyword.h" #include "keyword.h"
#include "race.h" #include "race.h"
#include "ship.h" #include "ship.h"
#include "spell.h"
#include "terrain.h" #include "terrain.h"
#include "util/language.h" #include "util/language.h"
#include <CuTest.h> #include <CuTest.h>
@ -177,6 +178,26 @@ static void test_castles(CuTest *tc) {
CuAssertPtrEquals(tc, 0, bt->construction->improvement->improvement); CuAssertPtrEquals(tc, 0, bt->construction->improvement->improvement);
} }
static void test_spells(CuTest * tc)
{
const char * data = "{\"spells\": { \"fireball\" : { \"syntax\" : \"u+\" } } }";
cJSON *json = cJSON_Parse(data);
const spell *sp;
test_cleanup();
CuAssertPtrNotNull(tc, json);
CuAssertPtrEquals(tc, 0, find_spell("fireball"));
json_config(json);
sp = find_spell("fireball");
CuAssertPtrNotNull(tc, sp);
CuAssertStrEquals(tc, "u+", sp->syntax);
test_cleanup();
CuAssertPtrEquals(tc, 0, find_spell("fireball"));
}
static void test_buildings(CuTest * tc) static void test_buildings(CuTest * tc)
{ {
const char * data = "{\"buildings\": { \"house\" : { " const char * data = "{\"buildings\": { \"house\" : { "
@ -331,6 +352,7 @@ CuSuite *get_jsonconf_suite(void)
SUITE_ADD_TEST(suite, test_terrains); SUITE_ADD_TEST(suite, test_terrains);
SUITE_ADD_TEST(suite, test_races); SUITE_ADD_TEST(suite, test_races);
SUITE_ADD_TEST(suite, test_strings); SUITE_ADD_TEST(suite, test_strings);
SUITE_ADD_TEST(suite, test_spells);
SUITE_ADD_TEST(suite, test_flags); SUITE_ADD_TEST(suite, test_flags);
return suite; return suite;
} }

View File

@ -7,3 +7,4 @@ require "tests.ships"
require "tests.study" require "tests.study"
require "tests.movement" require "tests.movement"
require "tests.castles" require "tests.castles"
require "tests.spells"

47
tests/spells.lua Normal file
View File

@ -0,0 +1,47 @@
require "lunit"
module("tests.spells", package.seeall, lunit.testcase)
function setup()
eressea.game.reset()
eressea.settings.set("nmr.removenewbie", "0")
eressea.settings.set("nmr.timeout", "0")
conf = [[{
"races": {
"human" : {}
},
"terrains" : {
"plain": { "flags" : [ "land", "walk", "sail" ] }
},
"spells" : {
"resist_magic" : {
"index" : 97,
"parameters" : "u+"
}
},
"keywords" : {
"de" : {
"cast" : "ZAUBERE"
}
},
"strings" : {
"de" : {
"harbour" : "Hafen"
}
}
}]]
eressea.config.reset()
assert(eressea.config.parse(conf)==0)
end
function test_antimagic_visibility()
local r = region.create(0, 0, "plain")
local f1 = faction.create("test@example.com", "human", "de")
local mage = unit.create(f1, r, 1)
local target = unit.create(f1, r, 1)
mage:set_skill("magic", 10)
mage:add_spell("resist_magic")
mage:add_order("ZAUBERE Antimagie " .. target.id)
process_orders()
end