From d5999eaa21306eaf43b7a93cfe5e2129115c4f3b Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 12 Feb 2007 19:11:35 +0000 Subject: [PATCH] =?UTF-8?q?http://eressea.upb.de/mantis/view.php=3Fid=3D10?= =?UTF-8?q?57=20"Meldung=20=C3=BCber=20aus=20dem=20Astralraum=20auftauchen?= =?UTF-8?q?de=20Einheit=20erscheint=20nicht=20bei=20allen=20Parteien"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Meldung erschien in der falschen Region, und aehnliche auch bzw. nicht gut genug verborgen bei Tarnung. --- src/common/spells/spells.c | 39 ++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/common/spells/spells.c b/src/common/spells/spells.c index 575ef9d9d..34976d7e1 100644 --- a/src/common/spells/spells.c +++ b/src/common/spells/spells.c @@ -1790,6 +1790,8 @@ sp_treewalkenter(castorder *co) ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order, "feedback_no_contact", "target", u)); } else { int w; + message * m = NULL; + unit * u2; if (!can_survive(u, rt)) { cmistake(mage, co->order, 231, MSG_MAGIC); @@ -1810,7 +1812,17 @@ sp_treewalkenter(castorder *co) ADDMSG(&r->msgs, msg_message("astral_disappear", "unit", u)); /* Meldungen in der Zielregion */ - ADDMSG(&rt->msgs, msg_message("astral_appear", "unit", u)); + for (u2 = rt->units; u2; u2 = u2->next) freset(u2->faction, FL_DH); + for (u2 = rt->units; u2; u2 = u2->next ) { + if (!fval(u2->faction, FL_DH)) { + if (cansee(u2->faction, rt, u, 0)) { + fset(u2->faction, FL_DH); + if (!m) m = msg_message("astral_appear", "unit", u); + r_addmessage(rt, u2->faction, m); + } + } + } + if (m) msg_release(m); } } return erfolg; @@ -1934,13 +1946,13 @@ sp_treewalkexit(castorder *co) /* Meldungen in der Zielregion */ - for (u2 = r->units; u2; u2 = u2->next) freset(u2->faction, FL_DH); + for (u2 = rt->units; u2; u2 = u2->next) freset(u2->faction, FL_DH); for (u2 = rt->units; u2; u2 = u2->next ) { if (!fval(u2->faction, FL_DH)) { if (cansee(u2->faction, rt, u, 0)) { fset(u2->faction, FL_DH); if (!m) m = msg_message("astral_appear", "unit", u); - r_addmessage(r, u2->faction, m); + r_addmessage(rt, u2->faction, m); } } } @@ -5733,7 +5745,7 @@ sp_enterastral(castorder *co) if (cansee(u2->faction, rt, u, 0)) { fset(u2->faction, FL_DH); if (!m) m = msg_message("astral_appear", "unit", u); - r_addmessage(r, u2->faction, m); + r_addmessage(rt, u2->faction, m); } } } @@ -5853,7 +5865,7 @@ sp_pullastral(castorder *co) if (cansee(u2->faction, rt, u, 0)) { fset(u2->faction, FL_DH); if (!m) m = msg_message("astral_appear", "unit", u); - r_addmessage(r, u2->faction, m); + r_addmessage(rt, u2->faction, m); } } } @@ -5966,7 +5978,7 @@ sp_leaveastral(castorder *co) if (cansee(u2->faction, rt, u, 0)) { fset(u2->faction, FL_DH); if (!m) m = msg_message("astral_appear", "unit", u); - r_addmessage(r, u2->faction, m); + r_addmessage(rt, u2->faction, m); } } } @@ -6002,8 +6014,9 @@ sp_fetchastral(castorder *co) /* für jede Einheit in der Kommandozeile */ for (n=0; n!=pa->length; ++n) { - unit * u = pa->param[n]->data.u; + unit * u2, * u = pa->param[n]->data.u; int w; + message * m = NULL; if (pa->param[n]->flag & TARGET_NOTFOUND) continue; @@ -6065,7 +6078,17 @@ sp_fetchastral(castorder *co) ADDMSG(&ro->msgs, msg_message("astral_disappear", "unit", u)); /* Meldungen in der Zielregion */ - ADDMSG(&rt->msgs, msg_message("astral_appear", "unit", u)); + for (u2 = rt->units; u2; u2 = u2->next) freset(u2->faction, FL_DH); + for (u2 = rt->units; u2; u2 = u2->next ) { + if (!fval(u2->faction, FL_DH)) { + if (cansee(u2->faction, rt, u, 0)) { + fset(u2->faction, FL_DH); + if (!m) m = msg_message("astral_appear", "unit", u); + r_addmessage(rt, u2->faction, m); + } + } + } + if (m) msg_release(m); } if (rtl!=NULL) free_regionlist(rtl); return cast_level;