Warning: ob_start(): function 'compress_handler' not found or invalid function name in /www/htdocs/xfmantis/core.php on line 18
0002471: Funktion TGround.show mit null Aliens - Mantis
Mantis Bugtracker
  

Viewing Issue Simple Details Jump to Notes ] View Advanced ] Issue History ] Print ]
ID Category Severity Reproducibility Date Submitted Last Update
0002471 [X-Force] Bodeneinsatz crash always 13.06.11 10:01 19.07.11 07:54
Reporter Kreks View Status public  
Assigned To
Priority normal Resolution open  
Status new   Product Version V0.917a02
Summary 0002471: Funktion TGround.show mit null Aliens
Description Die Funktion Show von TGround produziert einen Absturz, wenn per Skript alle Aliens entfernt wurden.

Das war immer als Workaround gedacht, um einen Bodeneinsatz vorzeitig zu beenden und ist fürterlich umständlich. Einfacher zu realisieren ist es, die RemainTime auf 1 zu setzen, dann erledigt das Spiel selbst den Rest.
Additional Information Ungültige Zeigeroperation
$004048E1 System.TObject.FreeInstance
$004048DC System.TObject.FreeInstance
$00402EC3 System.ErrorAt
$00404922 System.TObject.Free
$00614353 EinsatzListe.pas 631 CheckEinsatz;
$0059B81D BodenEinsatz.pas 523 Einsatz.Win;
$0063B21C DXContainer.pas 3187 PageShown;
$006372F8 DXContainer.pas 1124 ActivePage.Activate;
$00637D99 DXContainer.pas 1468 ActivePage:=Page;
$00639D51 DXContainer.pas 2469 ShowPageModal(Page)
$0063B292 DXContainer.pas 3206 Container.ShowPage(Page);
$005DC8C1 EinsatzIntro.pas 415 ChangePage(PageBodenEinsatz);
$005DC513 EinsatzIntro.pas 294 StartEinsatz;
$0063A288 DXContainer.pas 2628 if Assigned(fOnClick) then fOnClick(Self);
$00556B36 DXBitmapButton.pas 174 inherited;
$0063B61E DXContainer.pas 3338 fHotKeys[Dummy].Component.DoClick;
$00637464 DXContainer.pas 1173 if ActivePage<>nil then ActivePage.KeyPress(Msg.CharCode,State);
$00451E97 Controls.pas 5143 Dispatch(Message);
$00456A94 Controls.pas 7246 inherited WndProc(Message);
$00451A44 Controls.pas 5018 if Self <> nil then WindowProc(Message);
$006704E5 frmMain.pas 202 GameContainer.Perform(WM_CHAR,Word(Key),0);
$004587C2 Controls.pas 8058 if Assigned(FOnKeyPress) then FOnKeyPress(Self, Key);
$0045882F Controls.pas 8074 KeyPress(Ch);
$0045886A Controls.pas 8083 if not DoKeyPress(Message) then inherited;
$00451E97 Controls.pas 5143 Dispatch(Message);
$00456A94 Controls.pas 7246 inherited WndProc(Message);
$00467169 Forms.pas 3284 inherited WndProc(Message);
$0055E067 DXInput.pas 2243 DefWindowProc(Message);
$004A01C1 DXClass.pas 572 FWindowProc(Message, FDefWindowProc);
$004B1F1F DXDraws.pas 4569 DefWindowProc(Message);
$004A01C1 DXClass.pas 572 FWindowProc(Message, FDefWindowProc);
$00456152 Controls.pas 7021 WindowProc(Message);
$0042CA05 classes.pas 11571 MOV EAX,[ECX].Longint[4]
Attached Files

- Relationships
related to 0002469closed  Computerterminal beim Bodeneinsatz gehackt, danach Mission abgeschlossen und Spiel abgestürtzt 

- Notes
(0004556)
DirkF
18.07.11 11:22

eventuell sollte man ein Remaintime=0 ermöglichen, um den Bodeneinsatz sofort zu entfernen - oder einen entsprechenden eigenen Befehl TGround.remove neu definieren.
 
(0004557)
Natter
18.07.11 16:08

Nein, eigentlich ist TGround.show genau dafür gedacht - um Einsätze ohne Aliens zu löschen. Wird z.B. auch nach erfolgreichem Einsatz aufgerufen und löscht dann den Einsatz. Problem hier ist, dass beim Aufruf von TGRound.Free ein Fehler aufgetreten ist. Ohne das dazugehörige Skript lässt sich der fehler aber kaum finden. Mir ist zumindest nicht ganz klar, was Kreks genau gemacht hat.
 
(0004558)
DirkF
18.07.11 17:57

eben - es ging mir allgemein um das Löschen von Bodeneinsätzen.
D.h. TGround.remove sollte auch Bodeneinsätze mit Aliens sofort entfernen können etc.
 
(0004559)
Natter
18.07.11 18:22

Ok, darüber könne man nachdenken. Man muss dann aber aufpassen, denn damit kann man auch leicht Abstürze verursachen (selbst mit der Skriptsprache) - z.B. wenn der Befehl im laufenden Einsatz aufgerufen würde. Über die genaue Umsetzung müsste man also noch etwas nachdenken.
 
(0004560)
Kreks
18.07.11 18:40

Sorry, ich vergaß, dass das noch offen ist. Ich hab nochmal nachgeharkt und, äh, mir ist ein kleiner, peinlicher Fehler unterlaufen, ich hab mich in der Zeile vertan, es ging um die Zeile darüber:
for i := 0 to Einsatz.AlienCount - 1 do Einsatz.RemoveAlien(i);
und da läuft mir der Index davon. Sorry wegen der Umstände.
 
(0004561)
DirkF
19.07.11 07:54
edited on: 19.07.11 09:51

@kreks: klar geht der index daneben, denn Du veränderst ihn ja in derselben schleife. Speichere den Startwert in einer anderen Variable und zähle von oben herunter statt hoch, dann klappt das auch.

@natter: dann muss man da etwas genauer nachdenken, eventuell eine kontrolle ob der Einsatz gerade aktiv ist mit einer entsprechenden Fehler-Rückmeldung ins Skript einbauen...

Edit: habe einen Tip zu removealien() im Wiki ergänzt

 

- Issue History
Date Modified Username Field Change
13.06.11 10:01 Kreks New Issue
13.06.11 10:01 Kreks File Added: error-12-06-2011-17-29.txt
18.07.11 06:43 Natter Relationship added related to 0002469
18.07.11 06:52 Natter File Deleted: error-12-06-2011-17-29.txt
18.07.11 06:53 Natter Description Updated
18.07.11 06:53 Natter Additional Information Updated
18.07.11 11:22 DirkF Note Added: 0004556
18.07.11 16:08 Natter Note Added: 0004557
18.07.11 17:57 DirkF Note Added: 0004558
18.07.11 18:22 Natter Note Added: 0004559
18.07.11 18:40 Kreks Note Added: 0004560
19.07.11 07:54 DirkF Note Added: 0004561
19.07.11 09:41 Kreks Issue Monitored: Kreks
19.07.11 09:41 Kreks Issue End Monitor: Kreks
19.07.11 09:51 DirkF Note Edited: 0004561


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