Merge branch 'Autolehrer' of github.com:CTD1/eressea-server-bugfixing into CTD1-Autolehrer

This commit is contained in:
Enno Rehling 2014-10-18 19:46:26 +02:00
commit a09b53c0c4
1 changed files with 22 additions and 16 deletions

View File

@ -493,25 +493,31 @@ int teach_cmd(unit * u, struct order *ord)
return 0; return 0;
} }
static double study_speedup(unit * u) static double study_speedup(unit * u, skill_t s, int rule_type)
{ {
#define MINTURN 5 /* 5 */ #define MINTURN 16
#define OFSTURN 2 /* 2 */ double learnweeks = 0;
int i;
if (turn > MINTURN) { if (turn > MINTURN) {
static int speed_rule = -1; if (rule_type == 1) {
if (speed_rule < 0) {
speed_rule = get_param_int(global.parameters, "study.speedup", 0);
}
if (speed_rule == 1) {
double learn_age = OFSTURN;
int i;
for (i = 0; i != u->skill_size; ++i) { for (i = 0; i != u->skill_size; ++i) {
skill *sv = u->skills + i; skill *sv = u->skills + i;
double learn_time = sv->level * (sv->level + 1) / 2.0; if (sv->id == s){
learn_age += learn_time; learnweeks = sv->level * (sv->level + 1) / 2.0;
if (learnweeks < turn / 3) {
return 2.0;
}
}
} }
if (learn_age < turn) { return 2.0; /* If the skill was not found it is the first study. */
return 2.0 - learn_age / turn; }
if (rule_type == 2) {
for (i = 0; i != u->skill_size; ++i) {
skill *sv = u->skills + i;
learnweeks = +(sv->level * (sv->level + 1) / 2.0);
}
if (learnweeks < turn / 2) {
return 2.0;
} }
} }
} }
@ -531,6 +537,7 @@ int learn_cmd(unit * u, order * ord)
int money = 0; int money = 0;
skill_t sk; skill_t sk;
int maxalchemy = 0; int maxalchemy = 0;
int speed_rule = get_param_int(global.parameters, "study.speedup", 0);
static int learn_newskills = -1; static int learn_newskills = -1;
if (learn_newskills < 0) { if (learn_newskills < 0) {
const char *str = get_param(global.parameters, "study.newskills"); const char *str = get_param(global.parameters, "study.newskills");
@ -539,7 +546,6 @@ int learn_cmd(unit * u, order * ord)
else else
learn_newskills = 1; learn_newskills = 1;
} }
if ((u_race(u)->flags & RCF_NOLEARN) || fval(u, UFL_WERE)) { if ((u_race(u)->flags & RCF_NOLEARN) || fval(u, UFL_WERE)) {
ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "error_race_nolearn", "race", ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "error_race_nolearn", "race",
u_race(u))); u_race(u)));
@ -732,7 +738,7 @@ int learn_cmd(unit * u, order * ord)
teach->value -= u->number * 10; teach->value -= u->number * 10;
} }
multi *= study_speedup(u); multi *= study_speedup(u, sk, speed_rule);
days = study_days(u, sk); days = study_days(u, sk);
days = (int)((days + teach->value) * multi); days = (int)((days + teach->value) * multi);