forked from github/server
- merge with revision 4032 of eressea-1.0
- begin to implement morale
This commit is contained in:
parent
ef883c23e0
commit
0907203821
|
@ -31,7 +31,7 @@ SERVER_SOURCES =
|
|||
kernel.c
|
||||
stdafx.c
|
||||
util.c
|
||||
main.cpp
|
||||
main.c
|
||||
;
|
||||
|
||||
if $(MSPACES) {
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
#include "common/settings.h"
|
||||
#include "common/config.h"
|
||||
#include "stdafx.h"
|
||||
|
||||
#include <eressea/server.c>
|
|
@ -1 +0,0 @@
|
|||
#include <eressea/server.cpp>
|
|
@ -39,6 +39,7 @@
|
|||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalOptions="/MP"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..;."
|
||||
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_DEPRECATE"
|
||||
|
|
|
@ -1109,7 +1109,7 @@ cr_output_region(FILE * F, report_context * ctx, seen_region * sr)
|
|||
if (sr->mode!=see_unit) fprintf(F, "\"%s\";visibility\n", visibility[sr->mode]);
|
||||
|
||||
{
|
||||
faction * owner = region_owner(r);
|
||||
faction * owner = get_region_owner(r);
|
||||
if (owner) {
|
||||
fprintf(F, "%d;owner\n", owner->no);
|
||||
}
|
||||
|
|
|
@ -2958,54 +2958,49 @@ entertain_cmd(unit * u, struct order * ord)
|
|||
entertaining += o->qty;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
||||
|
||||
/**
|
||||
* \return number of working spaces taken by players
|
||||
*/
|
||||
static void
|
||||
expandwork(region * r, request * work_begin, request * work_end)
|
||||
expandwork(region * r, request * work_begin, request * work_end, int maxwork)
|
||||
{
|
||||
int n, earnings;
|
||||
/* n: verbleibende Einnahmen */
|
||||
/* m: maximale Arbeiter */
|
||||
int m = maxworkingpeasants(r);
|
||||
int p_wage = wage(r, NULL, NULL);
|
||||
int verdienst = 0;
|
||||
request *o;
|
||||
int earnings;
|
||||
/* n: verbleibende Einnahmen */
|
||||
/* m: maximale Arbeiter */
|
||||
int jobs = maxwork;
|
||||
int p_wage = wage(r, NULL, NULL);
|
||||
request *o;
|
||||
|
||||
for (o = work_begin; o != work_end; ++o) {
|
||||
unit * u = o->unit;
|
||||
int workers;
|
||||
for (o = work_begin; o != work_end; ++o) {
|
||||
unit * u = o->unit;
|
||||
int workers;
|
||||
|
||||
if (u->number == 0) continue;
|
||||
if (u->number == 0) continue;
|
||||
|
||||
if (m>=working) workers = u->number;
|
||||
else {
|
||||
workers = u->number * m / working;
|
||||
if (rng_int() % working < (u->number * m) % working) workers++;
|
||||
}
|
||||
if (jobs>=working) workers = u->number;
|
||||
else {
|
||||
workers = u->number * jobs / working;
|
||||
if (rng_int() % working < (u->number * jobs) % working) workers++;
|
||||
}
|
||||
|
||||
assert(workers>=0);
|
||||
assert(workers>=0);
|
||||
|
||||
u->n = workers * wage(u->region, u->faction, u->race);
|
||||
u->n = workers * wage(u->region, u->faction, u->race);
|
||||
|
||||
m -= workers;
|
||||
assert(m>=0);
|
||||
jobs -= workers;
|
||||
assert(jobs>=0);
|
||||
|
||||
change_money(u, u->n);
|
||||
working -= o->unit->number;
|
||||
add_income(u, IC_WORK, o->qty, u->n);
|
||||
change_money(u, u->n);
|
||||
working -= o->unit->number;
|
||||
add_income(u, IC_WORK, o->qty, u->n);
|
||||
fset(u, UFL_LONGACTION|UFL_NOTMOVING);
|
||||
}
|
||||
|
||||
n = m * p_wage;
|
||||
|
||||
/* Der Rest wird von den Bauern verdient. n ist das uebriggebliebene
|
||||
* Geld. */
|
||||
|
||||
earnings = MIN(n, rpeasants(r) * p_wage) + verdienst;
|
||||
/* Mehr oder weniger durch Trank "Riesengrass" oder "Faulobstschnaps" */
|
||||
|
||||
rsetmoney(r, rmoney(r) + earnings);
|
||||
if (jobs>rpeasants(r)) {
|
||||
jobs = rpeasants(r);
|
||||
}
|
||||
earnings = jobs * p_wage;
|
||||
rsetmoney(r, rmoney(r) + earnings);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -3044,25 +3039,25 @@ do_work(unit * u, order * ord, request * o)
|
|||
static void
|
||||
expandtax(region * r, request * taxorders)
|
||||
{
|
||||
unit *u;
|
||||
int i;
|
||||
unit *u;
|
||||
int i;
|
||||
|
||||
expandorders(r, taxorders);
|
||||
if (!norders) return;
|
||||
expandorders(r, taxorders);
|
||||
if (!norders) return;
|
||||
|
||||
for (i = 0; i != norders && rmoney(r) > TAXFRACTION; i++) {
|
||||
change_money(oa[i].unit, TAXFRACTION);
|
||||
oa[i].unit->n += TAXFRACTION;
|
||||
rsetmoney(r, rmoney(r) -TAXFRACTION);
|
||||
}
|
||||
free(oa);
|
||||
for (i = 0; i != norders && rmoney(r) > TAXFRACTION; i++) {
|
||||
change_money(oa[i].unit, TAXFRACTION);
|
||||
oa[i].unit->n += TAXFRACTION;
|
||||
rsetmoney(r, rmoney(r) -TAXFRACTION);
|
||||
}
|
||||
free(oa);
|
||||
|
||||
for (u = r->units; u; u = u->next) {
|
||||
if (u->n >= 0) {
|
||||
add_income(u, IC_TAX, u->wants, u->n);
|
||||
fset(u, UFL_LONGACTION|UFL_NOTMOVING);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -3140,7 +3135,42 @@ auto_work(region * r)
|
|||
}
|
||||
}
|
||||
if (nextworker!=workers) {
|
||||
expandwork(r, workers, nextworker);
|
||||
expandwork(r, workers, nextworker, maxworkingpeasants(r));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
peasant_taxes(region * r)
|
||||
{
|
||||
faction * f;
|
||||
unit * u;
|
||||
building * b;
|
||||
int money;
|
||||
int maxsize;
|
||||
|
||||
f = get_region_owner(r);
|
||||
if (f==NULL) return;
|
||||
|
||||
money = rmoney(r);
|
||||
if (money<=0) return;
|
||||
|
||||
b = largestbuilding(r, false);
|
||||
if (b==NULL) return;
|
||||
|
||||
u = buildingowner(r, b);
|
||||
if (u==NULL || u->faction!=f) return;
|
||||
|
||||
maxsize = buildingeffsize(b, false);
|
||||
if (maxsize > r->land->morale) {
|
||||
maxsize = r->land->morale;
|
||||
}
|
||||
|
||||
if (maxsize>0) {
|
||||
int taxmoney = (money * maxsize) / 100;
|
||||
change_money(u, taxmoney);
|
||||
rsetmoney(r, money - taxmoney);
|
||||
ADDMSG(&u->faction->msgs, msg_message("income_tax",
|
||||
"unit region amount", u, r, taxmoney));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3152,7 +3182,8 @@ produce(void)
|
|||
request *taxorders, *sellorders, *stealorders, *buyorders;
|
||||
unit *u;
|
||||
int todo;
|
||||
int autowork = get_param_int(global.parameters, "work.auto", 0);
|
||||
int rule_taxation = get_param_int(global.parameters, "rules.economy.taxation", 0);
|
||||
int rule_autowork = get_param_int(global.parameters, "work.auto", 0);
|
||||
|
||||
/* das sind alles befehle, die 30 tage brauchen, und die in thisorder
|
||||
* stehen! von allen 30-tage befehlen wird einfach der letzte verwendet
|
||||
|
@ -3233,7 +3264,7 @@ produce(void)
|
|||
break;
|
||||
|
||||
case K_WORK:
|
||||
if (!autowork && do_work(u, u->thisorder, nextworker)==0) {
|
||||
if (!rule_autowork && do_work(u, u->thisorder, nextworker)==0) {
|
||||
++nextworker;
|
||||
}
|
||||
break;
|
||||
|
@ -3270,7 +3301,9 @@ produce(void)
|
|||
* letzten Runde berechnen kann, wieviel die Bauern für Unterhaltung
|
||||
* auszugeben bereit sind. */
|
||||
if (entertaining) expandentertainment(r);
|
||||
if (!autowork) expandwork(r, workers, nextworker);
|
||||
if (!rule_autowork) {
|
||||
expandwork(r, workers, nextworker, maxworkingpeasants(r));
|
||||
}
|
||||
if (taxorders) expandtax(r, taxorders);
|
||||
|
||||
/* An erster Stelle Kaufen (expandbuying), die Bauern so Geld bekommen, um
|
||||
|
@ -3294,5 +3327,9 @@ produce(void)
|
|||
assert(rmoney(r) >= 0);
|
||||
assert(rpeasants(r) >= 0);
|
||||
|
||||
if (r->land && rule_taxation==1) {
|
||||
/* new taxation rules, region owners make money based on morale and building */
|
||||
peasant_taxes(r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -187,7 +187,7 @@ get_food(region *r)
|
|||
{
|
||||
unit *u;
|
||||
int peasantfood = rpeasants(r)*10;
|
||||
faction * owner = region_owner(r);
|
||||
faction * owner = get_region_owner(r);
|
||||
|
||||
/* 1. Versorgung von eigenen Einheiten. Das vorhandene Silber
|
||||
* wird zunächst so auf die Einheiten aufgeteilt, dass idealerweise
|
||||
|
|
|
@ -996,7 +996,7 @@ describe(FILE * F, const seen_region * sr, faction * f)
|
|||
}
|
||||
|
||||
{
|
||||
const faction * owner = region_owner(r);
|
||||
const faction * owner = get_region_owner(r);
|
||||
if (owner!=NULL) {
|
||||
bytes = snprintf(bufp, size, " Die Region ist im Besitz von %s.",
|
||||
factionname(owner));
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalOptions="/MP"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..;."
|
||||
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_DEPRECATE"
|
||||
|
|
|
@ -762,8 +762,7 @@ weapon_effskill(troop t, troop enemy, const weapon * w, boolean attacking, boole
|
|||
static const armor_type *
|
||||
select_armor(troop t, boolean shield)
|
||||
{
|
||||
unsigned int type = shield?ATF_SHIELD:0;
|
||||
unit * u = t.fighter->unit;
|
||||
unsigned int type = shield?ATF_SHIELD:0; unit * u = t.fighter->unit;
|
||||
const armor * a = t.fighter->armors;
|
||||
int geschuetzt = 0;
|
||||
|
||||
|
@ -777,16 +776,13 @@ select_armor(troop t, boolean shield)
|
|||
}
|
||||
|
||||
for (;a;a=a->next) {
|
||||
if ((a->atype->flags & ATF_SHIELD)==type) {
|
||||
geschuetzt += a->count;
|
||||
if ((a->atype->flags & ATF_SHIELD)==type) { geschuetzt += a->count;
|
||||
if (geschuetzt > t.index) {
|
||||
/* unser Kandidat wird geschuetzt */
|
||||
return a->atype;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
} return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1628,7 +1628,7 @@ cstring(const char *s)
|
|||
}
|
||||
|
||||
building *
|
||||
largestbuilding (const region * r, boolean img)
|
||||
largestbuilding (const region * r, boolean imaginary)
|
||||
{
|
||||
static const building_type * btype = NULL;
|
||||
building *b, *best = NULL;
|
||||
|
@ -1638,7 +1638,7 @@ largestbuilding (const region * r, boolean img)
|
|||
|
||||
for (b = rbuildings(r); b; b = b->next) {
|
||||
if (b->type!=btype) {
|
||||
if (img) {
|
||||
if (imaginary) {
|
||||
const attrib * a = a_find(b->attribs, &at_icastle);
|
||||
if (!a) continue;
|
||||
if (a->data.v != btype) continue;
|
||||
|
|
|
@ -247,7 +247,7 @@ extern char *cstring_i(char *s);
|
|||
extern const char *unitname(const struct unit * u);
|
||||
extern char * write_unitname(const struct unit * u, char * buffer, size_t size);
|
||||
|
||||
struct building *largestbuilding(const struct region * r, boolean img);
|
||||
struct building *largestbuilding(const struct region * r, boolean imaginary);
|
||||
|
||||
extern int count_all(const struct faction * f);
|
||||
extern int count_migrants (const struct faction * f);
|
||||
|
|
|
@ -198,7 +198,7 @@ static boolean
|
|||
entrance_allowed(const struct unit * u, const struct region * r)
|
||||
{
|
||||
#ifdef REGIONOWNERS
|
||||
faction * owner = region_owner(r);
|
||||
faction * owner = get_region_owner(r);
|
||||
if (owner == NULL || u->faction == owner) return true;
|
||||
if (alliedfaction(r->planep, owner, u->faction, HELP_TRAVEL)) return true;
|
||||
return false;
|
||||
|
|
|
@ -1132,6 +1132,8 @@ terraform_region(region * r, const terrain_type * terrain)
|
|||
int mnr = 0;
|
||||
|
||||
r->land = calloc(1, sizeof(land_region));
|
||||
r->land->morale = MORALE_DEFAULT;
|
||||
r->land->ownership = NULL;
|
||||
region_setname(r, makename());
|
||||
for (d=0;d!=MAXDIRECTIONS;++d) {
|
||||
region * nr = rconnect(r, d);
|
||||
|
@ -1324,24 +1326,21 @@ r_addmessage(struct region * r, const struct faction * viewer, struct message *
|
|||
}
|
||||
|
||||
struct faction *
|
||||
region_owner(const struct region * r)
|
||||
get_region_owner(const struct region * r)
|
||||
{
|
||||
#ifdef REGIONOWNERS
|
||||
return r->owner;
|
||||
#else
|
||||
if (r->land && r->land->ownership) {
|
||||
return r->land->ownership->owner;
|
||||
}
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
region_setowner(struct region * r, struct faction * owner)
|
||||
set_region_owner(struct region * r, struct faction * owner, int turn)
|
||||
{
|
||||
#ifdef REGIONOWNERS
|
||||
r->owner = owner;
|
||||
#else
|
||||
unused(r);
|
||||
unused(owner);
|
||||
#endif
|
||||
if (r->land && r->land->ownership) {
|
||||
r->land->ownership->owner = owner;
|
||||
r->land->ownership->since_turn = turn;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -62,6 +62,13 @@ struct rawmaterial;
|
|||
struct donation;
|
||||
struct item;
|
||||
|
||||
#define MORALE_DEFAULT 2 /* Morale of peasants that have no lord */
|
||||
|
||||
typedef struct region_owner {
|
||||
struct faction * owner;
|
||||
int since_turn;
|
||||
} region_owner;
|
||||
|
||||
typedef struct land_region {
|
||||
char *name;
|
||||
/* TODO: demand kann nach Konvertierung entfernt werden. */
|
||||
|
@ -72,12 +79,14 @@ typedef struct land_region {
|
|||
} * demands;
|
||||
const struct item_type * herbtype;
|
||||
short herbs;
|
||||
unsigned short morale;
|
||||
int trees[3]; /* 0 -> seeds, 1 -> shoots, 2 -> trees */
|
||||
int horses;
|
||||
int peasants;
|
||||
int newpeasants;
|
||||
int money;
|
||||
struct item * items; /* items that can be claimed */
|
||||
struct region_owner * ownership;
|
||||
} land_region;
|
||||
|
||||
typedef struct donation {
|
||||
|
@ -112,9 +121,6 @@ typedef struct region {
|
|||
struct donation * donations;
|
||||
const struct terrain_type * terrain;
|
||||
struct rawmaterial * resources;
|
||||
#ifdef REGIONOWNERS
|
||||
struct faction * owner;
|
||||
#endif
|
||||
#ifdef FAST_CONNECT
|
||||
struct region * connect[MAXDIRECTIONS]; /* use rconnect(r, dir) to access */
|
||||
#endif
|
||||
|
@ -226,8 +232,8 @@ extern const short delta_y[MAXDIRECTIONS];
|
|||
direction_t dir_invert(direction_t dir);
|
||||
int production(const struct region *r);
|
||||
|
||||
void region_setowner(struct region * r, struct faction * owner);
|
||||
struct faction * region_owner(const struct region * r);
|
||||
void set_region_owner(struct region * r, struct faction * owner, int turn);
|
||||
struct faction * get_region_owner(const struct region * r);
|
||||
|
||||
struct region * r_connect(const struct region *, direction_t dir);
|
||||
#ifdef FAST_CONNECT
|
||||
|
|
|
@ -3739,6 +3739,35 @@ sp_analysesong_unit(castorder *co)
|
|||
|
||||
return cast_level;
|
||||
}
|
||||
|
||||
static boolean
|
||||
can_charm(const unit * u, int maxlevel)
|
||||
{
|
||||
const skill_t expskills[] = { SK_ALCHEMY, SK_HERBALISM, SK_MAGIC, SK_SPY, SK_TACTICS, NOSKILL };
|
||||
skill * sv = u->skills;
|
||||
|
||||
if (fval(u, UFL_HERO)) return false;
|
||||
|
||||
for (;sv!=u->skills+u->skill_size;++sv) {
|
||||
int l = 0, h = 5;
|
||||
skill_t sk = sv->id;
|
||||
assert(expskills[h]==NOSKILL);
|
||||
while (l<h) {
|
||||
int m = (l+h)/2;
|
||||
if (sk==expskills[m]) {
|
||||
if (skill_limit(u->faction, sk)!=INT_MAX) {
|
||||
return false;
|
||||
} else if ((int)sv->level>maxlevel) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else if (sk>expskills[m]) l=m+1;
|
||||
else h=m;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/* ------------------------------------------------------------- */
|
||||
/* Name: Charming
|
||||
* Stufe: 13
|
||||
|
@ -3789,7 +3818,7 @@ sp_charmingsong(castorder *co)
|
|||
cmistake(mage, co->order, 45, MSG_MAGIC);
|
||||
}
|
||||
/* niemand mit teurem Talent */
|
||||
if (has_limited_skills(target)) {
|
||||
if (!can_charm(target, cast_level/2)) {
|
||||
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
|
||||
"spellfail_noexpensives", "target", target));
|
||||
return 0;
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalOptions="/MP"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..;."
|
||||
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_DEPRECATE"
|
||||
|
|
|
@ -380,9 +380,9 @@ size_t dlmalloc_usable_size(void*);
|
|||
*/
|
||||
|
||||
#ifndef USE_DL_PREFIX
|
||||
void malloc_stats();
|
||||
void malloc_stats(void);
|
||||
#else
|
||||
void dlmalloc_stats();
|
||||
void dlmalloc_stats(void);
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalOptions="/MP"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=".;common"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||
|
@ -183,19 +184,6 @@
|
|||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\combined\bindings.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PrecompiledHeaderThrough="stdafx.hpp"
|
||||
PrecompiledHeaderFile="$(IntDir)\$(TargetName)_cpp.pch"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\combined\curses.c"
|
||||
>
|
||||
|
@ -208,6 +196,10 @@
|
|||
RelativePath=".\combined\kernel.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\combined\main.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\combined\stdafx.c"
|
||||
>
|
||||
|
@ -221,31 +213,6 @@
|
|||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\combined\stdafx.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UsePrecompiledHeader="1"
|
||||
PrecompiledHeaderThrough="stdafx.hpp"
|
||||
PrecompiledHeaderFile="$(IntDir)\$(TargetName)_cpp.pch"
|
||||
ObjectFile="$(IntDir)\$(InputName)1.obj"
|
||||
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
ObjectFile="$(IntDir)\$(InputName)1.obj"
|
||||
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\combined\util.c"
|
||||
>
|
||||
|
@ -268,10 +235,6 @@
|
|||
RelativePath=".\combined\stdafx.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\combined\stdafx.hpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalOptions="/MP"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..;../common"
|
||||
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_DEPRECATE"
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalOptions="/MP"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..;../common"
|
||||
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_DEPRECATE"
|
||||
|
@ -385,7 +386,7 @@
|
|||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\server.cpp"
|
||||
RelativePath=".\server.c"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalOptions="/MP"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../..;../../common"
|
||||
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_DEPRECATE"
|
||||
|
|
|
@ -63,12 +63,12 @@ region_getterrain(const region * r) {
|
|||
|
||||
static void
|
||||
lua_region_setowner(region * r, faction * f) {
|
||||
region_setowner(r, f);
|
||||
set_region_owner(r, f, turn);
|
||||
}
|
||||
|
||||
static faction *
|
||||
lua_region_getowner(const region * r) {
|
||||
return region_owner(r);
|
||||
return get_region_owner(r);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -98,7 +98,9 @@
|
|||
|
||||
/* lua includes */
|
||||
#ifdef BINDINGS_TOLUA
|
||||
#include <lua.hpp>
|
||||
#include <lua.h>
|
||||
#include <lualib.h>
|
||||
#include <lauxlib.h>
|
||||
#include "tolua/bindings.h"
|
||||
#include "tolua/helpers.h"
|
||||
#include "tolua/bind_unit.h"
|
||||
|
@ -129,19 +131,15 @@
|
|||
|
||||
#include <libxml/encoding.h>
|
||||
|
||||
/* stdc++ includes */
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
/* libc includes */
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
#include <cctype>
|
||||
#include <climits>
|
||||
#include <clocale>
|
||||
#include <cstring>
|
||||
#include <ctime>
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <wctype.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
# include <crtdbg.h>
|
||||
|
@ -150,7 +148,6 @@
|
|||
/**
|
||||
** global variables we are importing from other modules
|
||||
**/
|
||||
extern "C" {
|
||||
extern const char * g_reportdir;
|
||||
extern const char * g_datadir;
|
||||
extern const char * g_basedir;
|
||||
|
@ -163,7 +160,6 @@ extern "C" {
|
|||
extern int loadplane;
|
||||
extern boolean opt_cr_absolute_coords;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
** global variables that we are exporting
|
||||
|
@ -561,7 +557,7 @@ my_lua_error(lua_State * L)
|
|||
|
||||
log_error(("A LUA error occured: %s\n", error));
|
||||
lua_pop(L, 1);
|
||||
if (!g_ignore_errors) std::terminate();
|
||||
if (!g_ignore_errors) abort();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -603,8 +599,8 @@ main(int argc, char *argv[])
|
|||
int i;
|
||||
char * lc_ctype;
|
||||
char * lc_numeric;
|
||||
lua_State * luaState = lua_init();
|
||||
|
||||
rng_init((unsigned long)time(0));
|
||||
setup_signal_handler();
|
||||
|
||||
sqlpatch = true;
|
||||
|
@ -616,7 +612,6 @@ main(int argc, char *argv[])
|
|||
if (lc_ctype) lc_ctype = strdup(lc_ctype);
|
||||
if (lc_numeric) lc_numeric = strdup(lc_numeric);
|
||||
|
||||
lua_State * luaState = lua_init();
|
||||
global.vm_state = luaState;
|
||||
load_inifile("eressea.ini");
|
||||
if (verbosity>=4) {
|
|
@ -104,6 +104,9 @@
|
|||
<param name="rules.combat.turns" value="1"/>
|
||||
<param name="rules.combat.unarmed_bonus" value="0"/>
|
||||
<param name="rules.combat.populationdamage" value="0"/>
|
||||
|
||||
<param name="rules.economy.taxation" value="1"/>
|
||||
|
||||
<param name="rules.give" value="3"/> <!-- only self + peasants -->
|
||||
<param name="rules.stamina" value="0"/> <!-- does not affect hp -->
|
||||
<param name="skill.maxlevel" value="10"/>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<terrains>
|
||||
<!-- defaults: walk="yes" sail="yes" fly="yes" shallow="yes" swim="no" forest="no" sea="no" land="yes" forbidden="no" arctic="no" cavalry="no" -->
|
||||
<terrain name="ocean" size="100" shallow="no" walk="no" swim="yes" land="no" sea="yes" />
|
||||
<terrain name="plain" size="2400" road="50" shallow="no" forest="yes" cavalry="yes" seed="3">
|
||||
<terrain name="ocean" size="0" shallow="no" walk="no" swim="yes" land="no" sea="yes" />
|
||||
<terrain name="plain" size="200" road="50" shallow="no" forest="yes" cavalry="yes" seed="3">
|
||||
<herb name="h0" />
|
||||
<herb name="h1" />
|
||||
<herb name="h2" />
|
||||
|
@ -13,7 +13,7 @@
|
|||
<resource name="stone" chance="0.15" level="1d4" base="5d8" div="2d30+20" />
|
||||
<resource name="laen" chance="0.01" level="1d4" base="1d4" div="2d20+50" />
|
||||
</terrain>
|
||||
<terrain name="swamp" size="800" road="75" seed="2">
|
||||
<terrain name="swamp" size="80" road="75" seed="2">
|
||||
<herb name="h6" />
|
||||
<herb name="h7" />
|
||||
<herb name="h8" />
|
||||
|
@ -21,7 +21,7 @@
|
|||
<resource name="stone" chance="0.02" level="1d4" base="5d8" div="2d30+20" />
|
||||
<resource name="laen" chance="0.02" level="1d4" base="1d4" div="2d20+50" />
|
||||
</terrain>
|
||||
<terrain name="desert" size="800" road="100" cavalry="yes" seed="2">
|
||||
<terrain name="desert" size="80" road="100" cavalry="yes" seed="2">
|
||||
<herb name="h9" />
|
||||
<herb name="h10" />
|
||||
<herb name="h11" />
|
||||
|
@ -29,7 +29,7 @@
|
|||
<resource name="stone" chance="0.25" level="1d4" base="5d8" div="2d30+20" />
|
||||
<resource name="laen" chance="0.025" level="1d4" base="1d4" div="2d20+50" />
|
||||
</terrain>
|
||||
<terrain name="highland" size="1600" road="100" cavalry="yes" seed="2">
|
||||
<terrain name="highland" size="150" road="100" cavalry="yes" seed="2">
|
||||
<herb name="h12" />
|
||||
<herb name="h13" />
|
||||
<herb name="h14" />
|
||||
|
@ -37,7 +37,7 @@
|
|||
<resource name="stone" chance="0.25" level="1d4" base="5d8" div="2d30+20" />
|
||||
<resource name="laen" chance="0.025" level="1d4" base="1d4" div="2d20+50" />
|
||||
</terrain>
|
||||
<terrain name="mountain" size="800" road="250" seed="2">
|
||||
<terrain name="mountain" size="80" road="250" seed="2">
|
||||
<herb name="h15" />
|
||||
<herb name="h16" />
|
||||
<herb name="h17" />
|
||||
|
@ -45,7 +45,7 @@
|
|||
<resource name="stone" chance="1.0" level="1" base="100" div="100" />
|
||||
<resource name="laen" chance="0.05" level="1" base="4" div="100" />
|
||||
</terrain>
|
||||
<terrain name="glacier" size="400" road="250" arctic="yes" seed="2">
|
||||
<terrain name="glacier" size="10" road="250" arctic="yes" seed="2">
|
||||
<herb name="h18" />
|
||||
<herb name="h19" />
|
||||
<herb name="h20" />
|
||||
|
@ -53,7 +53,7 @@
|
|||
<resource name="stone" chance="1.0" level="1" base="2" div="100" />
|
||||
<resource name="laen" chance="0.05" level="1" base="4" div="100" />
|
||||
</terrain>
|
||||
<terrain name="iceberg_sleep" size="100" road="250" arctic="yes">
|
||||
<terrain name="iceberg_sleep" size="10" road="250" arctic="yes">
|
||||
<herb name="h18" />
|
||||
<herb name="h19" />
|
||||
<herb name="h20" />
|
||||
|
@ -61,22 +61,22 @@
|
|||
<resource name="stone" chance="0.9" level="1" base="2" div="100" />
|
||||
<resource name="laen" chance="0.05" level="1" base="4" div="100" />
|
||||
</terrain>
|
||||
<terrain name="iceberg" size="100" arctic="yes">
|
||||
<terrain name="iceberg" size="10" arctic="yes">
|
||||
<herb name="h18" />
|
||||
<herb name="h19" />
|
||||
<herb name="h20" />
|
||||
<resource name="iron" chance="0.9" level="1" base="3" div="50" />
|
||||
<resource name="stone" chance="0.9" level="1" base="2" div="100" />
|
||||
</terrain>
|
||||
<terrain name="firewall" size="100" road="250" land="no" walk="no" sail="no" fly="no" forbidden="yes" />
|
||||
<terrain name="firewall" size="0" land="no" walk="no" sail="no" fly="no" forbidden="yes" />
|
||||
<terrain name="fog" sail="no" land="no" size="0" />
|
||||
<terrain name="thickfog" forbidden="yes" sail="no" walk="no" fly="no" land="no" size="0" />
|
||||
<terrain name="volcano" size="500" road="250" seed="1">
|
||||
<terrain name="volcano" size="30" road="250" seed="1">
|
||||
<resource name="iron" chance="0.5" level="1" base="50" div="50" />
|
||||
<resource name="stone" chance="0.5" level="1" base="100" div="100" />
|
||||
<resource name="laen" chance="0.075" level="1" base="4" div="100" />
|
||||
</terrain>
|
||||
<terrain name="activevolcano" size="500" road="250">
|
||||
<terrain name="activevolcano" size="30" road="250">
|
||||
<resource name="iron" chance="0.5" level="1" base="50" div="50" />
|
||||
<resource name="stone" chance="0.5" level="1" base="100" div="100" />
|
||||
<resource name="laen" chance="0.075" level="1" base="4" div="100" />
|
||||
|
|
|
@ -1,3 +1,43 @@
|
|||
local function email_multis()
|
||||
local multis = {
|
||||
["u9bx"]="Tachlaar@web.de",
|
||||
["7Lwz"]="Tachlaar@web.de",
|
||||
["ddr"]="Tachlaar@web.de",
|
||||
["myrd"]="Tachlaar@web.de",
|
||||
["2a4v"]="Samurai_krieger@web.de",
|
||||
["7oiw"]="Samurai_krieger@web.de",
|
||||
["brud"]="Samurai_krieger@web.de",
|
||||
["bzcm"]="Samurai_krieger@web.de",
|
||||
["crow"]="Samurai_krieger@web.de",
|
||||
["dino"]="Samurai_krieger@web.de",
|
||||
["fynd"]="Samurai_krieger@web.de",
|
||||
["Leer"]="Samurai_krieger@web.de",
|
||||
["moos"]="Samurai_krieger@web.de",
|
||||
["ogcL"]="Samurai_krieger@web.de",
|
||||
["paty"]="Samurai_krieger@web.de",
|
||||
["rd"]="Samurai_krieger@web.de",
|
||||
["seee"]="Samurai_krieger@web.de",
|
||||
["szem"]="Samurai_krieger@web.de",
|
||||
["uebL"]="Samurai_krieger@web.de",
|
||||
["uvzp"]="Samurai_krieger@web.de",
|
||||
["wzLp"]="Samurai_krieger@web.de",
|
||||
["ziwe"]="Samurai_krieger@web.de"
|
||||
}
|
||||
local k
|
||||
local v
|
||||
for k, info in pairs(multis) do
|
||||
local f = get_faction(atoi36(k))
|
||||
if f~=nil then
|
||||
print("- marking " .. tostring(f) .. " as a multi-player.")
|
||||
f.email = v
|
||||
f.password = ""
|
||||
f.info = info
|
||||
else
|
||||
print("- could not find faction " .. k)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function kill_multis()
|
||||
local multis = {
|
||||
["u9bx"]="Doppelspiel-Partei von Tachlaar@web.de",
|
||||
|
@ -39,4 +79,4 @@ local function kill_multis()
|
|||
end
|
||||
|
||||
print("killing multi-players")
|
||||
kill_multis()
|
||||
email_multis()
|
||||
|
|
Loading…
Reference in New Issue