Walkmaster: delay muss < MAX_MASTER_TIME sein

Der Walkmaster laesst nur noch Delays (in HBs) zu, die eine
Sekunde (d.h. auch ein HB) kuerzer sind als seine
Periodenlaenge (MAX_MASTER_TIME). Bislang wurde auch <=
akzeptiert.
Ansonsten kann es passieren, dass bei Abarbeitung eines
MNPC der wieder (sozusagen phasengleich) im gleichen Slot
landet, der aber nach Verarbeitung komplett genullt wird.
So konnten MNPC "verloren" gehen.

Change-Id: I2d933d41df92db05e8f1c0f45044d54985603837
diff --git a/p/service/padreic/mnpc/mnpc.h b/p/service/padreic/mnpc/mnpc.h
index 50544db..3c4749e 100644
--- a/p/service/padreic/mnpc/mnpc.h
+++ b/p/service/padreic/mnpc/mnpc.h
@@ -14,7 +14,7 @@
 // max. Wartezeit zwischen 2 Bewegungen (in Sekunden), welche vom walk_master
 // verwaltet wird. (Muss ganzzahlig durch __HEART_BEAT_INTERVAL__ dividierbar
 // sein)
-#define MAX_MASTER_TIME          180
+#define MAX_MASTER_TIME          182
 
 // ist automatisch in jedem mnpc gesetzt
 #define P_MNPC                    "mnpc"
diff --git a/p/service/padreic/mnpc/moving.c b/p/service/padreic/mnpc/moving.c
index dcd76f5..4d08ab8 100644
--- a/p/service/padreic/mnpc/moving.c
+++ b/p/service/padreic/mnpc/moving.c
@@ -38,7 +38,7 @@
 
 protected void RegisterWalk()
 {
-  if ((QueryProp(MNPC_DELAY)+QueryProp(MNPC_RANDOM))<=MAX_MASTER_TIME)
+  if ((QueryProp(MNPC_DELAY)+QueryProp(MNPC_RANDOM)) < MAX_MASTER_TIME)
   {
     if (!WALK_MASTER->Registration())
       WALK_MASTER->RegisterWalker(QueryProp(MNPC_DELAY),
@@ -67,7 +67,7 @@
         || find_call_out("Walk") > -1)
       return -1;
     // ansonsten MNPC registrieren, falls geeignet.
-    if ((QueryProp(MNPC_DELAY)+QueryProp(MNPC_RANDOM))<=MAX_MASTER_TIME)
+    if ((QueryProp(MNPC_DELAY)+QueryProp(MNPC_RANDOM))<MAX_MASTER_TIME)
       WALK_MASTER->RegisterWalker(QueryProp(MNPC_DELAY), QueryProp(MNPC_RANDOM));
     // und mit kurzer Verzoegerung einmal laufen. (ja, absicht, hier
     // MNPC_DELAY zu nutzen - denn solange dauert das Walk vom Master
@@ -341,7 +341,7 @@
     return 0;
 
   //ggf. neuen Callout eintragen, bevor irgendwas anderes gemacht wird.
-  if ((QueryProp(MNPC_DELAY)+QueryProp(MNPC_RANDOM))>MAX_MASTER_TIME)
+  if ((QueryProp(MNPC_DELAY)+QueryProp(MNPC_RANDOM))>=MAX_MASTER_TIME)
     call_out("Walk", QueryProp(MNPC_DELAY)+random(QueryProp(MNPC_RANDOM)));
 
   // Im Kampf ggf. nicht weitergehen.
diff --git a/p/service/padreic/mnpc/walk_master.c b/p/service/padreic/mnpc/walk_master.c
index 3ae075f..58aecf3 100644
--- a/p/service/padreic/mnpc/walk_master.c
+++ b/p/service/padreic/mnpc/walk_master.c
@@ -62,7 +62,10 @@
   // pruefen ob die Paramter zulaessig sind...
   if (time<0) ERROR("negative time to RegisterWalker() from %O.\n");
   if (rand<0) ERROR("negative random to RegisterWalker() from %O.\n");
-  if ((time+rand) > (MAX_MASTER_TIME))
+  // das max. Delay darf max. MAX_MASTER_TIME-1 sein, sonst landet der MNPC im
+  // HB evtl. wieder in dem Slot, der gerade bearbeitet wird und der direkt
+  // danach komplett genullt wird...
+  if ((time+rand) >= (MAX_MASTER_TIME))
     ERROR("Too long delaytime from %s to RegisterWalker().\n");
 
   if (Registration())