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/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.