diff --git a/conf/e3/config.json b/conf/e3/config.json index 236001e1d..421a962a7 100644 --- a/conf/e3/config.json +++ b/conf/e3/config.json @@ -55,7 +55,7 @@ "rules.migrants.max": 0, "rules.reserve.twophase": true, "rules.owners.force_leave": false, - "rules.monsters.attack_chance": 0.0, + "rules.monsters.attack_chance": 0.1, "rules.transfermen": false, "rules.stealth.faction": true, "rules.stealth.anon_battle": false, diff --git a/res/eressea/races.xml b/res/eressea/races.xml index 26a63752f..7f6c6d873 100644 --- a/res/eressea/races.xml +++ b/res/eressea/races.xml @@ -430,7 +430,7 @@ - + @@ -733,7 +733,7 @@ - + @@ -745,7 +745,7 @@ - + @@ -758,7 +758,7 @@ - + @@ -1170,7 +1170,7 @@ - + diff --git a/src/kernel/race.c b/src/kernel/race.c index 748a5ee06..0339a1b49 100644 --- a/src/kernel/race.c +++ b/src/kernel/race.c @@ -175,8 +175,6 @@ race *rc_get_or_create(const char *zName) assert(zName); rc = rc_find_i(zName); if (!rc) { - char zBuffer[80]; - rc = (race *)calloc(sizeof(race), 1); rc->hitpoints = 1; rc->weight = PERSON_WEIGHT; @@ -189,8 +187,7 @@ race *rc_get_or_create(const char *zName) log_error("race '%s' has an invalid name. remove spaces\n", zName); assert(strchr(zName, ' ') == NULL); } - strcpy(zBuffer, zName); - rc->_name = _strdup(zBuffer); + rc->_name = _strdup(zName); rc->precombatspell = NULL; rc->attack[0].type = AT_COMBATSPELL; diff --git a/src/monsters.c b/src/monsters.c index 12acb9191..523c6f02a 100644 --- a/src/monsters.c +++ b/src/monsters.c @@ -146,10 +146,8 @@ static void reduce_weight(unit * u) static order *monster_attack(unit * u, const unit * target) { - if (u->region != target->region) - return NULL; - if (u->faction == target->faction) - return NULL; + assert(u->region == target->region); + assert(u->faction != target->faction); if (!cansee(u->faction, u->region, target, 0)) return NULL; if (monster_is_waiting(u)) @@ -167,7 +165,7 @@ static order *get_money_for_dragon(region * r, unit * u, int wanted) if (attack_chance > 0.0 && is_guard(u, GUARD_TAX)) { /* attackiere bewachende Einheiten nur wenn wir selbst schon bewachen */ for (u2 = r->units; u2; u2 = u2->next) { - if (u2 != u && is_guard(u2, GUARD_TAX)) { + if (u2 != u && is_guard(u2, GUARD_TAX) && u->faction!=u2->faction) { /*In E3 + E4 etwas problematisch, da der Regionsbesitzer immer bewacht. Der Drache greift also immer die Burg an!*/ order *ord = monster_attack(u, u2); if (ord) @@ -557,8 +555,7 @@ static void monster_attacks(unit * u) unit *u2; for (u2 = r->units; u2; u2 = u2->next) { - if (cansee(u->faction, r, u2, 0) && u2->faction != u->faction && inside_building(u2) != u->building - && chance(0.75)) { + if (u2->faction != u->faction && cansee(u->faction, r, u2, 0) && !inside_building(u2)) { order *ord = monster_attack(u, u2); if (ord) addlist(&u->orders, ord); diff --git a/src/move.c b/src/move.c index f5da898cc..459776915 100644 --- a/src/move.c +++ b/src/move.c @@ -950,9 +950,7 @@ static bool is_guardian_r(const unit * guard) if ((guard->flags & UFL_GUARD) == 0) return false; - if (!armedmen(guard, true) && !fval(u_race(guard), RCF_UNARMEDGUARD)) - return false; - return true; + return armedmen(guard, true) > 0 || fval(u_race(guard), RCF_UNARMEDGUARD); } bool is_guard(const struct unit * u, unsigned int mask) diff --git a/src/spells.c b/src/spells.c index 71591b3aa..252c6d8b3 100644 --- a/src/spells.c +++ b/src/spells.c @@ -6567,14 +6567,14 @@ static spelldata spell_functions[] = { { "analysedream", sp_analysedream, 0 }, { "disturbingdreams", sp_disturbingdreams, 0 }, { "sleep", sp_sleep, 0 }, - { "wisps", 0, 0 }, /* this spell is gone */ + { "wisps", 0, 0 }, /* TODO: this spell is gone */ { "gooddreams", sp_gooddreams, 0 }, { "illaundestroymagic", sp_destroy_magic, 0 }, { "clone", sp_clonecopy, 0 }, { "bad_dreams", sp_baddreams, 0 }, { "mindblast", sp_mindblast_temp, 0 }, { "orkdream", sp_sweetdreams, 0 }, - { "summon_alp", sp_summon_alp, 0 }, + { "summon_alp", sp_summon_alp, 0 }, // TODO: this spell is disabled everywhere /* M_CERDDOR */ { "appeasement", sp_denyattack, 0 }, { "song_of_healing", sp_healing, 0 },