diff --git a/src/common/gamecode/economy.c b/src/common/gamecode/economy.c index aebe55805..e04519c66 100644 --- a/src/common/gamecode/economy.c +++ b/src/common/gamecode/economy.c @@ -546,7 +546,7 @@ givemen(int n, unit * u, unit * u2, const char * cmd) } else if (u == u2) { error = 10; #if RACE_ADJUSTMENTS - } else if (u->race == new_race[RC_URUK]) { + } else if (u->race == new_race[RC_URUK] || u->race == new_race[RC_SNOT]) { /* Uruks/Snotlings können nicht an Bauern übergeben werden. */ error = 307; #endif diff --git a/src/common/gamecode/study.c b/src/common/gamecode/study.c index a4e865656..cedbf6d62 100644 --- a/src/common/gamecode/study.c +++ b/src/common/gamecode/study.c @@ -132,11 +132,6 @@ teach_unit(unit * teacher, unit * student, int teaching, skill_t sk, boolean rep { attrib * a; int n; -#ifdef RANDOMIZED_LEARNING -#ifdef SKILLMODIFIESLEARNING - int smod, lmod, learning; -#endif -#endif /* learning sind die Tage, die sie schon durch andere Lehrer zugute * geschrieben bekommen haben. Total darf dies nicht über 30 Tage pro Mann @@ -150,23 +145,7 @@ teach_unit(unit * teacher, unit * student, int teaching, skill_t sk, boolean rep return 0; } -#ifdef RANDOMIZED_LEARNING -#ifdef SKILLMODIFIESLEARNING - smod = rc_skillmod(student->race, student->region, sk); - lmod = 5 * smod; - if(smod < 0) { - lmod -= 5; - } else if(smod > 0) { - lmod += 5; - } - learning = max(0, 30 + lmod); - n = student->number * dice(2, learning); -#else - n = student->number * dice(2,30); -#endif -#else n = student->number * 30; -#endif a = a_find(student->attribs, &at_learning); if (a!=NULL) n -= a->data.i; @@ -193,7 +172,13 @@ teach_unit(unit * teacher, unit * student, int teaching, skill_t sk, boolean rep /* Jeder Schüler zusätzlich +10 Tage wenn in Uni. */ a->data.i += (n / 30) * 10; /* learning erhöhen */ /* Lehrer zusätzlich +1 Tag pro Schüler. */ - set_skill(teacher, sk, get_skill(teacher, sk) + (n / 30)); +#if SKILLPOINTS + change_skill(teacher, sk, n / 30); +#else + if (learn_skill(teacher, sk, n / 30)) { + change_skill(teacher, sk, teacher->number); + } +#endif } /* sonst nehmen sie nicht am Unterricht teil */ } /* Teaching ist die Anzahl Leute, denen man noch was beibringen kann. Da @@ -310,7 +295,7 @@ teach(region * r, unit * u) if (igetkeyword(student->thisorder, student->faction->locale) == K_STUDY) { /* Input ist nun von student->thisorder !! */ sk = getskill(student->faction->locale); - if (sk != NOSKILL && eff_skill(u, sk, r) > eff_skill(student, sk, r)) { + if (sk != NOSKILL && eff_skill(u, sk, r) >= eff_skill(student, sk, r)+TEACHDIFFERENCE) { teaching -= teach_unit(u, student, teaching, sk, true); } } @@ -445,11 +430,6 @@ learn(void) int i, l; int warrior_skill; int studycost; -#ifdef RANDOMIZED_LEARNING -#ifdef SKILLMODIFIESLEARNING - int smod, lmod, learning; -#endif -#endif /* lernen nach lehren */ @@ -493,6 +473,13 @@ learn(void) cmistake(u, findorder(u, u->thisorder), 77, MSG_EVENT); continue; } + /* snotlings können Talente nur bis T8 lernen */ + if (u->race == new_race[RC_SNOT]){ + if (get_level(u, i) >= 8){ + cmistake(u, findorder(u, u->thisorder), 308, MSG_EVENT); + continue; + } + } p = studycost = study_cost(u,i); a = a_find(u->attribs, &at_learning); @@ -657,25 +644,15 @@ learn(void) } #endif -#ifdef RANDOMIZED_LEARNING -#ifdef SKILLMODIFIESLEARNING - smod = rc_skillmod(u->race, u->region, (skill_t)i); - lmod = 5 * smod; - if(smod < 0) { - lmod -= 5; - } else if(smod > 0) { - lmod += 5; - } - learning = max(0, 30 + lmod); - days = (int)((u->number * dice(2, learning) + a->data.i) * multi); -#else - days = (int)((u->number * dice(2, 30) + a->data.i) * multi); -#endif -#else days = (int)((u->number * 30 + a->data.i) * multi); -#endif if (fval(u, FL_HUNGER)) days = days / 2; +#if SKILLPOINTS change_skill(u, (skill_t)i, days); +#else + if (learn_skill(u, (skill_t)i, days)) { + change_skill(u, (skill_t)i, u->number); + } +#endif if (a) { a_remove(&u->attribs, a); a = NULL; diff --git a/src/common/kernel/eressea.c b/src/common/kernel/eressea.c index 390b1e003..2e7e25711 100644 --- a/src/common/kernel/eressea.c +++ b/src/common/kernel/eressea.c @@ -2764,8 +2764,7 @@ wage(const region *r, const unit *u, boolean img) if (b) esize = buildingeffsize(b, img); if (u) { - /* TODO: Snotling! */ - wage = wagetable[esize][u->race == new_race[RC_ORC] || u->race == new_race[RC_URUK]]; + wage = wagetable[esize][u->race == new_race[RC_ORC] || u->race == new_race[RC_SNOT] || u->race == new_race[RC_URUK]]; if (fspecial(u->faction, FS_URBAN)) { wage += wagetable[esize][3]; } diff --git a/src/common/kernel/eressea.h b/src/common/kernel/eressea.h index 3c50b66a1..094ba1e4a 100644 --- a/src/common/kernel/eressea.h +++ b/src/common/kernel/eressea.h @@ -617,6 +617,7 @@ enum { RC_CAT, RC_AQUARIAN, RC_URUK, + RC_SNOT, RC_UNDEAD, /* 12 - Untoter */ RC_ILLUSION, diff --git a/src/common/kernel/race.c b/src/common/kernel/race.c index fe0da3ec0..d34c8d9c3 100644 --- a/src/common/kernel/race.c +++ b/src/common/kernel/race.c @@ -155,7 +155,7 @@ const struct race_syn race_synonyms[] = { /* required for old_race, do not change order! */ static const char * oldracenames[MAXRACES] = { - "dwarf", "elf", "orc", "goblin", "human", "troll", "demon", "insect", "halfling", "cat", "aquarian", "uruk" + "dwarf", "elf", "orc", "goblin", "human", "troll", "demon", "insect", "halfling", "cat", "aquarian", "uruk" "snotling" "undead", "illusion", "young dragon", "dragon", "wyrm", "ent", "catdragon", "dracoid", "special", "spell", diff --git a/src/common/settings-eressea.h b/src/common/settings-eressea.h index 9c94841c5..7109f85bb 100644 --- a/src/common/settings-eressea.h +++ b/src/common/settings-eressea.h @@ -27,4 +27,4 @@ #define SKILLPOINTS 1 #define TEACHDIFFERENCE 1 -#define PEASANT_ADJUSTMENT 0 +#define PEASANT_ADJUSTMENT 1 diff --git a/src/eressea/korrektur.c b/src/eressea/korrektur.c index 7d0cc0d78..ed43c069c 100644 --- a/src/eressea/korrektur.c +++ b/src/eressea/korrektur.c @@ -2529,7 +2529,7 @@ heal_all(void) #if PEASANT_ADJUSTMENT == 1 #define WEIGHT ((double)0.5) -#define PLWEIGHT ((double)0.75) +#define PLWEIGHT ((double)0.80) static int peasant_adjustment(void) @@ -2575,12 +2575,10 @@ peasant_adjustment(void) if(playerp * PLWEIGHT + rpeasants(r) > soll) { p_weg = (int)(min(((playerp * PLWEIGHT) + rpeasants(r)) - soll, rpeasants(r))); assert(p_weg >= 0); - /* if (p_weg > 0){ log_printf("BAUERN: war %d, minus %d, playerp %d\n", rpeasants(r), p_weg, playerp); } - */ pool += p_weg; rsetpeasants(r, rpeasants(r) - p_weg); assert(rpeasants(r) >= 0); diff --git a/src/res/de/messages.xml b/src/res/de/messages.xml index 0bc2d2b01..d4b461868 100644 --- a/src/res/de/messages.xml +++ b/src/res/de/messages.xml @@ -4313,6 +4313,19 @@ + + + + + + + + + "$unit($unit) in $region($region): '$command' - Dieses Talent kann nicht höher gelernt werden." + + + + diff --git a/src/res/en/messages.xml b/src/res/en/messages.xml index 7c2ccc326..9e8ac6f0a 100644 --- a/src/res/en/messages.xml +++ b/src/res/en/messages.xml @@ -2781,6 +2781,19 @@ + + + + + + + + + "$unit($unit) in $region($region): '$command' - This skill couldn't learned higher." + + + + diff --git a/src/res/races.xml b/src/res/races.xml index ebc8345b2..85f96c3ad 100644 --- a/src/res/races.xml +++ b/src/res/races.xml @@ -1118,6 +1118,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +