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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+