forked from github/server
New way of storing attrib-lists should make it faster to find a specific one and jump over entire classes of attribs.
This commit is contained in:
parent
2ab8cc7564
commit
3fb3e7b201
31 changed files with 281 additions and 496 deletions
|
@ -48,7 +48,9 @@ attrib *
|
||||||
find_key(attrib * alist, int key)
|
find_key(attrib * alist, int key)
|
||||||
{
|
{
|
||||||
attrib * a = a_find(alist, &at_key);
|
attrib * a = a_find(alist, &at_key);
|
||||||
while (a && a->data.i != key) a = a->nexttype;
|
while (a && a->type==&at_key && a->data.i != key) {
|
||||||
|
a = a->next;
|
||||||
|
}
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,16 +69,14 @@ attrib_type at_variable = {
|
||||||
const char *
|
const char *
|
||||||
get_variable(attrib *a, const char *key)
|
get_variable(attrib *a, const char *key)
|
||||||
{
|
{
|
||||||
attrib *ap;
|
attrib *ap = a_find(a, &at_variable);;
|
||||||
|
|
||||||
for(ap = a_find(a, &at_variable); ap; ap=ap->nexttype) {
|
while (ap && ap->type==&at_variable) {
|
||||||
if(strcmp(key, ((variable *)ap->data.v)->key) == 0) {
|
variable * var = (variable *)ap->data.v;
|
||||||
break;
|
if (strcmp(key, var->key) == 0) {
|
||||||
|
return var->value;
|
||||||
}
|
}
|
||||||
}
|
ap = ap->next;
|
||||||
|
|
||||||
if(ap) {
|
|
||||||
return ((variable *)ap->data.v)->value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -87,42 +85,41 @@ get_variable(attrib *a, const char *key)
|
||||||
void
|
void
|
||||||
set_variable(attrib **app, const char *key, const char *value)
|
set_variable(attrib **app, const char *key, const char *value)
|
||||||
{
|
{
|
||||||
attrib *ap;
|
attrib *ap = a_find(*app, &at_variable);
|
||||||
|
|
||||||
assert(value);
|
assert(value);
|
||||||
|
|
||||||
for(ap = a_find(*app, &at_variable); ap; ap=ap->nexttype) {
|
while (ap && ap->type==&at_variable) {
|
||||||
if(strcmp(key, ((variable *)ap->data.v)->key) == 0) {
|
variable * var = (variable *)ap->data.v;
|
||||||
break;
|
if (strcmp(key, var->key) == 0) {
|
||||||
|
free(var->value);
|
||||||
|
var->value = strdup(value);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
ap = ap->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ap) {
|
|
||||||
free(((variable *)ap->data.v)->value);
|
|
||||||
((variable *)ap->data.v)->value = strdup(value);
|
|
||||||
} else {
|
|
||||||
ap = a_add(app, a_new(&at_variable));
|
ap = a_add(app, a_new(&at_variable));
|
||||||
((variable *)ap->data.v)->key = strdup(key);
|
((variable *)ap->data.v)->key = strdup(key);
|
||||||
((variable *)ap->data.v)->value = strdup(value);
|
((variable *)ap->data.v)->value = strdup(value);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
delete_variable(attrib **app, const char *key)
|
delete_variable(attrib **app, const char *key)
|
||||||
{
|
{
|
||||||
attrib *ap;
|
attrib *ap = a_find(*app, &at_variable);
|
||||||
|
|
||||||
for(ap = a_find(*app, &at_variable); ap; ap=ap->nexttype) {
|
while (ap && ap->type==&at_variable) {
|
||||||
if(strcmp(key, ((variable *)ap->data.v)->key) == 0) {
|
variable * var = (variable *)ap->data.v;
|
||||||
|
if (strcmp(key, var->key) == 0) {
|
||||||
|
free(var->key);
|
||||||
|
free(var->value);
|
||||||
|
a_remove(app, ap);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
ap = ap->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ap) {
|
|
||||||
free(((variable *)ap->data.v)->key);
|
|
||||||
free(((variable *)ap->data.v)->value);
|
|
||||||
a_remove(app, ap);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -1202,12 +1202,12 @@ report_computer(const char * filename, report_context * ctx)
|
||||||
|
|
||||||
cr_find_address(F, f, ctx->addresses);
|
cr_find_address(F, f, ctx->addresses);
|
||||||
a = a_find(f->attribs, &at_reportspell);
|
a = a_find(f->attribs, &at_reportspell);
|
||||||
while (a) {
|
while (a && a->type==&at_reportspell) {
|
||||||
spell *sp = (spell *)a->data.v;
|
spell *sp = (spell *)a->data.v;
|
||||||
cr_reportspell(F, sp, f->locale);
|
cr_reportspell(F, sp, f->locale);
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
for (a=a_find(f->attribs, &at_showitem);a;a=a->nexttype) {
|
for (a=a_find(f->attribs, &at_showitem);a && a->type==&at_showitem;a=a->next) {
|
||||||
const potion_type * ptype = resource2potion(((const item_type*)a->data.v)->rtype);
|
const potion_type * ptype = resource2potion(((const item_type*)a->data.v)->rtype);
|
||||||
requirement * m;
|
requirement * m;
|
||||||
const char * ch, * description = NULL;
|
const char * ch, * description = NULL;
|
||||||
|
@ -1396,7 +1396,7 @@ report_computer(const char * filename, report_context * ctx)
|
||||||
boolean seeunits = false, seeships = false;
|
boolean seeunits = false, seeships = false;
|
||||||
const attrib * ru;
|
const attrib * ru;
|
||||||
/* show units pulled through region */
|
/* show units pulled through region */
|
||||||
for (ru = a_find(r->attribs, &at_travelunit); ru; ru = ru->nexttype) {
|
for (ru = a_find(r->attribs, &at_travelunit); ru && ru->type==&at_travelunit; ru = ru->next) {
|
||||||
unit * u = (unit*)ru->data.v;
|
unit * u = (unit*)ru->data.v;
|
||||||
if (cansee_durchgezogen(f, r, u, 0) && r!=u->region) {
|
if (cansee_durchgezogen(f, r, u, 0) && r!=u->region) {
|
||||||
if (!u->ship || !fval(u, UFL_OWNER)) continue;
|
if (!u->ship || !fval(u, UFL_OWNER)) continue;
|
||||||
|
@ -1405,7 +1405,7 @@ report_computer(const char * filename, report_context * ctx)
|
||||||
fprintf(F, "\"%s\"\n", shipname(u->ship));
|
fprintf(F, "\"%s\"\n", shipname(u->ship));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (ru = a_find(r->attribs, &at_travelunit); ru; ru = ru->nexttype) {
|
for (ru = a_find(r->attribs, &at_travelunit); ru && ru->type==&at_travelunit; ru = ru->next) {
|
||||||
unit * u = (unit*)ru->data.v;
|
unit * u = (unit*)ru->data.v;
|
||||||
if (cansee_durchgezogen(f, r, u, 0) && r!=u->region) {
|
if (cansee_durchgezogen(f, r, u, 0) && r!=u->region) {
|
||||||
if (u->ship) continue;
|
if (u->ship) continue;
|
||||||
|
|
|
@ -2474,7 +2474,7 @@ reshow(unit * u, struct order * ord, const char * s, param_t p)
|
||||||
sp = get_spellfromtoken(u, s, u->faction->locale);
|
sp = get_spellfromtoken(u, s, u->faction->locale);
|
||||||
if (sp!=NULL && has_spell(u, sp)) {
|
if (sp!=NULL && has_spell(u, sp)) {
|
||||||
attrib *a = a_find(u->faction->attribs, &at_seenspell);
|
attrib *a = a_find(u->faction->attribs, &at_seenspell);
|
||||||
while (a!=NULL && a->data.v!=sp) a = a->nexttype;
|
while (a!=NULL && a->type==&at_seenspell && a->data.v!=sp) a = a->next;
|
||||||
if (a!=NULL) a_remove(&u->faction->attribs, a);
|
if (a!=NULL) a_remove(&u->faction->attribs, a);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2688,16 +2688,16 @@ instant_orders(void)
|
||||||
for (f = factions; f; f = f->next) {
|
for (f = factions; f; f = f->next) {
|
||||||
attrib *a;
|
attrib *a;
|
||||||
a = a_find(f->attribs, &at_showitem);
|
a = a_find(f->attribs, &at_showitem);
|
||||||
while(a!=NULL) {
|
while (a!=NULL && a->type==&at_showitem) {
|
||||||
const item_type * itype = (const item_type *)a->data.v;
|
const item_type * itype = (const item_type *)a->data.v;
|
||||||
const potion_type * ptype = resource2potion(itype->rtype);
|
const potion_type * ptype = resource2potion(itype->rtype);
|
||||||
|
attrib * an = a->next;
|
||||||
if (ptype!=NULL) {
|
if (ptype!=NULL) {
|
||||||
attrib * n = a->nexttype;
|
|
||||||
/* potions werden separat behandelt */
|
/* potions werden separat behandelt */
|
||||||
display_item(f, NULL, (const item_type *)a->data.v);
|
display_item(f, NULL, (const item_type *)a->data.v);
|
||||||
a_remove(&f->attribs, a);
|
a_remove(&f->attribs, a);
|
||||||
a = n;
|
}
|
||||||
} else a = a->nexttype;
|
a = an;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -982,7 +982,7 @@ describe(FILE * F, const region * r, int partial, faction * f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Spezielle Richtungen */
|
/* Spezielle Richtungen */
|
||||||
for (a = a_find(r->attribs, &at_direction);a;a = a->nexttype) {
|
for (a = a_find(r->attribs, &at_direction);a && a->type==&at_direction;a=a->next) {
|
||||||
spec_direction * d = (spec_direction *)(a->data.v);
|
spec_direction * d = (spec_direction *)(a->data.v);
|
||||||
strcpy(bufp++, " ");
|
strcpy(bufp++, " ");
|
||||||
bufp += strxcpy(bufp, d->desc);
|
bufp += strxcpy(bufp, d->desc);
|
||||||
|
@ -1155,7 +1155,7 @@ durchreisende(FILE * F, const region * r, const faction * f)
|
||||||
/* Wieviele sind aufzulisten? Für die Grammatik. */
|
/* Wieviele sind aufzulisten? Für die Grammatik. */
|
||||||
|
|
||||||
if (fval(r, RF_TRAVELUNIT)) {
|
if (fval(r, RF_TRAVELUNIT)) {
|
||||||
for (ru = a_find(r->attribs, &at_travelunit); ru; ru = ru->nexttype) {
|
for (ru = a_find(r->attribs, &at_travelunit); ru && ru->type!=&at_travelunit; ru = ru->next) {
|
||||||
unit * u = (unit*)ru->data.v;
|
unit * u = (unit*)ru->data.v;
|
||||||
if (cansee_durchgezogen(f, r, u, 0) > 0 && r!=u->region) {
|
if (cansee_durchgezogen(f, r, u, 0) > 0 && r!=u->region) {
|
||||||
if (u->ship && !fval(u, UFL_OWNER))
|
if (u->ship && !fval(u, UFL_OWNER))
|
||||||
|
@ -1173,7 +1173,7 @@ durchreisende(FILE * F, const region * r, const faction * f)
|
||||||
buf[0] = 0;
|
buf[0] = 0;
|
||||||
rnl(F);
|
rnl(F);
|
||||||
|
|
||||||
for (ru = a_find(r->attribs, &at_travelunit); ru; ru = ru->nexttype) {
|
for (ru = a_find(r->attribs, &at_travelunit); ru && ru->type==&at_travelunit; ru = ru->next) {
|
||||||
unit * u = (unit*)ru->data.v;
|
unit * u = (unit*)ru->data.v;
|
||||||
if (cansee_durchgezogen(f, r, u, 0) > 0 && r!=u->region) {
|
if (cansee_durchgezogen(f, r, u, 0) > 0 && r!=u->region) {
|
||||||
if (u->ship && !fval(u, UFL_OWNER))
|
if (u->ship && !fval(u, UFL_OWNER))
|
||||||
|
@ -1778,7 +1778,7 @@ report_plaintext(const char * filename, report_context * ctx)
|
||||||
#ifdef KARMA_MODULE
|
#ifdef KARMA_MODULE
|
||||||
buf[0] = 0;
|
buf[0] = 0;
|
||||||
dh = 0;
|
dh = 0;
|
||||||
for (a=a_find(f->attribs, &at_faction_special); a; a=a->nexttype) {
|
for (a=a_find(f->attribs, &at_faction_special); a && a->type==&at_faction_special; a=a->next) {
|
||||||
char buf2[80];
|
char buf2[80];
|
||||||
dh++;
|
dh++;
|
||||||
if (fspecials[a->data.sa[0]].maxlevel != 100) {
|
if (fspecials[a->data.sa[0]].maxlevel != 100) {
|
||||||
|
@ -1930,15 +1930,15 @@ report_plaintext(const char * filename, report_context * ctx)
|
||||||
if (a) {
|
if (a) {
|
||||||
rnl(F);
|
rnl(F);
|
||||||
centre(F, LOC(f->locale, "section_newspells"), true);
|
centre(F, LOC(f->locale, "section_newspells"), true);
|
||||||
while (a) {
|
while (a && a->type==&at_reportspell) {
|
||||||
spell *sp = (spell *)a->data.v;
|
spell *sp = (spell *)a->data.v;
|
||||||
report_spell(F, sp, f->locale);
|
report_spell(F, sp, f->locale);
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ch = 0;
|
ch = 0;
|
||||||
for (a=a_find(f->attribs, &at_showitem);a;a=a->nexttype) {
|
for (a=a_find(f->attribs, &at_showitem);a && a->type==&at_showitem;a=a->next) {
|
||||||
const potion_type * ptype = resource2potion(((const item_type*)a->data.v)->rtype);
|
const potion_type * ptype = resource2potion(((const item_type*)a->data.v)->rtype);
|
||||||
const char * description = NULL;
|
const char * description = NULL;
|
||||||
requirement * m;
|
requirement * m;
|
||||||
|
|
|
@ -724,8 +724,8 @@ learn(void)
|
||||||
for (ptype=potiontypes; ptype; ptype=ptype->next) {
|
for (ptype=potiontypes; ptype; ptype=ptype->next) {
|
||||||
if (skill == ptype->level * 2) {
|
if (skill == ptype->level * 2) {
|
||||||
attrib * a = a_find(f->attribs, &at_showitem);
|
attrib * a = a_find(f->attribs, &at_showitem);
|
||||||
while (a && a->data.v != ptype) a=a->nexttype;
|
while (a && a->type==&at_showitem && a->data.v != ptype) a=a->next;
|
||||||
if (!a) {
|
if (a==NULL || a->type!=&at_showitem) {
|
||||||
a = a_add(&f->attribs, a_new(&at_showitem));
|
a = a_add(&f->attribs, a_new(&at_showitem));
|
||||||
a->data.v = (void*) ptype->itype;
|
a->data.v = (void*) ptype->itype;
|
||||||
}
|
}
|
||||||
|
|
|
@ -200,7 +200,7 @@ int
|
||||||
get_effect(const unit * u, const potion_type * effect)
|
get_effect(const unit * u, const potion_type * effect)
|
||||||
{
|
{
|
||||||
const attrib * a;
|
const attrib * a;
|
||||||
for (a=a_find(u->attribs, &at_effect); a!=NULL; a=a->nexttype) {
|
for (a=a_find(u->attribs, &at_effect); a!=NULL && a->type==&at_effect; a=a->next) {
|
||||||
const effect_data * data = (const effect_data *)a->data.v;
|
const effect_data * data = (const effect_data *)a->data.v;
|
||||||
if (data->type==effect) return data->value;
|
if (data->type==effect) return data->value;
|
||||||
}
|
}
|
||||||
|
@ -210,27 +210,27 @@ get_effect(const unit * u, const potion_type * effect)
|
||||||
int
|
int
|
||||||
change_effect (unit * u, const potion_type * effect, int delta)
|
change_effect (unit * u, const potion_type * effect, int delta)
|
||||||
{
|
{
|
||||||
attrib ** ap = &u->attribs, * a;
|
attrib * a = a_find(u->attribs, &at_effect);
|
||||||
effect_data * data = NULL;
|
effect_data * data = NULL;
|
||||||
|
|
||||||
assert(delta!=0);
|
assert(delta!=0);
|
||||||
while (*ap && (*ap)->type!=&at_effect) ap=&(*ap)->next;
|
while (a && a->type==&at_effect) {
|
||||||
a = *ap;
|
|
||||||
while (a) {
|
|
||||||
data = (effect_data *)a->data.v;
|
data = (effect_data *)a->data.v;
|
||||||
if (data->type==effect) break;
|
if (data->type==effect) {
|
||||||
a=a->nexttype;
|
if (data->value+delta==0) {
|
||||||
}
|
|
||||||
if (a!=NULL && data->value+delta==0) {
|
|
||||||
a_remove(&u->attribs, a);
|
a_remove(&u->attribs, a);
|
||||||
return 0;
|
return 0;
|
||||||
} else if (a!=NULL) {
|
|
||||||
data->value += delta;
|
|
||||||
} else {
|
} else {
|
||||||
attrib * an = a_add(ap, a_new(&at_effect));
|
data->value += delta;
|
||||||
data = (effect_data*)an->data.v;
|
return data->value;
|
||||||
data->type = effect;
|
}
|
||||||
data->value = delta;
|
}
|
||||||
}
|
a = a->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
a = a_add(&u->attribs, a_new(&at_effect));
|
||||||
|
data = (effect_data*)a->data.v;
|
||||||
|
data->type = effect;
|
||||||
|
data->value = delta;
|
||||||
return data->value;
|
return data->value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2355,12 +2355,13 @@ aftermath(battle * b)
|
||||||
int dead = du->number - df->alive - df->run.number;
|
int dead = du->number - df->alive - df->run.number;
|
||||||
int pr_mercy = 0;
|
int pr_mercy = 0;
|
||||||
#ifdef KARMA_MODULE
|
#ifdef KARMA_MODULE
|
||||||
const attrib *a;
|
const attrib *a= a_find(du->attribs, &at_prayer_effect);
|
||||||
|
|
||||||
for (a = a_find(du->attribs, &at_prayer_effect); a; a = a->nexttype) {
|
while (a && a->type==&at_prayer_effect) {
|
||||||
if (a->data.sa[0] == PR_MERCY) {
|
if (a->data.sa[0] == PR_MERCY) {
|
||||||
pr_mercy = a->data.sa[1];
|
pr_mercy = a->data.sa[1];
|
||||||
}
|
}
|
||||||
|
a = a->next;
|
||||||
}
|
}
|
||||||
#endif /* KARMA_MODULE */
|
#endif /* KARMA_MODULE */
|
||||||
|
|
||||||
|
@ -2914,7 +2915,7 @@ make_fighter(battle * b, unit * u, side * s1, boolean attack)
|
||||||
strongmen = min(fig->unit->number, get_item(u, I_TROLLBELT));
|
strongmen = min(fig->unit->number, get_item(u, I_TROLLBELT));
|
||||||
|
|
||||||
#ifdef KARMA_MODULE
|
#ifdef KARMA_MODULE
|
||||||
for (a = a_find(u->attribs, &at_prayer_effect); a; a = a->nexttype) {
|
for (a = a_find(u->attribs, &at_prayer_effect); a && a->type==&at_prayer_effect; a = a->next) {
|
||||||
if (a->data.sa[0] == PR_AID) {
|
if (a->data.sa[0] == PR_AID) {
|
||||||
pr_aid = true;
|
pr_aid = true;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -593,7 +593,7 @@ required(int size, int msize, int maxneed)
|
||||||
static int
|
static int
|
||||||
matmod(const attrib * a, const unit * u, const resource_type * material, int value)
|
matmod(const attrib * a, const unit * u, const resource_type * material, int value)
|
||||||
{
|
{
|
||||||
for (a=a_find((attrib*)a, &at_matmod);a;a=a->nexttype) {
|
for (a=a_find((attrib*)a, &at_matmod);a && a->type==&at_matmod;a=a->next) {
|
||||||
mm_fun fun = (mm_fun)a->data.f;
|
mm_fun fun = (mm_fun)a->data.f;
|
||||||
value = fun(u, material, value);
|
value = fun(u, material, value);
|
||||||
if (value<0) return value; /* pass errors to caller */
|
if (value<0) return value; /* pass errors to caller */
|
||||||
|
@ -1110,15 +1110,16 @@ void
|
||||||
remove_contacts(void)
|
remove_contacts(void)
|
||||||
{
|
{
|
||||||
region *r;
|
region *r;
|
||||||
unit *u;
|
|
||||||
attrib *a;
|
|
||||||
|
|
||||||
for (r = regions; r; r = r->next) {
|
for (r = regions; r; r = r->next) {
|
||||||
|
unit *u;
|
||||||
|
|
||||||
for (u = r->units; u; u = u->next) {
|
for (u = r->units; u; u = u->next) {
|
||||||
a = (attrib *)a_find(u->attribs, &at_contact);
|
attrib * a = (attrib *)a_find(u->attribs, &at_contact);
|
||||||
while(a != NULL) {
|
|
||||||
|
while (a!=NULL &&a->type==&at_contact) {
|
||||||
attrib * ar = a;
|
attrib * ar = a;
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
a_remove(&u->attribs, ar);
|
a_remove(&u->attribs, ar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -352,7 +352,7 @@ remove_allcurse(attrib **ap, const void * data, boolean(*compare)(const attrib *
|
||||||
{
|
{
|
||||||
attrib * a = a_select(*ap, data, compare);
|
attrib * a = a_select(*ap, data, compare);
|
||||||
while (a) {
|
while (a) {
|
||||||
attrib * next = a->nexttype;
|
attrib * next = a->next;
|
||||||
a_remove(ap, a);
|
a_remove(ap, a);
|
||||||
a = a_select(next, data, compare);
|
a = a_select(next, data, compare);
|
||||||
}
|
}
|
||||||
|
@ -618,10 +618,10 @@ transfer_curse(unit * u, unit * u2, int n)
|
||||||
attrib * a;
|
attrib * a;
|
||||||
|
|
||||||
a = a_find(u->attribs, &at_curse);
|
a = a_find(u->attribs, &at_curse);
|
||||||
while (a) {
|
while (a && a->type==&at_curse) {
|
||||||
curse *c = (curse*)a->data.v;
|
curse *c = (curse*)a->data.v;
|
||||||
do_transfer_curse(c, u, u2, n);
|
do_transfer_curse(c, u, u2, n);
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -607,9 +607,9 @@ shipspeed (const ship * sh, const unit * u)
|
||||||
}
|
}
|
||||||
|
|
||||||
a = a_find(sh->attribs, &at_speedup);
|
a = a_find(sh->attribs, &at_speedup);
|
||||||
while (a != NULL) {
|
while (a != NULL && a->type==&at_speedup) {
|
||||||
k += a->data.sa[0];
|
k += a->data.sa[0];
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
c = get_curse(sh->attribs, ct_find("shipspeedup"));
|
c = get_curse(sh->attribs, ct_find("shipspeedup"));
|
||||||
|
@ -887,7 +887,7 @@ scale_number (unit * u, int n)
|
||||||
remain = 0;
|
remain = 0;
|
||||||
u->hp = 0;
|
u->hp = 0;
|
||||||
}
|
}
|
||||||
for (a = a_find(u->attribs, &at_effect);a;a=a->nexttype) {
|
for (a = a_find(u->attribs, &at_effect);a && a->type==&at_effect;a=a->next) {
|
||||||
effect_data * data = (effect_data *)a->data.v;
|
effect_data * data = (effect_data *)a->data.v;
|
||||||
int snew = data->value / u->number * n;
|
int snew = data->value / u->number * n;
|
||||||
if (n) {
|
if (n) {
|
||||||
|
@ -1191,10 +1191,10 @@ update_lighthouse(building * lh)
|
||||||
if (!fval(r2->terrain, SEA_REGION)) continue;
|
if (!fval(r2->terrain, SEA_REGION)) continue;
|
||||||
if (distance(r, r2) > d) continue;
|
if (distance(r, r2) > d) continue;
|
||||||
a = a_find(r2->attribs, &at_lighthouse);
|
a = a_find(r2->attribs, &at_lighthouse);
|
||||||
while (a) {
|
while (a && a->type==&at_lighthouse) {
|
||||||
building * b = (building*)a->data.v;
|
building * b = (building*)a->data.v;
|
||||||
if (b==lh) break;
|
if (b==lh) break;
|
||||||
a=a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
if (!a) {
|
if (!a) {
|
||||||
a = a_add(&r2->attribs, a_new(&at_lighthouse));
|
a = a_add(&r2->attribs, a_new(&at_lighthouse));
|
||||||
|
@ -2022,7 +2022,7 @@ get_lighthouses(const region * r)
|
||||||
|
|
||||||
if (!fval(r->terrain, SEA_REGION)) return NULL;
|
if (!fval(r->terrain, SEA_REGION)) return NULL;
|
||||||
|
|
||||||
for (a = a_find(r->attribs, &at_lighthouse);a;a=a->nexttype) {
|
for (a = a_find(r->attribs, &at_lighthouse);a && a->type==&at_lighthouse;a=a->next) {
|
||||||
building *b = (building *)a->data.v;
|
building *b = (building *)a->data.v;
|
||||||
region *r2 = b->region;
|
region *r2 = b->region;
|
||||||
|
|
||||||
|
@ -2081,7 +2081,7 @@ check_leuchtturm(region * r, faction * f)
|
||||||
|
|
||||||
if (!fval(r->terrain, SEA_REGION)) return false;
|
if (!fval(r->terrain, SEA_REGION)) return false;
|
||||||
|
|
||||||
for (a = a_find(r->attribs, &at_lighthouse);a;a=a->nexttype) {
|
for (a = a_find(r->attribs, &at_lighthouse);a && a->type==&at_lighthouse;a=a->next) {
|
||||||
building *b = (building *)a->data.v;
|
building *b = (building *)a->data.v;
|
||||||
region *r2 = b->region;
|
region *r2 = b->region;
|
||||||
|
|
||||||
|
@ -2130,16 +2130,17 @@ lastregion (faction * f)
|
||||||
/* we continue from the best region and look for travelthru etc. */
|
/* we continue from the best region and look for travelthru etc. */
|
||||||
for (r = f->last->next; r; r = r->next) {
|
for (r = f->last->next; r; r = r->next) {
|
||||||
plane * p = rplane(r);
|
plane * p = rplane(r);
|
||||||
attrib *ru;
|
|
||||||
|
|
||||||
/* search the region for travelthru-attributes: */
|
/* search the region for travelthru-attributes: */
|
||||||
if (fval(r, RF_TRAVELUNIT)) {
|
if (fval(r, RF_TRAVELUNIT)) {
|
||||||
for (ru = a_find(r->attribs, &at_travelunit); ru; ru = ru->nexttype) {
|
attrib * ru = a_find(r->attribs, &at_travelunit);
|
||||||
|
while (ru && ru->type==&at_travelunit) {
|
||||||
u = (unit*)ru->data.v;
|
u = (unit*)ru->data.v;
|
||||||
if (u->faction == f) {
|
if (u->faction == f) {
|
||||||
f->last = r;
|
f->last = r;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
ru = ru->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (f->last == r) continue;
|
if (f->last == r) continue;
|
||||||
|
@ -2844,7 +2845,7 @@ findspecialdirection(const region *r, const char *token)
|
||||||
spec_direction *d;
|
spec_direction *d;
|
||||||
|
|
||||||
if (strlen(token)==0) return NULL;
|
if (strlen(token)==0) return NULL;
|
||||||
for (a = a_find(r->attribs, &at_direction);a;a=a->nexttype) {
|
for (a = a_find(r->attribs, &at_direction);a && a->type==&at_direction;a=a->next) {
|
||||||
d = (spec_direction *)(a->data.v);
|
d = (spec_direction *)(a->data.v);
|
||||||
|
|
||||||
if (d->active && strncasecmp(d->keyword, token, strlen(token)) == 0) {
|
if (d->active && strncasecmp(d->keyword, token, strlen(token)) == 0) {
|
||||||
|
|
|
@ -318,7 +318,7 @@ buy_special(unit *u, struct order * ord, fspecial_t special)
|
||||||
|
|
||||||
/* Kosten berechnen */
|
/* Kosten berechnen */
|
||||||
|
|
||||||
for(a=a_find(f->attribs, &at_faction_special); a; a=a->nexttype) {
|
for(a=a_find(f->attribs, &at_faction_special); a && a->type==&at_faction_special; a=a->next) {
|
||||||
count += a->data.sa[1];
|
count += a->data.sa[1];
|
||||||
if(a->data.sa[0] == special) a2 = a;
|
if(a->data.sa[0] == special) a2 = a;
|
||||||
}
|
}
|
||||||
|
@ -356,7 +356,7 @@ fspecial(const faction *f, fspecial_t special)
|
||||||
{
|
{
|
||||||
attrib *a;
|
attrib *a;
|
||||||
|
|
||||||
for (a=a_find(f->attribs, &at_faction_special); a; a=a->nexttype) {
|
for (a=a_find(f->attribs, &at_faction_special); a && a->type==&at_faction_special; a=a->next) {
|
||||||
if(a->data.sa[0] == special) return a->data.sa[1];
|
if(a->data.sa[0] == special) return a->data.sa[1];
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -498,7 +498,7 @@ jihad_cmd(unit * u, struct order * ord)
|
||||||
attrib *a;
|
attrib *a;
|
||||||
const char *s;
|
const char *s;
|
||||||
|
|
||||||
for (a = a_find(f->attribs, &at_jihad); a; a = a->nexttype) {
|
for (a = a_find(f->attribs, &at_jihad); a && a->type==&at_jihad; a = a->next) {
|
||||||
has += a->data.sa[1];
|
has += a->data.sa[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -524,7 +524,7 @@ jihad_cmd(unit * u, struct order * ord)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (a = a_find(f->attribs, &at_jihad); a; a = a->nexttype) {
|
for (a = a_find(f->attribs, &at_jihad); a && a->type==&at_jihad; a = a->next) {
|
||||||
if (a->data.sa[0] == jrt) break;
|
if (a->data.sa[0] == jrt) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -546,7 +546,7 @@ jihad(faction *f, const race * rc)
|
||||||
attrib *a;
|
attrib *a;
|
||||||
race_t jrt = old_race(rc);
|
race_t jrt = old_race(rc);
|
||||||
|
|
||||||
for(a = a_find(f->attribs, &at_jihad); a; a = a->nexttype) {
|
for(a = a_find(f->attribs, &at_jihad); a && a->type==&at_jihad; a = a->next) {
|
||||||
if(a->data.sa[0] == jrt) return a->data.sa[1];
|
if(a->data.sa[0] == jrt) return a->data.sa[1];
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -167,106 +167,6 @@
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
|
||||||
Name="Release64|Win32"
|
|
||||||
OutputDirectory="$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="4"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
InlineFunctionExpansion="1"
|
|
||||||
AdditionalIncludeDirectories="../util,../..,.."
|
|
||||||
PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS"
|
|
||||||
StringPooling="TRUE"
|
|
||||||
RuntimeLibrary="2"
|
|
||||||
EnableFunctionLevelLinking="TRUE"
|
|
||||||
DisableLanguageExtensions="TRUE"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
PrecompiledHeaderFile=".\Release/kernel.pch"
|
|
||||||
AssemblerListingLocation=".\Release/"
|
|
||||||
ObjectFile=".\Release/"
|
|
||||||
ProgramDataBaseFileName=".\Release/"
|
|
||||||
WarningLevel="4"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
CompileAs="0"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile=".\Release\kernel.lib"
|
|
||||||
SuppressStartupBanner="TRUE"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
Culture="1031"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedWrapperGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Debug64|Win32"
|
|
||||||
OutputDirectory="$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="4"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
ImproveFloatingPointConsistency="FALSE"
|
|
||||||
AdditionalIncludeDirectories="../util;../..;.."
|
|
||||||
PreprocessorDefinitions="_WINDOWS,WIN32"
|
|
||||||
BasicRuntimeChecks="0"
|
|
||||||
BufferSecurityCheck="FALSE"
|
|
||||||
DisableLanguageExtensions="TRUE"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
PrecompiledHeaderThrough="stdafx.h"
|
|
||||||
PrecompiledHeaderFile=".\Debug/kernel.pch"
|
|
||||||
WarningLevel="4"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
CompileAs="0"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
SuppressStartupBanner="TRUE"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
Culture="1031"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedWrapperGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
|
||||||
</Configuration>
|
|
||||||
</Configurations>
|
</Configurations>
|
||||||
<References>
|
<References>
|
||||||
</References>
|
</References>
|
||||||
|
|
|
@ -401,7 +401,7 @@ already_seen(const faction * f, const spell * sp)
|
||||||
{
|
{
|
||||||
attrib *a;
|
attrib *a;
|
||||||
|
|
||||||
for (a = a_find(f->attribs, &at_seenspell); a; a=a->nexttype) {
|
for (a = a_find(f->attribs, &at_seenspell); a && a->type==&at_seenspell; a=a->next) {
|
||||||
if (a->data.v==sp) return true;
|
if (a->data.v==sp) return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -1101,7 +1101,7 @@ magic_resistance(unit *target)
|
||||||
|
|
||||||
/* Auswirkungen von Zaubern auf der Region */
|
/* Auswirkungen von Zaubern auf der Region */
|
||||||
a = a_find(target->region->attribs, &at_curse);
|
a = a_find(target->region->attribs, &at_curse);
|
||||||
while (a) {
|
while (a && a->type==&at_curse) {
|
||||||
curse *c = (curse*)a->data.v;
|
curse *c = (curse*)a->data.v;
|
||||||
unit *mage = c->magician;
|
unit *mage = c->magician;
|
||||||
|
|
||||||
|
@ -1114,12 +1114,13 @@ magic_resistance(unit *target)
|
||||||
}
|
}
|
||||||
else if (c->type == ct_find("badmagicresistancezone")) {
|
else if (c->type == ct_find("badmagicresistancezone")) {
|
||||||
if (alliedunit(mage, target->faction, HELP_GUARD)) {
|
if (alliedunit(mage, target->faction, HELP_GUARD)) {
|
||||||
a = a->nexttype;
|
/* TODO: hier sollte doch sicher was passieren? */
|
||||||
|
a = a->next;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
/* Bonus durch Artefakte */
|
/* Bonus durch Artefakte */
|
||||||
/* TODO (noch gibs keine)*/
|
/* TODO (noch gibs keine)*/
|
||||||
|
@ -2116,10 +2117,10 @@ set_familiar(unit * mage, unit * familiar)
|
||||||
{
|
{
|
||||||
/* if the skill modifier for the mage does not yet exist, add it */
|
/* if the skill modifier for the mage does not yet exist, add it */
|
||||||
attrib * a = a_find(mage->attribs, &at_skillmod);
|
attrib * a = a_find(mage->attribs, &at_skillmod);
|
||||||
while (a) {
|
while (a && a->type==&at_skillmod) {
|
||||||
skillmod_data * smd = (skillmod_data *)a->data.v;
|
skillmod_data * smd = (skillmod_data *)a->data.v;
|
||||||
if (smd->special==sm_familiar) break;
|
if (smd->special==sm_familiar) break;
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
if (a==NULL) {
|
if (a==NULL) {
|
||||||
attrib * an = a_add(&mage->attribs, a_new(&at_skillmod));
|
attrib * an = a_add(&mage->attribs, a_new(&at_skillmod));
|
||||||
|
@ -2151,8 +2152,8 @@ remove_familiar(unit *mage)
|
||||||
|
|
||||||
a_remove(&mage->attribs, a);
|
a_remove(&mage->attribs, a);
|
||||||
a = a_find(mage->attribs, &at_skillmod);
|
a = a_find(mage->attribs, &at_skillmod);
|
||||||
while (a) {
|
while (a && a->type==&at_skillmod) {
|
||||||
an = a->nexttype;
|
an = a->next;
|
||||||
smd = (skillmod_data *)a->data.v;
|
smd = (skillmod_data *)a->data.v;
|
||||||
if (smd->special==sm_familiar) a_remove(&mage->attribs, a);
|
if (smd->special==sm_familiar) a_remove(&mage->attribs, a);
|
||||||
a = an;
|
a = an;
|
||||||
|
@ -2164,10 +2165,10 @@ create_newfamiliar(unit * mage, unit * familiar)
|
||||||
{
|
{
|
||||||
/* if the skill modifier for the mage does not yet exist, add it */
|
/* if the skill modifier for the mage does not yet exist, add it */
|
||||||
attrib * a = a_find(mage->attribs, &at_skillmod);
|
attrib * a = a_find(mage->attribs, &at_skillmod);
|
||||||
while (a) {
|
while (a && a->type==&at_skillmod) {
|
||||||
skillmod_data * smd = (skillmod_data *)a->data.v;
|
skillmod_data * smd = (skillmod_data *)a->data.v;
|
||||||
if (smd->special==sm_familiar) break;
|
if (smd->special==sm_familiar) break;
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
if (a==NULL) {
|
if (a==NULL) {
|
||||||
attrib * an = a_add(&mage->attribs, a_new(&at_skillmod));
|
attrib * an = a_add(&mage->attribs, a_new(&at_skillmod));
|
||||||
|
|
|
@ -539,10 +539,10 @@ leave_trail(ship * sh, region * from, region_list *route)
|
||||||
traveldir * td = NULL;
|
traveldir * td = NULL;
|
||||||
attrib * a = a_find(r->attribs, &at_shiptrail);
|
attrib * a = a_find(r->attribs, &at_shiptrail);
|
||||||
|
|
||||||
while (a!=NULL) {
|
while (a!=NULL && a->type==&at_shiptrail) {
|
||||||
td = (traveldir *)a->data.v;
|
td = (traveldir *)a->data.v;
|
||||||
if (td->no == sh->no) break;
|
if (td->no == sh->no) break;
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a == NULL) {
|
if (a == NULL) {
|
||||||
|
@ -2112,7 +2112,7 @@ piracy_cmd(unit *u, struct order * ord)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (a = a_find(r->attribs, &at_piracy_direction); a; a=a->nexttype) {
|
for (a = a_find(r->attribs, &at_piracy_direction); a && a->type==&at_piracy_direction; a=a->next) {
|
||||||
piracy_data * data = a->data.v;
|
piracy_data * data = a->data.v;
|
||||||
const faction * p = data->pirate;
|
const faction * p = data->pirate;
|
||||||
const faction * t = data->target;
|
const faction * t = data->target;
|
||||||
|
@ -2196,15 +2196,13 @@ age_traveldir(region *r)
|
||||||
{
|
{
|
||||||
attrib *a = a_find(r->attribs, &at_traveldir);
|
attrib *a = a_find(r->attribs, &at_traveldir);
|
||||||
|
|
||||||
while(a) {
|
while(a && a->type==&at_traveldir) {
|
||||||
|
attrib *an = a->next;
|
||||||
a->data.ca[3]--;
|
a->data.ca[3]--;
|
||||||
if(a->data.ca[3] <= 0) {
|
if(a->data.ca[3] <= 0) {
|
||||||
attrib *an = a->nexttype;
|
|
||||||
a_remove(&r->attribs, a);
|
a_remove(&r->attribs, a);
|
||||||
a = an;
|
|
||||||
} else {
|
|
||||||
a = a->nexttype;
|
|
||||||
}
|
}
|
||||||
|
a = an;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2213,10 +2211,10 @@ hunted_dir(attrib *at, int id)
|
||||||
{
|
{
|
||||||
attrib *a = a_find(at, &at_shiptrail);
|
attrib *a = a_find(at, &at_shiptrail);
|
||||||
|
|
||||||
while (a!=NULL) {
|
while (a!=NULL && a->type==&at_shiptrail) {
|
||||||
traveldir *t = (traveldir *)(a->data.v);
|
traveldir *t = (traveldir *)(a->data.v);
|
||||||
if (t->no == id) return t->dir;
|
if (t->no == id) return t->dir;
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NODIRECTION;
|
return NODIRECTION;
|
||||||
|
|
|
@ -386,10 +386,10 @@ special_direction(const region * from, const region * to)
|
||||||
{
|
{
|
||||||
const attrib *a = a_findc(from->attribs, &at_direction);
|
const attrib *a = a_findc(from->attribs, &at_direction);
|
||||||
|
|
||||||
while (a!=NULL) {
|
while (a!=NULL && a->type==&at_direction) {
|
||||||
spec_direction * sd = (spec_direction *)a->data.v;
|
spec_direction * sd = (spec_direction *)a->data.v;
|
||||||
if (sd->x==to->x && sd->y==to->y) return sd;
|
if (sd->x==to->x && sd->y==to->y) return sd;
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1292,7 +1292,7 @@ prepare_report(faction * f)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode<see_travel && fval(r, RF_TRAVELUNIT)) {
|
if (mode<see_travel && fval(r, RF_TRAVELUNIT)) {
|
||||||
for (ru = a_find(r->attribs, &at_travelunit); ru; ru = ru->nexttype) {
|
for (ru = a_find(r->attribs, &at_travelunit); ru && ru->type==&at_travelunit; ru = ru->next) {
|
||||||
unit * u = (unit*)ru->data.v;
|
unit * u = (unit*)ru->data.v;
|
||||||
if (u->faction == f) {
|
if (u->faction == f) {
|
||||||
mode = see_travel;
|
mode = see_travel;
|
||||||
|
|
|
@ -154,7 +154,7 @@ make_skillmod(skill_t sk, unsigned int flags, skillmod_fun special, double multi
|
||||||
int
|
int
|
||||||
skillmod(const attrib * a, const unit * u, const region * r, skill_t sk, int value, int flags)
|
skillmod(const attrib * a, const unit * u, const region * r, skill_t sk, int value, int flags)
|
||||||
{
|
{
|
||||||
for (a = a_find((attrib*)a, &at_skillmod); a; a=a->nexttype) {
|
for (a = a_find((attrib*)a, &at_skillmod); a && a->type==&at_skillmod; a=a->next) {
|
||||||
skillmod_data * smd = (skillmod_data *)a->data.v;
|
skillmod_data * smd = (skillmod_data *)a->data.v;
|
||||||
if (smd->skill!=NOSKILL && smd->skill!=sk) continue;
|
if (smd->skill!=NOSKILL && smd->skill!=sk) continue;
|
||||||
if (flags!=SMF_ALWAYS && (smd->flags & flags) == 0) continue;
|
if (flags!=SMF_ALWAYS && (smd->flags & flags) == 0) continue;
|
||||||
|
|
|
@ -481,8 +481,8 @@ void
|
||||||
usetcontact(unit * u, const unit * u2)
|
usetcontact(unit * u, const unit * u2)
|
||||||
{
|
{
|
||||||
attrib * a = a_find(u->attribs, &at_contact);
|
attrib * a = a_find(u->attribs, &at_contact);
|
||||||
while (a && a->data.v!=u2) a = a->nexttype;
|
while (a && a->type==&at_contact && a->data.v!=u2) a = a->next;
|
||||||
if (a) return;
|
if (a && a->type==&at_contact) return;
|
||||||
a_add(&u->attribs, a_new(&at_contact))->data.v = (void*)u2;
|
a_add(&u->attribs, a_new(&at_contact))->data.v = (void*)u2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -494,7 +494,7 @@ ucontact(const unit * u, const unit * u2)
|
||||||
if (u->faction==u2->faction) return true;
|
if (u->faction==u2->faction) return true;
|
||||||
|
|
||||||
/* Explizites KONTAKTIERE */
|
/* Explizites KONTAKTIERE */
|
||||||
for (ru = a_find(u->attribs, &at_contact); ru; ru = ru->nexttype)
|
for (ru = a_find(u->attribs, &at_contact); ru && ru->type==&at_contact; ru = ru->next)
|
||||||
if (((unit*)ru->data.v) == u2)
|
if (((unit*)ru->data.v) == u2)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -828,10 +828,10 @@ transfermen(unit * u, unit * u2, int n)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
a = a_find(u->attribs, &at_effect);
|
a = a_find(u->attribs, &at_effect);
|
||||||
while (a) {
|
while (a && a->type==&at_effect) {
|
||||||
effect_data * olde = (effect_data*)a->data.v;
|
effect_data * olde = (effect_data*)a->data.v;
|
||||||
if (olde->value) change_effect(u2, olde->type, olde->value);
|
if (olde->value) change_effect(u2, olde->type, olde->value);
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
if (fval(u, UFL_LONGACTION)) fset(u2, UFL_LONGACTION);
|
if (fval(u, UFL_LONGACTION)) fset(u2, UFL_LONGACTION);
|
||||||
if (u->attribs) {
|
if (u->attribs) {
|
||||||
|
@ -845,8 +845,8 @@ transfermen(unit * u, unit * u2, int n)
|
||||||
u2->hp += hp;
|
u2->hp += hp;
|
||||||
/* 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 && a->type==&at_effect) {
|
||||||
attrib * an = a->nexttype;
|
attrib * an = a->next;
|
||||||
effect_data * olde = (effect_data*)a->data.v;
|
effect_data * olde = (effect_data*)a->data.v;
|
||||||
int e = get_effect(u, olde->type);
|
int e = get_effect(u, olde->type);
|
||||||
if (e!=0) change_effect(u2, olde->type, -e);
|
if (e!=0) change_effect(u2, olde->type, -e);
|
||||||
|
|
|
@ -154,7 +154,7 @@ gm_create(const tnode * tnext, const char * str, void * data, struct order * ord
|
||||||
} else {
|
} else {
|
||||||
attrib * a = a_find(permissions, &at_gmcreate);
|
attrib * a = a_find(permissions, &at_gmcreate);
|
||||||
|
|
||||||
while (a && a->data.v!=(void*)itype) a=a->nexttype;
|
while (a && a->type==&at_gmcreate && a->data.v!=(void*)itype) a=a->next;
|
||||||
if (a) i_change(&u->items, itype, i);
|
if (a) i_change(&u->items, itype, i);
|
||||||
else mistake(u, ord, "Diesen Gegenstand darf deine Partei nicht machen.", 0);
|
else mistake(u, ord, "Diesen Gegenstand darf deine Partei nicht machen.", 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,12 +142,12 @@ warden_add_give(unit *src, unit *u, const item_type *itype, int n)
|
||||||
attrib *a;
|
attrib *a;
|
||||||
|
|
||||||
/* has the giver a cookie corresponding to the warden */
|
/* has the giver a cookie corresponding to the warden */
|
||||||
for(a = a_find(src->attribs, &at_museumgivebackcookie); a; a=a->nexttype) {
|
for(a = a_find(src->attribs, &at_museumgivebackcookie); a && a->type==&at_museumgivebackcookie; a=a->next) {
|
||||||
if(((museumgivebackcookie *)(a->data.v))->warden_no == u->no) break;
|
if(((museumgivebackcookie *)(a->data.v))->warden_no == u->no) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if not give it one */
|
/* if not give it one */
|
||||||
if(!a) {
|
if (a==NULL || a->type!=&at_museumgivebackcookie) {
|
||||||
a = a_add(&src->attribs, a_new(&at_museumgivebackcookie));
|
a = a_add(&src->attribs, a_new(&at_museumgivebackcookie));
|
||||||
gbc = (museumgivebackcookie *)a->data.v;
|
gbc = (museumgivebackcookie *)a->data.v;
|
||||||
gbc->warden_no = u->no;
|
gbc->warden_no = u->no;
|
||||||
|
@ -159,7 +159,7 @@ warden_add_give(unit *src, unit *u, const item_type *itype, int n)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* now we search for the warden's corresponding item list */
|
/* now we search for the warden's corresponding item list */
|
||||||
for(a = a_find(u->attribs, &at_museumgiveback); a; a=a->nexttype) {
|
for (a = a_find(u->attribs, &at_museumgiveback); a && a->type==&at_museumgiveback; a=a->next) {
|
||||||
gb = (museumgiveback *)a->data.v;
|
gb = (museumgiveback *)a->data.v;
|
||||||
if (gb->cookie == gbc->cookie) {
|
if (gb->cookie == gbc->cookie) {
|
||||||
break;
|
break;
|
||||||
|
@ -309,10 +309,10 @@ use_museumexitticket(unit *u, const struct item_type *itype, int amount, order *
|
||||||
a_remove(&u->attribs, a);
|
a_remove(&u->attribs, a);
|
||||||
|
|
||||||
if(a) {
|
if(a) {
|
||||||
for(a = a_find(warden->attribs, &at_museumgiveback); a; a = a->nexttype) {
|
for(a = a_find(warden->attribs, &at_museumgiveback); a && a->type==&at_museumgiveback; a = a->next) {
|
||||||
if(((museumgiveback *)(a->data.v))->cookie == unit_cookie) break;
|
if(((museumgiveback *)(a->data.v))->cookie == unit_cookie) break;
|
||||||
}
|
}
|
||||||
if(a) {
|
if (a && a->type==&at_museumgiveback) {
|
||||||
museumgiveback *gb = (museumgiveback *)(a->data.v);
|
museumgiveback *gb = (museumgiveback *)(a->data.v);
|
||||||
item *it;
|
item *it;
|
||||||
|
|
||||||
|
|
|
@ -2816,18 +2816,18 @@ resolve_buddy(variant data)
|
||||||
curse * c = (curse*)a->data.v;
|
curse * c = (curse*)a->data.v;
|
||||||
wallcurse * wc = (wallcurse*)c->data.v;
|
wallcurse * wc = (wallcurse*)c->data.v;
|
||||||
if (wc->wall->id==br->id) break;
|
if (wc->wall->id==br->id) break;
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
if (!a) {
|
if (!a || a->type!=&at_cursewall) {
|
||||||
a = a_find(b->to->attribs, &at_cursewall);
|
a = a_find(b->to->attribs, &at_cursewall);
|
||||||
while (a && a->data.v!=br->self) {
|
while (a && a->type==&at_cursewall && a->data.v!=br->self) {
|
||||||
curse * c = (curse*)a->data.v;
|
curse * c = (curse*)a->data.v;
|
||||||
wallcurse * wc = (wallcurse*)c->data.v;
|
wallcurse * wc = (wallcurse*)c->data.v;
|
||||||
if (wc->wall->id==br->id) break;
|
if (wc->wall->id==br->id) break;
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (a) {
|
if (a && a->type==&at_cursewall) {
|
||||||
curse * c = (curse*)a->data.v;
|
curse * c = (curse*)a->data.v;
|
||||||
free(br);
|
free(br);
|
||||||
return c;
|
return c;
|
||||||
|
@ -6271,7 +6271,7 @@ sp_disruptastral(castorder *co)
|
||||||
rl = all_in_range(rt, (short)(power/5), NULL);
|
rl = all_in_range(rt, (short)(power/5), NULL);
|
||||||
|
|
||||||
for (rl2=rl; rl2!=NULL; rl2=rl2->next) {
|
for (rl2=rl; rl2!=NULL; rl2=rl2->next) {
|
||||||
attrib *a, *a2;
|
attrib *a;
|
||||||
variant effect;
|
variant effect;
|
||||||
region * r2 = rl2->data;
|
region * r2 = rl2->data;
|
||||||
spec_direction *sd;
|
spec_direction *sd;
|
||||||
|
@ -6290,8 +6290,8 @@ sp_disruptastral(castorder *co)
|
||||||
/* Nicht-Permanente Tore zerstören */
|
/* Nicht-Permanente Tore zerstören */
|
||||||
a = a_find(r->attribs, &at_direction);
|
a = a_find(r->attribs, &at_direction);
|
||||||
|
|
||||||
while (a!=NULL) {
|
while (a!=NULL && a->type==&at_direction) {
|
||||||
a2 = a->nexttype;
|
attrib * a2 = a->next;
|
||||||
sd = (spec_direction *)(a->data.v);
|
sd = (spec_direction *)(a->data.v);
|
||||||
if (sd->duration != -1) a_remove(&r->attribs, a);
|
if (sd->duration != -1) a_remove(&r->attribs, a);
|
||||||
a = a2;
|
a = a2;
|
||||||
|
|
|
@ -88,91 +88,142 @@ a_select(attrib * a, const void * data, boolean(*compare)(const attrib *, const
|
||||||
attrib *
|
attrib *
|
||||||
a_find(attrib * a, const attrib_type * at)
|
a_find(attrib * a, const attrib_type * at)
|
||||||
{
|
{
|
||||||
while (a && a->type!=at) a = a->next;
|
while (a && a->type!=at) a = a->nexttype;
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
const attrib *
|
const attrib *
|
||||||
a_findc(const attrib * a, const attrib_type * at)
|
a_findc(const attrib * a, const attrib_type * at)
|
||||||
{
|
{
|
||||||
while (a && a->type!=at) a = a->next;
|
while (a && a->type!=at) a = a->nexttype;
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static attrib *
|
||||||
|
a_insert(attrib * head, attrib * a)
|
||||||
|
{
|
||||||
|
attrib ** pa=&head->next;
|
||||||
|
|
||||||
|
assert(!(a->type->flags & ATF_UNIQUE));
|
||||||
|
assert(head && head->type==a->type);
|
||||||
|
|
||||||
|
while (*pa && (*pa)->type==a->type) {
|
||||||
|
pa = &(*pa)->next;
|
||||||
|
}
|
||||||
|
a->next = *pa;
|
||||||
|
return *pa = a;
|
||||||
|
}
|
||||||
|
|
||||||
attrib *
|
attrib *
|
||||||
a_add(attrib ** pa, attrib * a)
|
a_add(attrib ** pa, attrib * a)
|
||||||
{
|
{
|
||||||
attrib ** find = pa;
|
attrib * first = *pa;
|
||||||
assert(a->next==NULL && a->nexttype==NULL);
|
assert(a->next==NULL && a->nexttype==NULL);
|
||||||
while (*find && (*find)->type!=a->type) find = &(*find)->next;
|
|
||||||
if (a->type->flags & ATF_PRESERVE) {
|
if (first==NULL) return *pa = a;
|
||||||
while (*find) find = &(*find)->nexttype;
|
if (first->type==a->type) {
|
||||||
|
return a_insert(first, a);
|
||||||
}
|
}
|
||||||
if (a->type->flags & ATF_UNIQUE && *find) {
|
for (;;) {
|
||||||
if ((*find)->type == a->type) {
|
attrib * next = first->nexttype;
|
||||||
log_error(("duplicate attribute: %s\n", a->type->name));
|
if (next==NULL) {
|
||||||
return a;
|
/* the type is not in the list, append it behind the last type */
|
||||||
|
attrib ** insert = &first->next;
|
||||||
|
first->nexttype = a;
|
||||||
|
while (*insert) insert = &(*insert)->next;
|
||||||
|
*insert = a;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
if (next->type==a->type) {
|
||||||
|
return a_insert(next, a);
|
||||||
}
|
}
|
||||||
if (*find) {
|
first = next;
|
||||||
attrib ** last = find;
|
|
||||||
while (*last) last = &(*last)->nexttype;
|
|
||||||
*last = a;
|
|
||||||
while (*find && (*find)->type==a->type) find = &(*find)->next;
|
|
||||||
}
|
}
|
||||||
a->next = *find;
|
|
||||||
*find = a;
|
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
a_free(attrib * a) {
|
a_free(attrib * a)
|
||||||
|
{
|
||||||
const attrib_type * at = a->type;
|
const attrib_type * at = a->type;
|
||||||
if (at->finalize) at->finalize(a);
|
if (at->finalize) at->finalize(a);
|
||||||
free(a);
|
free(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
a_unlink(attrib ** p, attrib * a) {
|
a_unlink(attrib ** pa, attrib * a)
|
||||||
attrib ** pa = p;
|
{
|
||||||
while (*pa && *pa!=a) pa = &(*pa)->next;
|
attrib ** pnexttype = pa;
|
||||||
if (*pa) {
|
attrib ** pnext = NULL;
|
||||||
attrib ** pnt;
|
|
||||||
for (pnt=p;*pnt;pnt=&(*pnt)->next)
|
while (*pnexttype) {
|
||||||
if ((*pnt)->nexttype == a) {
|
attrib * next = *pnexttype;
|
||||||
(*pnt)->nexttype = a->nexttype;
|
if (next->type==a->type) break;
|
||||||
break;
|
pnexttype = &next->nexttype;
|
||||||
|
pnext = &next->next;
|
||||||
}
|
}
|
||||||
*pa = (*pa)->next;
|
if (*pnexttype && (*pnexttype)->type==a->type) {
|
||||||
|
if (*pnexttype==a) {
|
||||||
|
*pnexttype = a->next;
|
||||||
|
if (a->next!=a->nexttype) {
|
||||||
|
a->next->nexttype = a->nexttype;
|
||||||
|
}
|
||||||
|
if (pnext==NULL) return 1;
|
||||||
|
while (*pnext && (*pnext)->type!=a->type) pnext = &(*pnext)->next;
|
||||||
|
} else {
|
||||||
|
pnext = &(*pnexttype)->next;
|
||||||
|
}
|
||||||
|
while (*pnext && (*pnext)->type==a->type) {
|
||||||
|
if (*pnext==a) {
|
||||||
|
*pnext = a->next;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
pnext = &(*pnext)->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
a_remove(attrib ** p, attrib * a) {
|
a_remove(attrib ** pa, attrib * a)
|
||||||
|
{
|
||||||
int ok;
|
int ok;
|
||||||
ok = a_unlink(p, a);
|
ok = a_unlink(pa, a);
|
||||||
if (ok) a_free(a);
|
if (ok) a_free(a);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
a_removeall(attrib **p, const attrib_type * at)
|
a_removeall(attrib **pa, const attrib_type * at)
|
||||||
{
|
{
|
||||||
attrib *find = *p, *findnext;
|
attrib ** pnexttype = pa;
|
||||||
if (find && find->type != at){
|
attrib ** pnext = NULL;
|
||||||
find = a_find(find, at);
|
|
||||||
|
while (*pnexttype) {
|
||||||
|
attrib * next = *pnexttype;
|
||||||
|
if (next->type==at) break;
|
||||||
|
pnexttype = &next->nexttype;
|
||||||
|
pnext = &next->next;
|
||||||
|
}
|
||||||
|
if (*pnexttype && (*pnexttype)->type==at) {
|
||||||
|
attrib * a = *pnexttype;
|
||||||
|
|
||||||
|
*pnexttype = a->nexttype;
|
||||||
|
if (pnext) {
|
||||||
|
while (*pnext && (*pnext)->type!=at) pnext = &(*pnext)->next;
|
||||||
|
*pnext = a->nexttype;
|
||||||
|
}
|
||||||
|
while (a && a->type==at) {
|
||||||
|
attrib * ra = a;
|
||||||
|
a = a->next;
|
||||||
|
a_free(ra);
|
||||||
}
|
}
|
||||||
while(find && find->type == at) {
|
|
||||||
findnext = find->next;
|
|
||||||
a_remove(p, find);
|
|
||||||
find = findnext;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
attrib *
|
attrib *
|
||||||
a_new(const attrib_type * at) {
|
a_new(const attrib_type * at)
|
||||||
|
{
|
||||||
attrib * a = (attrib*)calloc(1, sizeof(attrib));
|
attrib * a = (attrib*)calloc(1, sizeof(attrib));
|
||||||
assert(at!=NULL);
|
assert(at!=NULL);
|
||||||
a->type = at;
|
a->type = at;
|
||||||
|
@ -248,8 +299,10 @@ a_write(FILE * f, const attrib * attribs)
|
||||||
assert(na->type->hashkey || !"attribute not registered");
|
assert(na->type->hashkey || !"attribute not registered");
|
||||||
fprintf(f, "%s ", na->type->name);
|
fprintf(f, "%s ", na->type->name);
|
||||||
na->type->write(na, f);
|
na->type->write(na, f);
|
||||||
}
|
|
||||||
na = na->next;
|
na = na->next;
|
||||||
|
} else {
|
||||||
|
na = na->nexttype;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fprintf(f, "end ");
|
fprintf(f, "end ");
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ typedef struct attrib {
|
||||||
} data;
|
} data;
|
||||||
/* internal data, do not modify: */
|
/* internal data, do not modify: */
|
||||||
struct attrib * next; /* next attribute in the list */
|
struct attrib * next; /* next attribute in the list */
|
||||||
struct attrib * nexttype; /* next attribute of same type */
|
struct attrib * nexttype; /* skip to attribute of a different type */
|
||||||
} attrib;
|
} attrib;
|
||||||
|
|
||||||
#define ATF_UNIQUE (1<<0) /* only one per attribute-list */
|
#define ATF_UNIQUE (1<<0) /* only one per attribute-list */
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <memory.h>
|
||||||
|
|
||||||
void
|
void
|
||||||
cv_init(cvector * cv)
|
cv_init(cvector * cv)
|
||||||
|
|
|
@ -165,16 +165,15 @@ get_triggers(struct attrib * ap, const char * eventname)
|
||||||
{
|
{
|
||||||
handler_info * td = NULL;
|
handler_info * td = NULL;
|
||||||
attrib * a = a_find(ap, &at_eventhandler);
|
attrib * a = a_find(ap, &at_eventhandler);
|
||||||
while (a!=NULL) {
|
while (a!=NULL && a->type==&at_eventhandler) {
|
||||||
td = (handler_info *)a->data.v;
|
td = (handler_info *)a->data.v;
|
||||||
if (!strcmp(td->event, eventname)) {
|
if (strcmp(td->event, eventname)==0) {
|
||||||
break;
|
|
||||||
}
|
|
||||||
a = a->nexttype;
|
|
||||||
}
|
|
||||||
if (!a) return NULL;
|
|
||||||
return &td->triggers;
|
return &td->triggers;
|
||||||
}
|
}
|
||||||
|
a = a->next;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_trigger(struct attrib ** ap, const char * eventname, struct trigger * t)
|
add_trigger(struct attrib ** ap, const char * eventname, struct trigger * t)
|
||||||
|
@ -183,14 +182,14 @@ add_trigger(struct attrib ** ap, const char * eventname, struct trigger * t)
|
||||||
handler_info * td = NULL;
|
handler_info * td = NULL;
|
||||||
attrib * a = a_find(*ap, &at_eventhandler);
|
attrib * a = a_find(*ap, &at_eventhandler);
|
||||||
assert(t->next==NULL);
|
assert(t->next==NULL);
|
||||||
while (a!=NULL) {
|
while (a!=NULL && a->type==&at_eventhandler) {
|
||||||
td = (handler_info *)a->data.v;
|
td = (handler_info *)a->data.v;
|
||||||
if (!strcmp(td->event, eventname)) {
|
if (!strcmp(td->event, eventname)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
if (!a) {
|
if (a==NULL || a->type!=&at_eventhandler) {
|
||||||
a = a_add(ap, a_new(&at_eventhandler));
|
a = a_add(ap, a_new(&at_eventhandler));
|
||||||
td = (handler_info *)a->data.v;
|
td = (handler_info *)a->data.v;
|
||||||
td->event = strdup(eventname);
|
td->event = strdup(eventname);
|
||||||
|
@ -207,14 +206,14 @@ handle_event(attrib ** attribs, const char * eventname, void * data)
|
||||||
if ((*attribs)->type==&at_eventhandler) break;
|
if ((*attribs)->type==&at_eventhandler) break;
|
||||||
attribs = &(*attribs)->next;
|
attribs = &(*attribs)->next;
|
||||||
}
|
}
|
||||||
while (*attribs) {
|
while (*attribs && (*attribs)->type==&at_eventhandler) {
|
||||||
handler_info * tl = (handler_info*)(*attribs)->data.v;
|
handler_info * tl = (handler_info*)(*attribs)->data.v;
|
||||||
if (!strcmp(tl->event, eventname)) break;
|
if (!strcmp(tl->event, eventname)) {
|
||||||
attribs = &(*attribs)->nexttype;
|
|
||||||
}
|
|
||||||
if (*attribs) {
|
|
||||||
handler_info * tl = (handler_info*)(*attribs)->data.v;
|
handler_info * tl = (handler_info*)(*attribs)->data.v;
|
||||||
handle_triggers(&tl->triggers, data);
|
handle_triggers(&tl->triggers, data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
attribs = &(*attribs)->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -441,6 +441,9 @@
|
||||||
<File
|
<File
|
||||||
RelativePath=".\message.c">
|
RelativePath=".\message.c">
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\mt19937ar.c">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\nrmessage.c">
|
RelativePath=".\nrmessage.c">
|
||||||
</File>
|
</File>
|
||||||
|
|
|
@ -76,129 +76,80 @@ EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfiguration) = preSolution
|
GlobalSection(SolutionConfiguration) = preSolution
|
||||||
Debug = Debug
|
Debug = Debug
|
||||||
Debug64 = Debug64
|
|
||||||
Profile = Profile
|
Profile = Profile
|
||||||
Release = Release
|
Release = Release
|
||||||
Release64 = Release64
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfiguration) = postSolution
|
GlobalSection(ProjectConfiguration) = postSolution
|
||||||
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Debug.ActiveCfg = Debug|Win32
|
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Debug.ActiveCfg = Debug|Win32
|
||||||
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Debug.Build.0 = Debug|Win32
|
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Debug.Build.0 = Debug|Win32
|
||||||
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Debug64.ActiveCfg = Debug64|Win32
|
|
||||||
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Debug64.Build.0 = Debug64|Win32
|
|
||||||
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Profile.ActiveCfg = Profile|Win32
|
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Profile.ActiveCfg = Profile|Win32
|
||||||
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Profile.Build.0 = Profile|Win32
|
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Profile.Build.0 = Profile|Win32
|
||||||
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Release.ActiveCfg = Release|Win32
|
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Release.ActiveCfg = Release|Win32
|
||||||
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Release.Build.0 = Release|Win32
|
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Release.Build.0 = Release|Win32
|
||||||
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Release64.ActiveCfg = Release64|Win32
|
|
||||||
{330712B5-8B27-4B17-B3CF-7A02CC0F93C3}.Release64.Build.0 = Release64|Win32
|
|
||||||
{B859D542-781E-4647-BCAB-3FE5ED077366}.Debug.ActiveCfg = Debug|Win32
|
{B859D542-781E-4647-BCAB-3FE5ED077366}.Debug.ActiveCfg = Debug|Win32
|
||||||
{B859D542-781E-4647-BCAB-3FE5ED077366}.Debug.Build.0 = Debug|Win32
|
{B859D542-781E-4647-BCAB-3FE5ED077366}.Debug.Build.0 = Debug|Win32
|
||||||
{B859D542-781E-4647-BCAB-3FE5ED077366}.Debug64.ActiveCfg = Debug64|Win32
|
|
||||||
{B859D542-781E-4647-BCAB-3FE5ED077366}.Debug64.Build.0 = Debug64|Win32
|
|
||||||
{B859D542-781E-4647-BCAB-3FE5ED077366}.Profile.ActiveCfg = Profile|Win32
|
{B859D542-781E-4647-BCAB-3FE5ED077366}.Profile.ActiveCfg = Profile|Win32
|
||||||
{B859D542-781E-4647-BCAB-3FE5ED077366}.Profile.Build.0 = Profile|Win32
|
{B859D542-781E-4647-BCAB-3FE5ED077366}.Profile.Build.0 = Profile|Win32
|
||||||
{B859D542-781E-4647-BCAB-3FE5ED077366}.Release.ActiveCfg = Release|Win32
|
{B859D542-781E-4647-BCAB-3FE5ED077366}.Release.ActiveCfg = Release|Win32
|
||||||
{B859D542-781E-4647-BCAB-3FE5ED077366}.Release.Build.0 = Release|Win32
|
{B859D542-781E-4647-BCAB-3FE5ED077366}.Release.Build.0 = Release|Win32
|
||||||
{B859D542-781E-4647-BCAB-3FE5ED077366}.Release64.ActiveCfg = Release64|Win32
|
|
||||||
{B859D542-781E-4647-BCAB-3FE5ED077366}.Release64.Build.0 = Release64|Win32
|
|
||||||
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Debug.ActiveCfg = Debug|Win32
|
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Debug.ActiveCfg = Debug|Win32
|
||||||
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Debug.Build.0 = Debug|Win32
|
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Debug.Build.0 = Debug|Win32
|
||||||
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Debug64.ActiveCfg = Debug64|Win32
|
|
||||||
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Debug64.Build.0 = Debug64|Win32
|
|
||||||
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Profile.ActiveCfg = Profile|Win32
|
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Profile.ActiveCfg = Profile|Win32
|
||||||
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Profile.Build.0 = Profile|Win32
|
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Profile.Build.0 = Profile|Win32
|
||||||
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Release.ActiveCfg = Release|Win32
|
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Release.ActiveCfg = Release|Win32
|
||||||
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Release.Build.0 = Release|Win32
|
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Release.Build.0 = Release|Win32
|
||||||
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Release64.ActiveCfg = Release64|Win32
|
|
||||||
{79659D44-EC28-42B9-9475-6C0D62D0AAE0}.Release64.Build.0 = Release64|Win32
|
|
||||||
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Debug.ActiveCfg = Debug|Win32
|
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Debug.ActiveCfg = Debug|Win32
|
||||||
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Debug.Build.0 = Debug|Win32
|
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Debug.Build.0 = Debug|Win32
|
||||||
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Debug64.ActiveCfg = Debug64|Win32
|
|
||||||
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Debug64.Build.0 = Debug64|Win32
|
|
||||||
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Profile.ActiveCfg = Profile|Win32
|
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Profile.ActiveCfg = Profile|Win32
|
||||||
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Profile.Build.0 = Profile|Win32
|
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Profile.Build.0 = Profile|Win32
|
||||||
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Release.ActiveCfg = Release|Win32
|
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Release.ActiveCfg = Release|Win32
|
||||||
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Release.Build.0 = Release|Win32
|
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Release.Build.0 = Release|Win32
|
||||||
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Release64.ActiveCfg = Release64|Win32
|
|
||||||
{C14E3D2B-8189-4570-A4E3-9010C873E4FD}.Release64.Build.0 = Release64|Win32
|
|
||||||
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Debug.ActiveCfg = Debug|Win32
|
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Debug.ActiveCfg = Debug|Win32
|
||||||
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Debug.Build.0 = Debug|Win32
|
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Debug.Build.0 = Debug|Win32
|
||||||
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Debug64.ActiveCfg = Debug64|Win32
|
|
||||||
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Debug64.Build.0 = Debug64|Win32
|
|
||||||
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Profile.ActiveCfg = Profile|Win32
|
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Profile.ActiveCfg = Profile|Win32
|
||||||
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Profile.Build.0 = Profile|Win32
|
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Profile.Build.0 = Profile|Win32
|
||||||
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Release.ActiveCfg = Release|Win32
|
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Release.ActiveCfg = Release|Win32
|
||||||
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Release.Build.0 = Release|Win32
|
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Release.Build.0 = Release|Win32
|
||||||
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Release64.ActiveCfg = Release64|Win32
|
|
||||||
{EDB0DE67-8215-4AF7-ACA1-F23CB11FF211}.Release64.Build.0 = Release64|Win32
|
|
||||||
{17F83AAB-352D-4F68-ADA6-09F36D86826F}.Debug.ActiveCfg = Debug|Win32
|
{17F83AAB-352D-4F68-ADA6-09F36D86826F}.Debug.ActiveCfg = Debug|Win32
|
||||||
{17F83AAB-352D-4F68-ADA6-09F36D86826F}.Debug.Build.0 = Debug|Win32
|
{17F83AAB-352D-4F68-ADA6-09F36D86826F}.Debug.Build.0 = Debug|Win32
|
||||||
{17F83AAB-352D-4F68-ADA6-09F36D86826F}.Debug64.ActiveCfg = Debug64|Win32
|
|
||||||
{17F83AAB-352D-4F68-ADA6-09F36D86826F}.Debug64.Build.0 = Debug64|Win32
|
|
||||||
{17F83AAB-352D-4F68-ADA6-09F36D86826F}.Profile.ActiveCfg = Profile|Win32
|
{17F83AAB-352D-4F68-ADA6-09F36D86826F}.Profile.ActiveCfg = Profile|Win32
|
||||||
{17F83AAB-352D-4F68-ADA6-09F36D86826F}.Release.ActiveCfg = Release|Win32
|
{17F83AAB-352D-4F68-ADA6-09F36D86826F}.Release.ActiveCfg = Release|Win32
|
||||||
{17F83AAB-352D-4F68-ADA6-09F36D86826F}.Release64.ActiveCfg = Release64|Win32
|
|
||||||
{601CF164-F483-4DE7-8014-64BDD30680B5}.Debug.ActiveCfg = Debug|Win32
|
{601CF164-F483-4DE7-8014-64BDD30680B5}.Debug.ActiveCfg = Debug|Win32
|
||||||
{601CF164-F483-4DE7-8014-64BDD30680B5}.Debug.Build.0 = Debug|Win32
|
{601CF164-F483-4DE7-8014-64BDD30680B5}.Debug.Build.0 = Debug|Win32
|
||||||
{601CF164-F483-4DE7-8014-64BDD30680B5}.Debug64.ActiveCfg = Debug64|Win32
|
|
||||||
{601CF164-F483-4DE7-8014-64BDD30680B5}.Debug64.Build.0 = Debug64|Win32
|
|
||||||
{601CF164-F483-4DE7-8014-64BDD30680B5}.Profile.ActiveCfg = Profile|Win32
|
{601CF164-F483-4DE7-8014-64BDD30680B5}.Profile.ActiveCfg = Profile|Win32
|
||||||
{601CF164-F483-4DE7-8014-64BDD30680B5}.Profile.Build.0 = Profile|Win32
|
{601CF164-F483-4DE7-8014-64BDD30680B5}.Profile.Build.0 = Profile|Win32
|
||||||
{601CF164-F483-4DE7-8014-64BDD30680B5}.Release.ActiveCfg = Release|Win32
|
{601CF164-F483-4DE7-8014-64BDD30680B5}.Release.ActiveCfg = Release|Win32
|
||||||
{601CF164-F483-4DE7-8014-64BDD30680B5}.Release.Build.0 = Release|Win32
|
{601CF164-F483-4DE7-8014-64BDD30680B5}.Release.Build.0 = Release|Win32
|
||||||
{601CF164-F483-4DE7-8014-64BDD30680B5}.Release64.ActiveCfg = Release64|Win32
|
|
||||||
{601CF164-F483-4DE7-8014-64BDD30680B5}.Release64.Build.0 = Release64|Win32
|
|
||||||
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Debug.ActiveCfg = Debug|Win32
|
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Debug.ActiveCfg = Debug|Win32
|
||||||
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Debug.Build.0 = Debug|Win32
|
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Debug.Build.0 = Debug|Win32
|
||||||
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Debug64.ActiveCfg = Debug64|Win32
|
|
||||||
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Debug64.Build.0 = Debug64|Win32
|
|
||||||
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Profile.ActiveCfg = Profile|Win32
|
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Profile.ActiveCfg = Profile|Win32
|
||||||
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Profile.Build.0 = Profile|Win32
|
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Profile.Build.0 = Profile|Win32
|
||||||
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Release.ActiveCfg = Release|Win32
|
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Release.ActiveCfg = Release|Win32
|
||||||
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Release.Build.0 = Release|Win32
|
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Release.Build.0 = Release|Win32
|
||||||
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Release64.ActiveCfg = Release64|Win32
|
|
||||||
{4C837BEC-A428-4287-84B3-8F8F9DE7FA00}.Release64.Build.0 = Release64|Win32
|
|
||||||
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Debug.ActiveCfg = Debug|Win32
|
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Debug.ActiveCfg = Debug|Win32
|
||||||
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Debug.Build.0 = Debug|Win32
|
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Debug.Build.0 = Debug|Win32
|
||||||
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Debug64.ActiveCfg = Debug64|Win32
|
|
||||||
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Debug64.Build.0 = Debug64|Win32
|
|
||||||
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Profile.ActiveCfg = Profile|Win32
|
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Profile.ActiveCfg = Profile|Win32
|
||||||
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Profile.Build.0 = Profile|Win32
|
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Profile.Build.0 = Profile|Win32
|
||||||
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Release.ActiveCfg = Release|Win32
|
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Release.ActiveCfg = Release|Win32
|
||||||
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Release.Build.0 = Release|Win32
|
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Release.Build.0 = Release|Win32
|
||||||
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Release64.ActiveCfg = Release64|Win32
|
|
||||||
{0EE778AB-8445-40DB-8F65-6BE378A91B97}.Release64.Build.0 = Release64|Win32
|
|
||||||
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Debug.ActiveCfg = Debug|Win32
|
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Debug.ActiveCfg = Debug|Win32
|
||||||
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Debug.Build.0 = Debug|Win32
|
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Debug.Build.0 = Debug|Win32
|
||||||
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Debug64.ActiveCfg = Debug64|Win32
|
|
||||||
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Debug64.Build.0 = Debug64|Win32
|
|
||||||
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Profile.ActiveCfg = Profile|Win32
|
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Profile.ActiveCfg = Profile|Win32
|
||||||
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Profile.Build.0 = Profile|Win32
|
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Profile.Build.0 = Profile|Win32
|
||||||
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Release.ActiveCfg = Release|Win32
|
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Release.ActiveCfg = Release|Win32
|
||||||
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Release.Build.0 = Release|Win32
|
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Release.Build.0 = Release|Win32
|
||||||
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Release64.ActiveCfg = Release64|Win32
|
|
||||||
{EF495253-2EEC-4F83-B6C0-D651F88B2198}.Release64.Build.0 = Release64|Win32
|
|
||||||
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Debug.ActiveCfg = Debug|Win32
|
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Debug.ActiveCfg = Debug|Win32
|
||||||
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Debug.Build.0 = Debug|Win32
|
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Debug.Build.0 = Debug|Win32
|
||||||
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Debug64.ActiveCfg = Debug64|Win32
|
|
||||||
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Debug64.Build.0 = Debug64|Win32
|
|
||||||
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Profile.ActiveCfg = Profile|Win32
|
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Profile.ActiveCfg = Profile|Win32
|
||||||
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Profile.Build.0 = Profile|Win32
|
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Profile.Build.0 = Profile|Win32
|
||||||
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Release.ActiveCfg = Release|Win32
|
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Release.ActiveCfg = Release|Win32
|
||||||
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Release.Build.0 = Release|Win32
|
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Release.Build.0 = Release|Win32
|
||||||
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Release64.ActiveCfg = Release64|Win32
|
|
||||||
{1D80D05F-BCF5-4971-8F06-D9581FD3B1F4}.Release64.Build.0 = Release64|Win32
|
|
||||||
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Debug.ActiveCfg = Debug|Win32
|
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Debug.ActiveCfg = Debug|Win32
|
||||||
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Debug.Build.0 = Debug|Win32
|
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Debug.Build.0 = Debug|Win32
|
||||||
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Debug64.ActiveCfg = Debug64|Win32
|
|
||||||
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Debug64.Build.0 = Debug64|Win32
|
|
||||||
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Profile.ActiveCfg = Profile|Win32
|
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Profile.ActiveCfg = Profile|Win32
|
||||||
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Profile.Build.0 = Profile|Win32
|
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Profile.Build.0 = Profile|Win32
|
||||||
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Release.ActiveCfg = Release|Win32
|
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Release.ActiveCfg = Release|Win32
|
||||||
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Release.Build.0 = Release|Win32
|
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Release.Build.0 = Release|Win32
|
||||||
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Release64.ActiveCfg = Release64|Win32
|
|
||||||
{749A2F7C-B9C3-4CEB-B1B2-1D4587E68719}.Release64.Build.0 = Release64|Win32
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
|
|
@ -934,7 +934,7 @@ fix_chaosgates(void)
|
||||||
for (r = regions; r; r=r->next) {
|
for (r = regions; r; r=r->next) {
|
||||||
const attrib *a = a_findc(r->attribs, &at_direction);
|
const attrib *a = a_findc(r->attribs, &at_direction);
|
||||||
|
|
||||||
while (a!=NULL) {
|
while (a!=NULL && a->type==&at_direction) {
|
||||||
spec_direction * sd = (spec_direction *)a->data.v;
|
spec_direction * sd = (spec_direction *)a->data.v;
|
||||||
region * r2 = findregion(sd->x, sd->y);
|
region * r2 = findregion(sd->x, sd->y);
|
||||||
if (r2!=NULL) {
|
if (r2!=NULL) {
|
||||||
|
@ -947,7 +947,7 @@ fix_chaosgates(void)
|
||||||
b = new_border(&bt_chaosgate, r, r2);
|
b = new_border(&bt_chaosgate, r, r2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
a = a->nexttype;
|
a = a->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -24,7 +24,7 @@ namespace eressea {
|
||||||
objects::get(const char * name) {
|
objects::get(const char * name) {
|
||||||
lua_State * L = (lua_State *)global.vm_state;
|
lua_State * L = (lua_State *)global.vm_state;
|
||||||
attrib * a = a_find(*mAttribPtr, &at_object);
|
attrib * a = a_find(*mAttribPtr, &at_object);
|
||||||
for (;a;a=a->nexttype) {
|
for (;a && a->type==&at_object;a=a->next) {
|
||||||
if (strcmp(object_name(a), name)==0) {
|
if (strcmp(object_name(a), name)==0) {
|
||||||
variant val;
|
variant val;
|
||||||
object_type type;
|
object_type type;
|
||||||
|
@ -61,15 +61,14 @@ namespace eressea {
|
||||||
|
|
||||||
static void set_object(attrib **attribs, const char * name, object_type type, variant val) {
|
static void set_object(attrib **attribs, const char * name, object_type type, variant val) {
|
||||||
attrib * a = a_find(*attribs, &at_object);
|
attrib * a = a_find(*attribs, &at_object);
|
||||||
for (;a;a=a->nexttype) {
|
for (;a && a->type==&at_object;a=a->next) {
|
||||||
if (strcmp(object_name(a), name)==0) break;
|
if (strcmp(object_name(a), name)==0) {
|
||||||
}
|
|
||||||
if (a==NULL) {
|
|
||||||
a = a_add(attribs, object_create(name, type, val));
|
|
||||||
} else {
|
|
||||||
object_set(a, type, val);
|
object_set(a, type, val);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
a = a_add(attribs, object_create(name, type, val));
|
||||||
|
}
|
||||||
|
|
||||||
template<> void
|
template<> void
|
||||||
objects::set<int, TINTEGER>(const char * name, int value) {
|
objects::set<int, TINTEGER>(const char * name, int value) {
|
||||||
|
|
|
@ -200,128 +200,6 @@
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
|
||||||
Name="Release64|Win32"
|
|
||||||
OutputDirectory="$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="1"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
|
||||||
CharacterSet="2">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
InlineFunctionExpansion="1"
|
|
||||||
AdditionalIncludeDirectories="../common/kernel,../common/gamecode,../common/util,../common,.."
|
|
||||||
PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"
|
|
||||||
StringPooling="TRUE"
|
|
||||||
RuntimeLibrary="2"
|
|
||||||
EnableFunctionLevelLinking="TRUE"
|
|
||||||
DisableLanguageExtensions="TRUE"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
PrecompiledHeaderFile=".\Release/mapper.pch"
|
|
||||||
AssemblerListingLocation=".\Release/"
|
|
||||||
ObjectFile=".\Release/"
|
|
||||||
ProgramDataBaseFileName=".\Release/"
|
|
||||||
WarningLevel="4"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
DebugInformationFormat="3"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalOptions="/MACHINE:AMD64"
|
|
||||||
AdditionalDependencies="curses.lib libxml2.lib"
|
|
||||||
OutputFile=".\Release/mapper.exe"
|
|
||||||
LinkIncremental="1"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
ProgramDatabaseFile=".\Release/mapper.pdb"
|
|
||||||
SubSystem="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
TypeLibraryName=".\Release/mapper.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG"
|
|
||||||
Culture="1031"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedWrapperGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Debug64|Win32"
|
|
||||||
OutputDirectory="$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="1"
|
|
||||||
UseOfMFC="0"
|
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
|
||||||
CharacterSet="2">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
ImproveFloatingPointConsistency="FALSE"
|
|
||||||
AdditionalIncludeDirectories="../common/kernel,../common/gamecode,../common/util,../common,.."
|
|
||||||
PreprocessorDefinitions="_CONSOLE,WIN32"
|
|
||||||
BasicRuntimeChecks="0"
|
|
||||||
BufferSecurityCheck="FALSE"
|
|
||||||
DisableLanguageExtensions="TRUE"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
PrecompiledHeaderThrough="stdafx.h"
|
|
||||||
PrecompiledHeaderFile=".\Debug/mapper.pch"
|
|
||||||
WarningLevel="4"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
Detect64BitPortabilityProblems="FALSE"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
CompileAs="0"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalOptions="/MACHINE:I386"
|
|
||||||
AdditionalDependencies="curses.lib libxml2.lib"
|
|
||||||
LinkIncremental="2"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
AdditionalLibraryDirectories=""
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
ProgramDatabaseFile=".\Debug/mapper.pdb"
|
|
||||||
SubSystem="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
TypeLibraryName=".\Debug/mapper.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG"
|
|
||||||
Culture="1031"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedWrapperGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
|
||||||
</Configuration>
|
|
||||||
</Configurations>
|
</Configurations>
|
||||||
<References>
|
<References>
|
||||||
</References>
|
</References>
|
||||||
|
|
Loading…
Reference in a new issue