Du bist nicht angemeldet.

  1. Übersicht
  2. » Suche
  3. » Von Muesli

#1 Re: Fehler / Bugs » Bugs im Komplettpaket v0.8.3 vom 23.12.2024 » 13.09.2025 07:06

Nach ein paar Tagen Urlaub wollte ich das nun ausprobieren. Leider bekomme ich ab dem Commit 52c824f [Misc] Update Lua-Reflection-Logic to conform to latest reflection.mod einen  Compiler-Fehler. Anscheinend habe ich diese neue Modulversion nicht und finde sie auch nicht.

Compiler schrieb:

Unable to convert from TStringMap to TList.

Method _GetReflectionType:TLuaReflectionType(obj:Object)

    ...

    If exposeType <> "selected"
      _whiteListedTypes.Insert(typeName, "" )
    EndIf
  EndIf

"!!!!!! Hier gibts den Fehler."
  For Local list:TList = EachIn [currentTypeID.Functions(), currentTypeID.Methods(),   currentTypeID.Fields(), currentTypeID.Constants()]


    For Local m:TMember = EachIn list
      'only add non-private etc.

#2 Re: Fehler / Bugs » Bugs im Komplettpaket v0.8.3 vom 23.12.2024 » 30.08.2025 21:17

Hallo nochmal,

ich bin mir nicht sicher, ob das als Bug zählt, aber mir ist folgendes aufgefallen. Wenn ich in der Programmplanung die Filme und Serien eines Genres aufrufe, dort auf Seite zwei oder folgende navigiere und dann eine Serie anklicke, dann öffnet sich zum einem die Episodenliste, zum anderen aber springt die Film- und Serienliste zurück auf Seite 1. Das ist blöd, wenn man sich mal verklickt hat. (was mir leider nicht selten passiert)

Ich habe noch nicht wirklich viel Zeit in das Verständnis des Codes investiert, aber der Copilot-Agent gab mir folgende Erklärung und hat mir die Methode SetOpen in der Datei common.misc.plannerlist.programmelist.bmx umgeschrieben und es funktioniert.


Ursache:
Beim Wechsel von der normalen Lizenzliste (openState = 2) zur Episodenansicht (openState = 3) wird in UpdateTapes() SetOpen(3) aufgerufen. In SetOpen() wird jedoch pauschal bei jedem Öffnen (newState != 0) entriesPage = 1 gesetzt. Dadurch springt die Hauptliste (Filme/Serien) immer zurück auf Seite 1, obwohl nur die Episodenansicht (Subliste) geöffnet werden soll.

Kurz: SetOpen() setzt entriesPage auch beim Übergang 2 → 3 zurück. Das ist unerwünscht.

Fix: entriesPage nur zurücksetzen, wenn
•    komplett neu geöffnet wird (alter Zustand = 0), oder
•    auf einen Zustand <= 1 reduziert wird (weil Genre-/Listen-Auswahl neu beginnt). Beim Wechsel 2 → 3 nicht zurücksetzen. subEntriesPage kann (und sollte) beim Öffnen der Episodenansicht auf 1 springen.

Alter Code:

Method SetOpen:Int(newState:Int)
	newState = Max(0, newState)
	If newState <= 1 Then currentgenre=-1
	If newState <= 2 Then hoveredParentalLicence=Null
	If newState = 0
		enabled = 0
	Else
		enabled = 1

		entriesPage = 1
		subEntriesPage = 1
	EndIf

	Self.openState = newState
End Method

Neuer Code:

Method SetOpen:Int(newState:Int)
	Local oldState:Int = Self.openState

	newState = Max(0, newState)

	If newState <= 1 Then currentGenre = -1
	If newState <= 2 Then hoveredParentalLicence = Null

	If newState = 0
		enabled = 0
	Else
		enabled = 1
		' Nur zurücksetzen wenn:
		' - vorher komplett geschlossen (oldState = 0)
		' - oder wir auf einen "frühen" Zustand (<=1) gehen
		If oldState = 0 Or newState <= 1
			entriesPage = 1
		EndIf
		' Episoden-Seite nur zurücksetzen wenn:
		' - vorher geschlossen
		' - oder wir nicht in Episodenansicht bleiben
		If oldState = 0 Or newState < 3
			subEntriesPage = 1
		EndIf
		' Beim Wechsel 2 -> 3: entriesPage bleibt erhalten, subEntriesPage wird neu (da neue Liste)
		If newState = 3 And oldState <> 3
			subEntriesPage = 1
		EndIf
	EndIf
	Self.openState = newState
