Geloeschte Aliase durch Familienaliase ersetzen.
Werden Aliase im Char geloescht, werden nun ggf.
gleichnamige Familienaliase im Anschluss aktiviert,
welche vorher ueberschattet wurden.
Hierzu wurde das Mergen der Aliase nochmal umgebaut
und dann auch hierzu verwendet.
Change-Id: I43c2f6b285a54d217ef005b558329c7a571a699e
diff --git a/std/player/command.c b/std/player/command.c
index 1659fe1..36fee46 100644
--- a/std/player/command.c
+++ b/std/player/command.c
@@ -135,11 +135,39 @@
return 1;
}
-private void merge_family_aliases()
+// Wenn keine bestimmten Aliasnamen angegeben sind, werden alle
+// Familienaliase geholt und mit den Charaliasen vereinigt.
+// Sonst werden nur bestimmte ermittelt und der Liste der aktiven
+// Aliase ersetzt/ergaenzt.
+// Wenn <verbose>, dann wird eine Meldung ausgegeben.
+private void merge_family_aliases(string *to_update, int verbose)
{
- // Char- und Familienaliase addieren.
- // Die Aliase des Char haben Prioritaet und ueberdecken die der Familie.
- active_aliases = FALIASDB->QueryFamilyAlias() + aliases;
+ mapping family;
+ if (!to_update)
+ {
+ // Char- und Familienaliase addieren und als neues aktives Set
+ // speichern.
+ // Die Aliase des Char haben Prioritaet und ueberdecken die der Familie.
+ family = FALIASDB->QueryFamilyAlias();
+ active_aliases = family + aliases;
+ }
+ else
+ {
+ // Die uebergebene Liste neuholen (alle davon vorhandenen) und
+ // im aktiven Set aktualisieren/eintragen.
+ family = m_allocate(sizeof(to_update));
+ foreach(string key: &to_update)
+ {
+ family += FALIASDB->QueryFamilyAlias(key);
+ }
+ active_aliases = active_aliases + family;
+ }
+ if (verbose && sizeof(family))
+ {
+ write(break_string((
+ "Es wurden folgende Familienaliase aktiviert: "
+ +CountUp(m_indices(family)) + ".\n"),75));
+ }
}
static void initialize()
@@ -153,7 +181,7 @@
if ( !mappingp(aliases) )
aliases = ([]);
- merge_family_aliases();
+ merge_family_aliases(0,0);
if ( !pointerp(commands) )
commands = ({});
@@ -208,7 +236,7 @@
if (!mappingp(aliases))
aliases=([]);
- merge_family_aliases();
+ merge_family_aliases(0,0);
if ( !pointerp(commands) )
commands = ({});
@@ -539,6 +567,13 @@
else
write(break_string(("Du entfernst folgende Aliase: "
+CountUp(to_delete) + ".\n"),75));
+ // Wenn nicht im Familienmodus (d.h. Char-Aliase wurden geloescht), wird
+ // versucht, gleichnamige Familienaliase (sofern vorhanden) zu
+ // aktivieren.
+ if (!familymode)
+ {
+ merge_family_aliases(to_delete, 1);
+ }
}
else
write("So ein Alias hast Du nicht definiert.\n");
@@ -939,7 +974,7 @@
if (IS_ELDER(this_interactive()))
{
aliases=([]);
- merge_family_aliases();
+ merge_family_aliases(0,0);
}
return 1;
}