Warning: ob_start(): function 'compress_handler' not found or invalid function name in /www/htdocs/xfmantis/core.php on line 18
0002103: WaitForWQeapObj funktioniert nicht immer - Mantis
Mantis Bugtracker
  

Viewing Issue Simple Details Jump to Notes ] View Advanced ] Issue History ] Print ]
ID Category Severity Reproducibility Date Submitted Last Update
0002103 [X-Force] Allgemein minor always 21.05.09 15:32 22.06.09 03:00
Reporter Natter View Status public  
Assigned To Natter
Priority normal Resolution fixed  
Status closed   Product Version V0.915a05
Summary 0002103: WaitForWQeapObj funktioniert nicht immer
Description Es gibt ein Problem mit TGameFigure.WaitForWeapObj (ist schon länger bekannt). Es kommt manchmal vor, das trotz Aufruf von Application.HandleMessage; die Projektile stehen bleiben. Das ist zwar momentan mit einer Abbruchbedingung abgefangen, allerdings ist es in einem solchen Fall nicht möglich, im Skript auf das Ergebnis des Schusses zu reagieren (da das Projektil beim weiterlaufen des Skriptes noch nicht zum Ziel geflogen ist).

Ich habe mich deswegen vorhin mal mit Christian unterhalten. Er hatte vermutet, dass eventuell der Container noch locked ist, wodurch TDXIsoEngine.PerformFrame nicht ausgeführt würde. Das stimmt so aber nicht ganz. Zwar ist der Container zwar locked, was auch das hängenbleiben der Maus erklärt, das eigentliche Problem konnte mit einem unlock aber nicht beseitigt werden. Trotzdem hat mich der Hinweis von Christian wohl auf die richtige Spur gebracht. Ich habe jetzt mal testweise in WaitForWeapObj die PerformFrame explizit aufgerufen, und mir das ganze mit Einzelschritt angeschaut. Dabei habe ich festgestellt, das bereits eine Instanz von PerformFrame läuft. Dies führt aber dazu, das ein erneuter Aufruf von PerformFrame ignoriert wird (if InPerform<>0 then exit;).

Ich hab das mal weiter verfolgt, und glaube die Ursache gefunden zu haben. Anscheinend wird OnSeeUnit ausgelöst, während in PerformFrame die Bewegung der Einheiten abgearbbeitet wird. Wenn man dann im Skript bei OnSeeUnit einen Schuss auslöst, kann dieser natürlich erst per PerformFrame ausgeführt werden, wenn die Skriptverarbeitung beendet, und damit die derzeit laufende Instanz von PerformFrame beendet werden kann.
Additional Information
Attached Files

- Relationships

- Notes
(0003776)
Natter
21.05.09 16:06

Ich hab jetzt eine zusätzliche PerformWeapObjFrame-Funktion geschrieben. Wird diese aufgerufen, werden nur die Objekte abgearbeitet. Diese wird bei Bedarf in WaitForWeapObj aufgerufen.

Außerdem hab ich auch gleich in WaitForWeapObj eine Abfrage auf Pause eingebaut. Durch pasuieren konnte man bisher nämlich WaitForWeapObj auch austricksen (das Warten wurde dann immer durch die Abbruchbedingung vorzeitig beendet).
 

- Issue History
Date Modified Username Field Change
21.05.09 15:32 Natter New Issue
21.05.09 15:59 Natter Status new => assigned
21.05.09 15:59 Natter Assigned To  => Natter
21.05.09 16:06 Natter Status assigned => resolved
21.05.09 16:06 Natter Fixed in Version  => V0.915a06
21.05.09 16:06 Natter Resolution open => fixed
21.05.09 16:06 Natter Note Added: 0003776
22.06.09 03:00 Gast Status resolved => closed


Mantis 1.0.7[^]
Copyright © 2000 - 2007 Mantis Group
Powered by Mantis Bugtracker