process_string(): Fehler nur bei @@ im string

Wennn process_string nicht erlaubt ist, aber das
Argument ein string ist und kein @@ enthaelt, kann
das Argument ohne Fehler einfach zurueckgegeben werden,
d.h. ein Fehler wird nur ausgeloest, wenn auch ein
@@..@@ zu verarbeiten ist.

Change-Id: I276c97a2975a3d1d75bceca3c5112d12b9f98758
diff --git a/secure/simul_efun/simul_efun.c b/secure/simul_efun/simul_efun.c
index 764ba4a..1e1940b 100644
--- a/secure/simul_efun/simul_efun.c
+++ b/secure/simul_efun/simul_efun.c
@@ -790,16 +790,23 @@
   // Gilden ein, aber verhindert es fuer alle hochstufigen Magier und ihre
   // Objekte. Ausserdem erlauben wir keine Auswertung mehr fuer
   // Spielerobjekte, wenn sie mehr als Seher sind.
-  // TODO: aus Spielershells ausbauen
+    // TODO: aus Spielershells ausbauen
   // TODO 2: ganz ausbauen.
   if ( (query_once_interactive(previous_object())
         && query_wiz_level(previous_object()) > SEER_LVL
         )
       || query_wiz_level(getuid(previous_object())) > SPECIAL_LVL)
   {
-    set_this_object(previous_object());
-    raise_error("Illegale Benutzung von process_string(). Aufrufer "
-        "ist Magiershell oder Objekt mit Level > 25.\n");
+    // Ein Fehler wird aber nur ausgeloest, falls der String ein @@ enthaelt,
+    // ansonsten koennen wir den ohne Fehler returnieren.
+    if (stringp(str) && strstr(str, "@@") == -1)
+      return str;
+    else
+    {
+      set_this_object(previous_object());
+      raise_error("Illegale Benutzung von process_string(). Aufrufer "
+          "ist Magiershell oder Objekt mit Level > 30.\n");
+    }
   }
 
   if ( closurep(str) ) {
diff --git a/secure/simul_efun/spare/simul_efun.c b/secure/simul_efun/spare/simul_efun.c
index 764ba4a..1e1940b 100644
--- a/secure/simul_efun/spare/simul_efun.c
+++ b/secure/simul_efun/spare/simul_efun.c
@@ -790,16 +790,23 @@
   // Gilden ein, aber verhindert es fuer alle hochstufigen Magier und ihre
   // Objekte. Ausserdem erlauben wir keine Auswertung mehr fuer
   // Spielerobjekte, wenn sie mehr als Seher sind.
-  // TODO: aus Spielershells ausbauen
+    // TODO: aus Spielershells ausbauen
   // TODO 2: ganz ausbauen.
   if ( (query_once_interactive(previous_object())
         && query_wiz_level(previous_object()) > SEER_LVL
         )
       || query_wiz_level(getuid(previous_object())) > SPECIAL_LVL)
   {
-    set_this_object(previous_object());
-    raise_error("Illegale Benutzung von process_string(). Aufrufer "
-        "ist Magiershell oder Objekt mit Level > 25.\n");
+    // Ein Fehler wird aber nur ausgeloest, falls der String ein @@ enthaelt,
+    // ansonsten koennen wir den ohne Fehler returnieren.
+    if (stringp(str) && strstr(str, "@@") == -1)
+      return str;
+    else
+    {
+      set_this_object(previous_object());
+      raise_error("Illegale Benutzung von process_string(). Aufrufer "
+          "ist Magiershell oder Objekt mit Level > 30.\n");
+    }
   }
 
   if ( closurep(str) ) {