MNPC: Fix fuer Stop() ohne move_home
Bei Aufruf von Stop() ohne gesetztes move_home wurde meet_last_player
nicht veraendert. Dies fuehrte dazu, dass die Bewegung im init() nicht
wieder gestartet wurde. NPCs ohne gesetztes MNPC_NO_MOVE_HOME wurden im
reset() nach hause bewegt, wobei meet_last_player auf -1 gesetzt wurde,
woraufhin sie bei Spielerkontakt wieder gestartet wurden. NPCs, die auch
im reset() nicht nach hause bewegt wurden, blieben bis zum remove()
stehen.
Dieser Fehler entstand bei der Einführung von MNPC_NO_MOVE_HOME, weil ein
else-Zweig im Stop() verlorenging.
Der Patch stellt den else-Zweig wieder her und definiert die Werte 0 und -1
in meet_last_player.
Change-Id: Ibd41f609b1d44edb661a2bbcc6b5ec848c25a6d5
diff --git a/p/service/padreic/mnpc/moving.c b/p/service/padreic/mnpc/moving.c
index 43c5765..07bc318 100644
--- a/p/service/padreic/mnpc/moving.c
+++ b/p/service/padreic/mnpc/moving.c
@@ -21,8 +21,10 @@
int special; // == 1 fuer special exits
};
-// Letzter Spielerkontakt. -1, wenn der MNPC inaktiv zuhause rumsteht
-nosave int meet_last_player;
+// Letzter Spielerkontakt. Beim Laden auf Ladezeit faken.
+// 0, wenn der MNPC inaktiv rumsteht
+// -1, wenn der MNPC inaktiv zuhause rumsteht
+nosave int meet_last_player = time();
static void mnpc_create()
{
@@ -36,7 +38,6 @@
SetProp(MNPC_WALK_TIME, MNPC_DFLT_WALK);
SetProp(MNPC_FLAGS, 0);
SetProp(P_ENABLE_IN_ATTACK_OUT, 1);
- meet_last_player=time();
}
protected void RegisterWalk()
@@ -92,6 +93,10 @@
move(QueryProp(MNPC_HOME), M_TPORT|M_NOCHECK);
meet_last_player=-1;
}
+ else
+ {
+ meet_last_player = 0;
+ }
}
static int _set_mnpc_flags(int flags)
@@ -147,8 +152,8 @@
static void mnpc_reset()
{
int flags = QueryProp(MNPC_FLAGS);
- // meet_last_player < 0 zeigt an, dass der MNPC schon zuhause ist.
- if (meet_last_player < 0
+ // meet_last_player == -1 zeigt an, dass der MNPC schon zuhause ist.
+ if (meet_last_player == -1
|| !(flags & MNPC_WALK)
|| (flags & MNPC_NO_MOVE_HOME))
return;