End Method

Gruß,
Muesli

#3 Re: Fehler / Bugs » Bugs im Komplettpaket v0.8.3 vom 23.12.2024 » 08.08.2025 07:04

Hallo ani,

klar doch.
Das sind dann verschiedene Sendungen, bei denen das passiert. Während die Übernahme der Einstellungen zwischen den Sendungen von "Helene Bloombergs Schlaf dich reich" noch funktionierte, hat der Wechsel zur "Kaffeefahrt" zu dem Programmabsturz geführt.

Grüße,
Martin

#4 Re: Fehler / Bugs » Bugs im Komplettpaket v0.8.3 vom 23.12.2024 » 07.08.2025 20:30

Hallo zusammen,

ich habe nun nach vielen Jahren TVTower wiederentdeckt und stelle mit Begeisterung meinen programplan zusammen.

Ich habe einen nachstellbaren Programmabsturz im Supermarkt.
Wenn man mehrere Sendungen für die Produktion zusammenstellt, dabei die Option "Einstellungen übernehmen" aktiviert, aber manch eine Rolle nicht so ganz zum vorherigen Eintrag passt, dann stürzt das Programm ab.
Das passiert, wenn man die Produktionen von oben nach unten durchgeht, aber auch wenn man von unten nach oben zu einer bereits bestückten, aber nicht gekauften Produktion springt.

In der Datei game.screen.supermarket.production.bmx habe ich zwei Stellen ausgemacht, bei denen quasi eine IndexOutOfRangeException bei dem Befüllen von Arrays ausgelöst wird. (Ich komme von anderen Programmiersprachen)

Im folgenden findet ihr meine korrigierte Codestellen.
Bei dem Kommentar '--- MS, 07.08.2025: Bedingung eingefügt habe ich If-Abfragen eingefügt. Das ist mein erster Tag, an dem ich BlitzMax-Code lese. Ich habe also den Code in Gänze noch nicht durchblickt, vielleicht findet ihr ja eine an die Programmlogik besser angepasste Lösung als diese.

'store old cast by their job
				Local oldCastByJob:TPersonBase[][] = New TPersonBase[TVTPersonJob.GetCastJobs().Length][]
				For Local jobID:Int = EachIn TVTPersonJob.GetCastJobs()
					Local oldCastGroup:TPersonBase[] = takeOverConcept.GetCastGroup(jobID)
					Local jobIndex:Int = TVTPersonJob.GetIndex(jobID)
					'--- MS, 07.08.2025: Bedingung eingefügt
					If jobIndex >  0 And jobIndex < oldCastByJob.Length
						For Local oldCast:TPersonBase = EachIn oldCastGroup
							oldCastByJob[jobIndex]:+ [oldCast]						
						Next
					EndIf
				Next

				'find the best matching old cast (same job, correct gender)
				For Local castIndex:Int = 0 Until currentProductionConcept.cast.Length
					Local job:TPersonProductionJob = currentProductionConcept.script.jobs[castIndex]
					If Not job.preselectCast
						Local jobIndex:Int = TVTPersonJob.GetIndex(job.job)
						Local gender:Int = job.gender
						'--- MS, 07.08.2025: Bedingung eingefügt
						If jobIndex > 0 And jobIndex < oldCastByJob.Length
							Local oldCastList:TPersonBase[] = oldCastByJob[jobIndex]
							For Local oldCastIndex:Int = 0 Until oldCastList.Length
								Local oldCastPerson:TPersonBase = oldCastList[oldCastIndex]
								If Not oldCastPerson Then Continue
								If gender > 0 And gender <> oldCastPerson.gender Then Continue
								currentProductionConcept.SetCast(castIndex, oldCastPerson)
								'make a cast member once used unavailable
								oldCastList[oldCastIndex] = Null
								Exit
							Next
					    EndIf
					EndIf
				Next

Beste Grüße,
Muesli

  1. Übersicht
  2. » Suche
  3. » Von Muesli