diff --git a/src/common/gamecode/creport.c b/src/common/gamecode/creport.c index 078a44959..76bd4711f 100644 --- a/src/common/gamecode/creport.c +++ b/src/common/gamecode/creport.c @@ -578,7 +578,7 @@ cr_output_unit(FILE * F, const region * r, boolean itemcloak = is_cursed(u->attribs, C_ITEMCLOAK, 0); building * b; const char * pzTmp; - skill_t sk; + skill * sv; strlist *S; const attrib *a_fshidden = NULL; @@ -712,14 +712,15 @@ cr_output_unit(FILE * F, const region * r, /* talents */ pr = 0; - for (sk = 0; sk != MAXSKILLS; ++sk) { - if (has_skill(u, sk)) { + for (sv = u->skills; sv != u->skills + u->skill_size; ++sv) { + if (sv->level>0) { + skill_t sk = sv->id; int esk = eff_skill(u, sk, r); if (!pr) { pr = 1; fprintf(F, "TALENTE\n"); } - fprintf(F, "%d %d;%s\n", u->number*level_days(get_level(u, sk)), esk, + fprintf(F, "%d %d;%s\n", u->number*level_days(sv->level), esk, add_translation(skillname(sk, NULL), skillname(sk, f->locale))); } } diff --git a/src/common/gamecode/monster.c b/src/common/gamecode/monster.c index 816fd78bb..ba6d0a999 100644 --- a/src/common/gamecode/monster.c +++ b/src/common/gamecode/monster.c @@ -864,25 +864,25 @@ learn_monster(unit *u) { int c = 0; int n; - skill_t sk; + skill * sv; /* Monster lernt ein zufälliges Talent aus allen, in denen es schon * Lerntage hat. */ - for(sk=0;skskills; sv != u->skills + u->skill_size; ++sv) { + if (sv->level>0) ++c; + } if(c == 0) return; n = rand()%c + 1; c = 0; - for (sk=0;skskills; sv != u->skills + u->skill_size; ++sv) { + if (sv->level>0) { + if (++c == n) { sprintf(buf, "%s %s", locale_string(u->faction->locale, keywords[K_STUDY]), - skillname(sk, u->faction->locale)); + skillname(sv->id, u->faction->locale)); set_string(&u->thisorder, buf); break; } diff --git a/src/common/gamecode/report.c b/src/common/gamecode/report.c index 246b8ef8a..088066e9a 100644 --- a/src/common/gamecode/report.c +++ b/src/common/gamecode/report.c @@ -3170,7 +3170,6 @@ typedef struct summary { summary * make_summary(boolean count_new) { - char sk; faction *f; region *r; unit *u; @@ -3228,6 +3227,8 @@ make_summary(boolean count_new) for (u = r->units; u; u = u->next) { f = u->faction; if (u->faction->no != MONSTER_FACTION) { + skill * sv; + s->nunits++; s->playerpop += u->number; s->spielerpferde += get_item(u, I_HORSE); @@ -3264,9 +3265,9 @@ make_summary(boolean count_new) s->spielerpferde += get_item(u, I_HORSE); - for (sk = 0; sk < MAXSKILLS; sk++) { - int aktskill; - aktskill = eff_skill(u, sk, r); + for (sv = u->skills; sv != u->skills + u->skill_size; ++sv) { + skill_t sk = sv->id; + int aktskill = eff_skill(u, sk, r); if (aktskill > s->maxskill) s->maxskill = aktskill; } if (!fval(f, FL_DH)) { diff --git a/src/common/kernel/combatspells.c b/src/common/kernel/combatspells.c index ec60a0aac..90775b79e 100644 --- a/src/common/kernel/combatspells.c +++ b/src/common/kernel/combatspells.c @@ -490,10 +490,10 @@ static skill_t random_skill(unit *u) { int n = 0; - skill_t sk; + skill * sv; - for(sk=0;skskills; sv != u->skills + u->skill_size; ++sv) { + if (sv->level>0) ++n; } if(n == 0) @@ -501,10 +501,9 @@ random_skill(unit *u) n = rand()%n; - for(sk=0;skskills; sv != u->skills + u->skill_size; ++sv) { + if (sv->level>0) { + if (n-- == 0) return sv->id; } } diff --git a/src/common/kernel/eressea.c b/src/common/kernel/eressea.c index c0294d303..483520a0a 100644 --- a/src/common/kernel/eressea.c +++ b/src/common/kernel/eressea.c @@ -785,11 +785,11 @@ scale_number (unit * u, int n) } data->value = snew; } - for (sk = 0; sk < MAXSKILLS; sk++) { - if (n==0 || u->number == 0) { - remove_skill(u, sk); - } - } + if (u->number==0 || n==0) { + for (sk = 0; sk < MAXSKILLS; sk++) { + remove_skill(u, sk); + } + } set_number(u, n); } diff --git a/src/common/kernel/magic.c b/src/common/kernel/magic.c index 94d7b0779..baae2d2b7 100644 --- a/src/common/kernel/magic.c +++ b/src/common/kernel/magic.c @@ -1263,14 +1263,15 @@ target_resists_magic(unit *magician, void *obj, int objtyp, int t_bonus) case TYP_UNIT: { int at, pa = 0; - skill_t i; + skill * sv; + unit * u = (unit*)obj; - if(fspecial(((unit *)obj)->faction, FS_MAGICIMMUNE)) return true; + if (fspecial(u->faction, FS_MAGICIMMUNE)) return true; at = effskill(magician, SK_MAGIC); - for (i=0;iskills; sv != u->skills + u->skill_size; ++sv) { + int sk = effskill(u, sv->id); if (pa < sk) pa = sk; } diff --git a/src/common/kernel/spell.c b/src/common/kernel/spell.c index 51d27d78a..eba317cda 100644 --- a/src/common/kernel/spell.c +++ b/src/common/kernel/spell.c @@ -6381,7 +6381,7 @@ sp_disruptastral(castorder *co) rl = all_in_range(rt, (int)(power/5)); - for(rl2=rl; rl; rl=rl->next) { + for (rl2=rl; rl2!=NULL; rl2=rl2->next) { attrib *a, *a2; spec_direction *sd; @@ -6391,7 +6391,7 @@ sp_disruptastral(castorder *co) /* Nicht-Permanente Tore zerstören */ a = a_find(r->attribs, &at_direction); - while(a) { + while (a!=NULL) { a2 = a->nexttype; sd = (spec_direction *)(a->data.v); if(sd->duration != -1) a_remove(&r->attribs, a); @@ -6424,9 +6424,9 @@ sp_disruptastral(castorder *co) } /* Kontakt unterbinden */ - create_curse(mage,&rl2->region->attribs, ct_find("astralblock"), + create_curse(mage, &rl2->region->attribs, ct_find("astralblock"), power, duration, 100, 0); - addmessage(r, 0, "Mächtige Magie verhindert den Kontakt zur Realität.", + addmessage(rl2->region, 0, "Mächtige Magie verhindert den Kontakt zur Realität.", MSG_COMMENT, ML_IMPORTANT); }