forked from github/server
* bugfix transfermen: reports testlesen!
* bugfix migration: crash fehlende nachbarn * bugfix migration: division by zero * bugfix migration: nullpointer * bugfix gm tell plane: strdup() vergessen
This commit is contained in:
parent
b910647eab
commit
e7c9e10b98
|
@ -675,7 +675,7 @@ cr_output_unit(FILE * F, const region * r,
|
||||||
fprintf(F, "%d %d;%s\n", get_skill(u, sk), esk,
|
fprintf(F, "%d %d;%s\n", get_skill(u, sk), esk,
|
||||||
add_translation(skillname(sk, NULL), skillname(sk, f->locale)));
|
add_translation(skillname(sk, NULL), skillname(sk, f->locale)));
|
||||||
#else
|
#else
|
||||||
fprintf(F, "%d %d;%s\n", level_days(get_level(u, sk)), esk,
|
fprintf(F, "%d %d;%s\n", u->number*level_days(get_level(u, sk)), esk,
|
||||||
add_translation(skillname(sk, NULL), skillname(sk, f->locale)));
|
add_translation(skillname(sk, NULL), skillname(sk, f->locale)));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -442,22 +442,22 @@ calculate_emigration(region *r)
|
||||||
region *rc = rconnect(r,i);
|
region *rc = rconnect(r,i);
|
||||||
int w;
|
int w;
|
||||||
|
|
||||||
if(rterrain(rc) == T_OCEAN) {
|
if (rc ==NULL || rterrain(rc) == T_OCEAN) {
|
||||||
w = 0;
|
w = 0;
|
||||||
} else {
|
} else {
|
||||||
w = rpeasants(rc) - maxworkingpeasants(rc);
|
w = rpeasants(rc) - maxworkingpeasants(rc);
|
||||||
}
|
|
||||||
|
|
||||||
if(rterrain(rc) == T_VOLCANO || rterrain(rc) == T_VOLCANO_SMOKING) {
|
if(rterrain(rc) == T_VOLCANO || rterrain(rc) == T_VOLCANO_SMOKING) {
|
||||||
w = w/10;
|
w = w/10;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
weight[i] = w;
|
weight[i] = w;
|
||||||
weightall += w;
|
weightall += w;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i != MAXDIRECTIONS; i++) {
|
if (weightall!=0) for (i = 0; i != MAXDIRECTIONS; i++) {
|
||||||
region *rc = rconnect(r,i);
|
region *rc = rconnect(r,i);
|
||||||
int wandering_peasants = (overpopulation * weight[i])/weightall;
|
int wandering_peasants = (overpopulation * weight[i])/weightall;
|
||||||
|
if (wandering_peasants==0 || rc==NULL) continue;
|
||||||
|
|
||||||
r->land->newpeasants -= wandering_peasants;
|
r->land->newpeasants -= wandering_peasants;
|
||||||
rc->land->newpeasants += wandering_peasants;
|
rc->land->newpeasants += wandering_peasants;
|
||||||
|
@ -550,7 +550,10 @@ peasants(region * r)
|
||||||
* den Bauern genug für 11 Bauern pro Ebene ohne Wald. Der Wald
|
* den Bauern genug für 11 Bauern pro Ebene ohne Wald. Der Wald
|
||||||
* breitet sich nicht in Gebiete aus, die bebaut werden. */
|
* breitet sich nicht in Gebiete aus, die bebaut werden. */
|
||||||
|
|
||||||
int peasants, money, n, i, dead, satiated;
|
int peasants, n, i;
|
||||||
|
#if PEASANTS_DO_NOT_STARVE == 0
|
||||||
|
int dead, satiated, money;
|
||||||
|
#endif
|
||||||
attrib * a;
|
attrib * a;
|
||||||
|
|
||||||
/* Bauern vermehren sich */
|
/* Bauern vermehren sich */
|
||||||
|
|
|
@ -493,103 +493,13 @@ u_geteffstealth(const struct unit * u)
|
||||||
return (a?a->data.i:-1);
|
return (a?a->data.i:-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if SKILLPOINTS
|
|
||||||
int
|
|
||||||
change_skill(unit * u, skill_t id, int byvalue)
|
|
||||||
{
|
|
||||||
skill *i = u->skills;
|
|
||||||
int wounds = 0;
|
|
||||||
|
|
||||||
if (id == SK_AUSDAUER) {
|
|
||||||
wounds = unit_max_hp(u)*u->number - u->hp;
|
|
||||||
}
|
|
||||||
for (; i != u->skills + u->skill_size; ++i)
|
|
||||||
if (i->id == id) {
|
|
||||||
i->value = max(0, i->value + byvalue);
|
|
||||||
if (id == SK_AUSDAUER) {
|
|
||||||
u->hp = unit_max_hp(u)*u->number - wounds;
|
|
||||||
}
|
|
||||||
return i->value;
|
|
||||||
}
|
|
||||||
|
|
||||||
set_skill(u, id, byvalue);
|
|
||||||
|
|
||||||
if (id == SK_AUSDAUER) {
|
|
||||||
u->hp = unit_max_hp(u)*u->number - wounds;
|
|
||||||
}
|
|
||||||
return byvalue;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
change_skill_transfermen(unit * u, skill_t id, int byvalue)
|
|
||||||
{
|
|
||||||
skill * sv = u->skills;
|
|
||||||
|
|
||||||
while (sv != u->skills + u->skill_size) {
|
|
||||||
if (sv->id == id) {
|
|
||||||
sv->value = max(0, sv->value + byvalue);
|
|
||||||
return sv->value;
|
|
||||||
}
|
|
||||||
++sv;
|
|
||||||
}
|
|
||||||
|
|
||||||
set_skill(u, id, byvalue);
|
|
||||||
|
|
||||||
return byvalue;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
get_skill(const unit * u, skill_t id)
|
|
||||||
{
|
|
||||||
skill *i = u->skills;
|
|
||||||
|
|
||||||
for (; i != u->skills + u->skill_size; ++i)
|
|
||||||
if (i->id == id)
|
|
||||||
return i->value;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
set_skill(unit * u, skill_t id, int value)
|
|
||||||
{
|
|
||||||
skill *i = u->skills;
|
|
||||||
|
|
||||||
assert(value>=0);
|
|
||||||
for (; i != u->skills + u->skill_size; ++i)
|
|
||||||
if (i->id == id) {
|
|
||||||
if (value)
|
|
||||||
i->value = value;
|
|
||||||
else {
|
|
||||||
*i = *(u->skills + u->skill_size - 1);
|
|
||||||
--u->skill_size;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!value)
|
|
||||||
return;
|
|
||||||
++u->skill_size;
|
|
||||||
u->skills = realloc(u->skills, u->skill_size * sizeof(skill));
|
|
||||||
(u->skills + u->skill_size - 1)->value = value;
|
|
||||||
(u->skills + u->skill_size - 1)->id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if SKILLPOINTS
|
|
||||||
extern int level(int days);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
int
|
||||||
get_level(const unit * u, skill_t id)
|
get_level(const unit * u, skill_t id)
|
||||||
{
|
{
|
||||||
skill * sv = u->skills;
|
skill * sv = u->skills;
|
||||||
while (sv != u->skills + u->skill_size) {
|
while (sv != u->skills + u->skill_size) {
|
||||||
if (sv->id == id) {
|
if (sv->id == id) {
|
||||||
#if SKILLPOINTS
|
|
||||||
return level(sv->value/u->number);
|
|
||||||
#else
|
|
||||||
return sv->level;
|
return sv->level;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
++sv;
|
++sv;
|
||||||
}
|
}
|
||||||
|
@ -599,9 +509,6 @@ get_level(const unit * u, skill_t id)
|
||||||
void
|
void
|
||||||
set_level(unit * u, skill_t id, int value)
|
set_level(unit * u, skill_t id, int value)
|
||||||
{
|
{
|
||||||
#if SKILLPOINTS
|
|
||||||
set_skill(u, id, level_days(value)*u->number);
|
|
||||||
#else
|
|
||||||
skill * sv = u->skills;
|
skill * sv = u->skills;
|
||||||
while (sv != u->skills + u->skill_size) {
|
while (sv != u->skills + u->skill_size) {
|
||||||
if (sv->id == id) {
|
if (sv->id == id) {
|
||||||
|
@ -611,7 +518,6 @@ set_level(unit * u, skill_t id, int value)
|
||||||
++sv;
|
++sv;
|
||||||
}
|
}
|
||||||
sk_set(add_skill(u, id), value);
|
sk_set(add_skill(u, id), value);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static attrib_type at_leftship = {
|
static attrib_type at_leftship = {
|
||||||
|
@ -756,9 +662,6 @@ move_unit(unit * u, region * r, unit ** ulist)
|
||||||
void
|
void
|
||||||
transfermen(unit * u, unit * u2, int n)
|
transfermen(unit * u, unit * u2, int n)
|
||||||
{
|
{
|
||||||
#if SKILLPOINTS
|
|
||||||
int skills[MAXSKILLS];
|
|
||||||
#endif
|
|
||||||
const attrib * a;
|
const attrib * a;
|
||||||
int hp = u->hp;
|
int hp = u->hp;
|
||||||
region * r = u->region;
|
region * r = u->region;
|
||||||
|
@ -768,62 +671,36 @@ transfermen(unit * u, unit * u2, int n)
|
||||||
/* "hat attackiert"-status wird übergeben */
|
/* "hat attackiert"-status wird übergeben */
|
||||||
|
|
||||||
if (u2) {
|
if (u2) {
|
||||||
#if SKILLPOINTS
|
|
||||||
skill_t sk;
|
|
||||||
if (u->skills) {
|
|
||||||
for (sk = 0; sk < MAXSKILLS; ++sk) {
|
|
||||||
skills[sk] = get_skill(u, sk);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
char has_skill[MAXSKILLS];
|
|
||||||
skill *sv, *sn;
|
skill *sv, *sn;
|
||||||
skill_t i;
|
skill_t sk;
|
||||||
assert(u2->number+n>0);
|
assert(u2->number+n>0);
|
||||||
|
|
||||||
for (i=0; i<MAXSKILLS; ++i) {
|
for (sk=0; sk!=MAXSKILLS; ++sk) {
|
||||||
has_skill[i]=(char)0;
|
double dlevel = 0.0;
|
||||||
}
|
int weeks, level;
|
||||||
for (sv=u->skills;sv!=u->skills+u->skill_size;++sv) {
|
|
||||||
has_skill[sv->id]=(char)1;
|
|
||||||
}
|
|
||||||
for (sv=u2->skills;sv!=u2->skills+u2->skill_size;++sv) {
|
|
||||||
has_skill[sv->id]=(char)1;
|
|
||||||
}
|
|
||||||
for(i=0; i<MAXSKILLS; ++i) if(has_skill[i] == (char)1) {
|
|
||||||
int level;
|
|
||||||
int weeks;
|
|
||||||
|
|
||||||
sv = get_skill(u, i);
|
sv = get_skill(u, sk);
|
||||||
sn = get_skill(u2, i);
|
sn = get_skill(u2, sk);
|
||||||
|
|
||||||
if(sn==NULL) sn = add_skill(u2, i);
|
if (sv==NULL && sn==NULL) continue;
|
||||||
|
if (sv && sv->level) dlevel += (sv->level + 1 - sv->weeks/(sv->level*2.0+1)) * n;
|
||||||
|
else dlevel += 0.5 * n;
|
||||||
|
if (sn && sn->level) dlevel += (sn->level + 1 - sn->weeks/(sn->level*2.0+1)) * u2->number;
|
||||||
|
else dlevel += 0.5 * u2->number;
|
||||||
|
|
||||||
if(sv==NULL) {
|
dlevel = dlevel / (n + u2->number);
|
||||||
if(sn->level > 0) {
|
level = (int)dlevel;
|
||||||
level = (sn->level*u2->number)/(u2->number+n);
|
weeks = (int)((level*2.0+1) * (1 - dlevel + level)+0.9999999);
|
||||||
weeks = (sn->weeks*u2->number*(level+1)/(sn->level+1)+u2->number+n-1)/(u2->number+n);
|
|
||||||
|
if (level) {
|
||||||
|
if (sn==NULL) sn = add_skill(u2, sk);
|
||||||
sn->level = (unsigned char)level;
|
sn->level = (unsigned char)level;
|
||||||
sn->weeks = (unsigned char)weeks;
|
sn->weeks = (unsigned char)weeks;
|
||||||
} else {
|
assert(sn->level>=0 && sn->weeks>0 && sn->weeks<=sn->level*2+1);
|
||||||
weeks = (sn->weeks*u2->number+u2->number+n-1)/(u2->number+n);
|
} else if (sn) {
|
||||||
sn->weeks = (unsigned char)weeks;
|
sk_set(sn, 0);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(sn->level != sv->level) {
|
|
||||||
level = (sv->level*n+sn->level*u2->number)/(u2->number+n);
|
|
||||||
weeks = (sv->weeks*n*(level+1)/(sv->level+1)+sn->weeks*u2->number*(level+1)/
|
|
||||||
(sn->level+1)+u2->number+n-1)/(u2->number+n);
|
|
||||||
sn->level = (unsigned char)level;
|
|
||||||
sn->weeks = (unsigned char)weeks;
|
|
||||||
} else {
|
|
||||||
weeks = (sv->weeks*n+sn->weeks*u2->number+u2->number+n-1)/(u2->number+n);
|
|
||||||
sn->weeks = (unsigned char)weeks;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert(sn->level>=0 && sn->weeks>=0 && sn->weeks<=sn->level*2+1);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
a = a_find(u->attribs, &at_effect);
|
a = a_find(u->attribs, &at_effect);
|
||||||
while (a) {
|
while (a) {
|
||||||
effect_data * olde = (effect_data*)a->data.v;
|
effect_data * olde = (effect_data*)a->data.v;
|
||||||
|
@ -837,19 +714,9 @@ transfermen(unit * u, unit * u2, int n)
|
||||||
}
|
}
|
||||||
scale_number(u, u->number - n);
|
scale_number(u, u->number - n);
|
||||||
if (u2) {
|
if (u2) {
|
||||||
#if SKILLPOINTS
|
|
||||||
skill_t sk;
|
|
||||||
#endif
|
|
||||||
set_number(u2, u2->number + n);
|
set_number(u2, u2->number + n);
|
||||||
hp -= u->hp;
|
hp -= u->hp;
|
||||||
u2->hp += hp;
|
u2->hp += hp;
|
||||||
#if SKILLPOINTS
|
|
||||||
if (u->skills) {
|
|
||||||
for (sk = 0; sk < MAXSKILLS; ++sk) {
|
|
||||||
change_skill_transfermen(u2, sk, skills[sk] - get_skill(u, sk));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/* TODO: Das ist schnarchlahm! und gehört ncht hierhin */
|
/* TODO: Das ist schnarchlahm! und gehört ncht hierhin */
|
||||||
a = a_find(u2->attribs, &at_effect);
|
a = a_find(u2->attribs, &at_effect);
|
||||||
while (a) {
|
while (a) {
|
||||||
|
@ -951,8 +818,6 @@ set_number(unit * u, int count)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !SKILLPOINTS
|
|
||||||
|
|
||||||
boolean
|
boolean
|
||||||
learn_skill(unit * u, skill_t sk, double chance)
|
learn_skill(unit * u, skill_t sk, double chance)
|
||||||
{
|
{
|
||||||
|
@ -974,33 +839,6 @@ learn_skill(unit * u, skill_t sk, double chance)
|
||||||
sk_set(sv, 1);
|
sk_set(sv, 1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
int coins, heads = 0;
|
|
||||||
int level = 0;
|
|
||||||
int weeks = 0;
|
|
||||||
skill * sv;
|
|
||||||
assert (chance <= 1.0);
|
|
||||||
sv = get_skill(u, sk);
|
|
||||||
if (sv) {
|
|
||||||
level = sv->level;
|
|
||||||
weeks = sv->learning;
|
|
||||||
}
|
|
||||||
coins = level * 2;
|
|
||||||
heads = coins - weeks;
|
|
||||||
while (heads>0 && coins--) {
|
|
||||||
if (rand()%2==0) --heads;
|
|
||||||
if (heads>coins) break;
|
|
||||||
}
|
|
||||||
if (heads) {
|
|
||||||
++weeks;
|
|
||||||
} else {
|
|
||||||
++level;
|
|
||||||
weeks = 0;
|
|
||||||
}
|
|
||||||
set_skill(u, sk, level, weeks, false);
|
|
||||||
return heads==0;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
skill *
|
skill *
|
||||||
add_skill(unit * u, skill_t id)
|
add_skill(unit * u, skill_t id)
|
||||||
|
@ -1046,8 +884,6 @@ has_skill(const unit * u, skill_t sk)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
item_modification(const unit *u, skill_t sk, int val)
|
item_modification(const unit *u, skill_t sk, int val)
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
/* kernel includes */
|
/* kernel includes */
|
||||||
#include <building.h>
|
#include <building.h>
|
||||||
|
#include <reports.h>
|
||||||
#include <faction.h>
|
#include <faction.h>
|
||||||
#include <item.h>
|
#include <item.h>
|
||||||
#include <message.h>
|
#include <message.h>
|
||||||
|
@ -242,7 +243,7 @@ gm_messageplane(const char * str, void * data, const char * cmd)
|
||||||
{
|
{
|
||||||
unit * u = (unit*)data;
|
unit * u = (unit*)data;
|
||||||
const struct plane * p = rplane(u->region);
|
const struct plane * p = rplane(u->region);
|
||||||
const char * msg = igetstrtoken(str);
|
const char * zmsg = igetstrtoken(str);
|
||||||
if (p==NULL) {
|
if (p==NULL) {
|
||||||
mistake(u, cmd, "In diese Ebene kann keine Nachricht gesandt werden.\n", 0);
|
mistake(u, cmd, "In diese Ebene kann keine Nachricht gesandt werden.\n", 0);
|
||||||
} else {
|
} else {
|
||||||
|
@ -252,6 +253,7 @@ gm_messageplane(const char * str, void * data, const char * cmd)
|
||||||
mistake(u, cmd, "Unzureichende Rechte für diesen Befehl.\n", 0);
|
mistake(u, cmd, "Unzureichende Rechte für diesen Befehl.\n", 0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
message * msg = msg_message("msg_event", "string", strdup(zmsg));
|
||||||
faction * f;
|
faction * f;
|
||||||
region * r;
|
region * r;
|
||||||
for (f=factions;f;f=f->next) {
|
for (f=factions;f;f=f->next) {
|
||||||
|
@ -263,9 +265,10 @@ gm_messageplane(const char * str, void * data, const char * cmd)
|
||||||
for (u=r->units;u;u=u->next) if (!fval(u->faction, FL_DH)) {
|
for (u=r->units;u;u=u->next) if (!fval(u->faction, FL_DH)) {
|
||||||
f = u->faction;
|
f = u->faction;
|
||||||
fset(f, FL_DH);
|
fset(f, FL_DH);
|
||||||
add_message(&f->msgs, msg_message("msg_event", "string", msg));
|
add_message(&f->msgs, msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
msg_release(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -604,6 +607,7 @@ gm_addquest(const char * email, const char * name, int radius, unsigned int flag
|
||||||
plane * p;
|
plane * p;
|
||||||
attrib * a;
|
attrib * a;
|
||||||
unit * u;
|
unit * u;
|
||||||
|
watcher * w = calloc(sizeof(watcher), 1);
|
||||||
region * center;
|
region * center;
|
||||||
boolean invalid = false;
|
boolean invalid = false;
|
||||||
int minx, miny, maxx, maxy, cx, cy;
|
int minx, miny, maxx, maxy, cx, cy;
|
||||||
|
@ -665,6 +669,12 @@ gm_addquest(const char * email, const char * name, int radius, unsigned int flag
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* watcher: */
|
||||||
|
w->faction = f;
|
||||||
|
w->mode = see_unit;
|
||||||
|
w->next = p->watchers;
|
||||||
|
p->watchers = w;
|
||||||
|
|
||||||
/* generic permissions */
|
/* generic permissions */
|
||||||
a = a_add(&f->attribs, a_new(&at_permissions));
|
a = a_add(&f->attribs, a_new(&at_permissions));
|
||||||
|
|
||||||
|
|
|
@ -1863,6 +1863,15 @@ fix_timeouts(void)
|
||||||
|
|
||||||
#include <modules/gmcmd.h>
|
#include <modules/gmcmd.h>
|
||||||
|
|
||||||
|
static int
|
||||||
|
regatta_quest(void)
|
||||||
|
{
|
||||||
|
plane * p = gm_addplane(20, PFL_NORECRUITS, "Regatta");
|
||||||
|
region * center = findregion(p->minx+(p->maxx-p->minx)/2, p->miny+(p->maxy-p->miny)/2);
|
||||||
|
gm_addfaction("gregorjochmann@gmx.de", p, center);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
secondfaction(faction * pf)
|
secondfaction(faction * pf)
|
||||||
{
|
{
|
||||||
|
@ -1901,6 +1910,7 @@ update_gmquests(void)
|
||||||
if (!a) a_add((attrib**)&permissions->data.v, make_atgmcreate(oldpotiontype[p]->itype));
|
if (!a) a_add((attrib**)&permissions->data.v, make_atgmcreate(oldpotiontype[p]->itype));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
do_once("rq01", regatta_quest());
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -1939,7 +1949,7 @@ create_xe(void)
|
||||||
PFL_NOGIVE | PFL_NOATTACK | PFL_NOTERRAIN | PFL_NOMAGIC |
|
PFL_NOGIVE | PFL_NOATTACK | PFL_NOTERRAIN | PFL_NOMAGIC |
|
||||||
PFL_NOSTEALTH | PFL_NOTEACH | PFL_NOBUILD | PFL_NOFEED,
|
PFL_NOSTEALTH | PFL_NOTEACH | PFL_NOBUILD | PFL_NOFEED,
|
||||||
"Xontormia-Expreß");
|
"Xontormia-Expreß");
|
||||||
region * center = findregion((p->maxx-p->minx)/2, (p->maxy-p->miny)/2);
|
region * center = findregion(p->minx+(p->maxx-p->minx)/2, p->miny+(p->maxy-p->miny)/2);
|
||||||
faction * f = gm_addfaction("abeer@gmx.de", p, center);
|
faction * f = gm_addfaction("abeer@gmx.de", p, center);
|
||||||
|
|
||||||
log_printf("Xe-Partei %s\n", factionname(f));
|
log_printf("Xe-Partei %s\n", factionname(f));
|
||||||
|
|
Loading…
Reference in New Issue