[FIXED:abcab4f] Gebäudevoraussetzungen blockieren sich

Antworten
Benutzeravatar
Vuto
Flottenkapitän
Flottenkapitän
Beiträge: 515
phpbb forum styles
Registriert: Donnerstag 15. Juli 2010, 17:04

[FIXED:abcab4f] Gebäudevoraussetzungen blockieren sich

Beitrag von Vuto »

Wir haben immer noch ein paar Gebäude die nicht baubar sind, da sie sich gegenseitig ausschließende Voraussetzungen haben.
Only own colony, only minorrace stystem und only conquered system blockieren einander.
Z.B. die Kartelle der Hanuhr. Siehe auch Protektionismus. (dort wurden dann alle Voraussetzungen entfernt)

Zwei Möglichkeiten zur Problemlösung:
1. Wir ändern alle Gebäude die das Problem haben.
2. Wir ändern den Code.


EDIT: Überarbeiteter Code ist in Post Nr.4
Zuletzt geändert von Vuto am Donnerstag 22. August 2013, 19:42, insgesamt 2-mal geändert.
Darkness
Flottenkapitän
Flottenkapitän
Beiträge: 685
Registriert: Sonntag 8. März 2009, 22:35

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von Darkness »

Diese Blockade war doch beabsichtigt. Hier wurden doch einfach sinnvolle Baueinschränkungen für Gebäude vorgenommen. Straflager nur auf eroberter Welt baubar und nicht auf Mitgliedswelt, Geheimdienstgebäude nur in eigenen und nicht baubar etc.

Wüsste auch grade nicht welche Gebäude da mehrfachbetroffen wären.
Benutzeravatar
Vuto
Flottenkapitän
Flottenkapitän
Beiträge: 515
Registriert: Donnerstag 15. Juli 2010, 17:04

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von Vuto »

Jain, beabsichtigt war es vermutlich, sinnvoll und durchdacht ist es trotzdem nicht.
Was man schon daran sieht, dass wir uns bei ein paar Gebäuden nicht daran halten und sie deshalb nicht baubar sind. Der Bedarf für diese Möglichkeit der Einstellungen ist also vorhanden.

Wie ich oben schon geschrieben habe, sind die Kartelle der Hanuhr betroffen, sie sollen in einer eigenen Kolonien und eroberten Systemen baubar sein, aber nicht in Minorracesystemen. Kombinationen aus zwei Voraussetzungen bedeuten momentan, dass es nirgends baubar ist, da immer A und B zutreffen müssen und nicht A oder B.

Eigentlich wäre es sinnvoll das "only" generell zu streichen und nicht mehr auszuwählen wo es ausschließlich baubar ist, sondern sinnvolle Kombinationen zuzulassen. Z.B. Ein Gebäude baubar im Heimatsystem und Minorracewelten (z.B. eine Botschaft) wäre doch denkbar. Die Einstellungen zum Heimatsystem müsste ich dann noch in den Code aufnehmen.

Hier mal ein Liste wie viele Gebäude mit Voraussetzungen wir zur Zeit haben:
Heimatsystem: 24 (manches bei allen Majors z.B. Derithiummine)
Kolonie: 11
Minor: 6 (nur Kommunikationsnetzwerke)
Erobert: 1 (nur Cartarer)
Mischungen: 4 (nicht baubar)

Von dem Bug direkt sind also nur wenige Gebäude betroffen, aber mit der Lösung könnten wir viele Gebäude verbessern. Ich bin übrigens überrascht, dass wir sozusagen keine Gebäude für eroberte Systeme und Minorsysteme haben. Ich finde das sollten wir ändern.
Benutzeravatar
Vuto
Flottenkapitän
Flottenkapitän
Beiträge: 515
Registriert: Donnerstag 15. Juli 2010, 17:04

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von Vuto »

Ich habe meinen grauen Zellen eine kleine Pause gegönnt und mich danach noch mal an den Code gemacht. Jetzt stimmt alles und es wurde auch schon mit allen Kombinationsmöglichkeiten getestet.

Bestehender Code System.cpp (Zeile 2706-2723):

Code: Alles auswählen

	// Nur Heimatplanet checken
	if (building->GetOnlyHomePlanet())
	{
		if (m_sOwnerOfSystem == pMajor->GetRaceID() && sector->GetName() != pMajor->GetHomesystemName())
			return FALSE;
	}
	// Nur eigene Kolonie checken (Heimatsystem ist auch eine eigene Kolonie)
	if (building->GetOnlyOwnColony())
		if (sector->GetColonyOwner() != m_sOwnerOfSystem)
			return FALSE;
	// Nur Minorraceplanet checken
	if (building->GetOnlyMinorRace())
		if (sector->GetMinorRace() == FALSE)
			return FALSE;
	// Nur erobertes System checken
	if (building->GetOnlyTakenSystem())
		if (sector->GetTakenSector() == FALSE)
			return FALSE;
Neuer Code kommt in Zeile 2769 (wichtig, nicht an der alten Stelle einfügen):

Code: Alles auswählen

	// Checken ob zumindest eine der Voraussetzungen zutrifft: Heimatplanet, eigene Kolonie, Minorraceplanet oder Erobertes System
	// Zuerst Heimatplanet checken
	if (building->GetOnlyHomePlanet())
	{
		if (sector->GetName() == pMajor->GetHomesystemName())
		{
			return TRUE;
		}
		if (building->GetOnlyOwnColony())
		{
			if (sector->GetColonyOwner() == m_sOwnerOfSystem && sector->GetName() != pMajor->GetHomesystemName())
				return TRUE;
		}
		if (building->GetOnlyMinorRace())
		{
			if (sector->GetMinorRace() == TRUE && sector->GetTakenSector() == FALSE)
				return TRUE;
		}
		if (building->GetOnlyTakenSystem())
		{
			if (sector->GetTakenSector() == TRUE)
				return TRUE;
		}
		return FALSE;
	}
	// Zuerst eigene Kolonie checken
	if (building->GetOnlyOwnColony())
	{
		if (sector->GetColonyOwner() == m_sOwnerOfSystem && sector->GetName() != pMajor->GetHomesystemName())
		{
			return TRUE;
		}
		if (building->GetOnlyHomePlanet())
		{
			if (sector->GetName() == pMajor->GetHomesystemName())
				return TRUE;
		}
		if (building->GetOnlyMinorRace())
		{
			if (sector->GetMinorRace() == TRUE && sector->GetTakenSector() == FALSE)
				return TRUE;
		}
		if (building->GetOnlyTakenSystem())
		{
			if (sector->GetTakenSector() == TRUE)
				return TRUE;
		}
		return FALSE;
	}
	// Zuerst Minorraceplanet checken
	if (building->GetOnlyMinorRace())
	{
		if (sector->GetMinorRace() == TRUE && sector->GetTakenSector() == FALSE)
		{
			return TRUE;
		}
		if (building->GetOnlyHomePlanet())
		{
			if (sector->GetName() == pMajor->GetHomesystemName())
				return TRUE;
		}
		if (building->GetOnlyOwnColony())
		{
			if (sector->GetColonyOwner() == m_sOwnerOfSystem && sector->GetName() != pMajor->GetHomesystemName())
				return TRUE;
		}
		if (building->GetOnlyTakenSystem())
		{
			if (sector->GetTakenSector() == TRUE)
				return TRUE;
		}
		return FALSE;
	}
	// Zuerst erobertes System checken
	if (building->GetOnlyTakenSystem())
	{
		if (sector->GetTakenSector() == TRUE)
		{
			return TRUE;
		}
		if (building->GetOnlyHomePlanet())
		{
			if (sector->GetName() == pMajor->GetHomesystemName())
				return TRUE;
		}
		if (building->GetOnlyOwnColony())
		{
			if (sector->GetColonyOwner() == m_sOwnerOfSystem && sector->GetName() != pMajor->GetHomesystemName())
				return TRUE;
		}
		if (building->GetOnlyMinorRace())
		{
			if (sector->GetMinorRace() == TRUE && sector->GetTakenSector() == FALSE)
				return TRUE;
		}
		return FALSE;
	}
Durch die Verschiebung ans Ende muss man sich nicht mehr mit "return FALSE;" herumgeschlagen, sondern kann "return TRUE;" ausgeben, falls eine Bedingung erfüllt ist.
Das ganze ist leider ein ziemliches "if"-Monster, aber für etwas kompakteres reichen meine Programmierfähigkeiten leider nicht aus.

Zusätzlich mache ich noch zwei kleine Veränderungen an der SystemMenuView.cpp und der StringTable, da es für Minorracesystem bisher keinen String gab.


Mit dem Fix können alle vier Bedingungen frei kombiniert werden, trifft eine zu, ist das Gebäude baubar.
An unseren bestehenden Gebäuden verändert sich Folgendes:
- Die bisher nicht baubaren Gebäude sind baubar.
- Bei den "only own colony"-Gebäuden muss jetzt auch ein Haken bei Homesystem gesetzt werden, sofern wir wollen, dass sie weiterhin in Kolonien und dem Heimatsystem baubar sind. Jetzt haben wir die Auswahl.

Das sind die elf Gebäude, ich würde sie vorerst in Kolonien und im Heimatsystem baubar lassen, oder hat jemand eine andere Meinung dazu?
Terraner:
Private Farm
Angström-Institut

Hanuhr:
Private Farm

Khayrin:
Halle des Imperators
Taktische Schule
Zentrum zur Kampferprobung

Rotharianer:
Superorganismus-Institut
Synergetik-Akademie

Cartarer:
Kriegsanleihendezernat

Omega:
Da'unor Forschungsabteilung
Kampftrainingszentrum


So, jetzt ist die Frage:
Wollt ihr diesen Fix und wenn ja, soll ich direkt committen oder soll es sich erst noch Anonymissimus anschauen?
Anonymissimus
Flottenkapitän
Flottenkapitän
Beiträge: 990
Registriert: Freitag 14. Mai 2010, 14:39

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von Anonymissimus »

Hm, also ich traue dir völlig zu dass du diese Logik hier richtig hinkriegst. :) Zumal du schon ein Weilchen dran rummachst.

Ich frag mich eher, wie du es denn testen können willst ? Du musst mindestens eine virtual engine mit einem windows, dem visual C++ compiler und MFC dafür haben da BotE unter Linux völlig unkompilierbar ist !? Jedesmal jemand anderen zu bitten es zu kompilieren oder so ist impraktikabel. BotE diskriminiert nunmal von Haus aus einige gängige Betriebssysteme, da muss man sich unterwerfen oder bleiben lassen. ;)
Benutzeravatar
Vuto
Flottenkapitän
Flottenkapitän
Beiträge: 515
Registriert: Donnerstag 15. Juli 2010, 17:04

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von Vuto »

Genau, mit einer Virtuellen Maschine mit Win-XP geht das auch unter Linux, das war mein letztes Windows, ich habe lange nach der CD suchen müssen. Die alte BotF-CD habe ich dabei auch gefunden, schon das Cover weckt nostalgische Gefühle. Leider war ein großer Kratzer darauf, aber mit BotE habe ich eine sehr gute Alternative. :wink:

Gut, wenn keiner "NEIN! HALT! STOP!" schreit, werde ich es demnächst hochladen. Ich gebe euch noch genug Zeit zum Widerspruch. :)


Noch eine Frage, Anonymissimus, kann ich die GdiPlus.dll in /trunk rein kopieren, das würde mir einige Klicks sparen, oder stört das?
Darkness
Flottenkapitän
Flottenkapitän
Beiträge: 685
Registriert: Sonntag 8. März 2009, 22:35

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von Darkness »

Wenn hier Jemand
"NEIN! HALT! STOP!"
zu irgendeinem Fortschritt in der Entwicklung schreit werd ich ihn aus dem Verkehr ziehen. :twisted:

Im schlimmsten Fall funktioniert es nicht richtig und muss angepasst werden, im besten Fall ist es ein weiterer Schritt in die richtige Richtung. :D
Anonymissimus
Flottenkapitän
Flottenkapitän
Beiträge: 990
Registriert: Freitag 14. Mai 2010, 14:39

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von Anonymissimus »

Vuto hat geschrieben:Genau, mit einer Virtuellen Maschine mit Win-XP geht das auch unter Linux, das war mein letztes Windows, ich habe lange nach der CD suchen müssen. Die alte BotF-CD habe ich dabei auch gefunden, schon das Cover weckt nostalgische Gefühle. Leider war ein großer Kratzer darauf, aber mit BotE habe ich eine sehr gute Alternative. :wink:
Okay. Ist halt etwas langsam so, aber geht. IIRC das größte Problem ist dass der Zugriff auf die geshareten Festplatten sehr langsam ist, falls du den sourcecode auf so einer liegen hast.
Vuto hat geschrieben:Noch eine Frage, Anonymissimus, kann ich die GdiPlus.dll in /trunk rein kopieren, das würde mir einige Klicks sparen, oder stört das?
Ich frag mich grade warum sie da nicht schon ist...ich glaube ich musste die da auch mal reinkopieren, aber nur unter Linux, denn unter windows liegt sie wohl irgendwo im System.
Jedenfalls, man braucht solche Dateien nicht zu git hinzuzufügen nach dem Reinkopieren oder Erstellen; in der Datei ./git/info/exclude kann man <Dateiname> als zu ignorierende Datei reinschreiben. Da jene dll an diesem Ort nicht für alle Entwickler Sinn macht, ist das hier das was du tun solltest, sodass sie also nicht dauernd bei den einzutragenden Veränderungen auftaucht. :)
Benutzeravatar
Vuto
Flottenkapitän
Flottenkapitän
Beiträge: 515
Registriert: Donnerstag 15. Juli 2010, 17:04

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von Vuto »

Die Geschwindigkeit ist eigentlich akzeptabel, aber ich habe auch keine Vergleich wie schnell es ohne VM dazwischen ist. Da mein Computer sowieso alt und langsam ist fällt es vermutlich noch weniger auf. :wink:

Was die DLL betrifft hast du vermutlich Recht, die grob geschätzt drei Linuxuser die vor dem nächsten Release die Testversionen ausprobieren werden, schaffen es bestimmt auch die DLL selbst einzufügen.
Benutzeravatar
rainer
Vizeadmiral
Vizeadmiral
Beiträge: 2898
Registriert: Mittwoch 12. September 2007, 10:57

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von rainer »

Vuto hat geschrieben:Wollt ihr diesen Fix und wenn ja, soll ich direkt committen oder soll es sich erst noch Anonymissimus anschauen?
Am besten kann man solche Sachen testen, wenn "mehrere" testen - darum würde ich die "Testversionen" wiederaufleben lassen, die aus dem offiziellen Repository kommen.
(Mein aktueller Code ist aber so verseucht...müßte erstmal einiges "gesäubert" übertragen...und ob der Code dann "gut" ist, naja...)

Zurück zur Frage: Also direkt committen :wink: , dann kann der nächste (z.B. Anonymissimus) ja eh noch -und direkt- eingreifen/verbessern. (Man committet ja eh nur, was man guten Gewissens vertreten kann und wenn man nie etwas ausprobiert, geht auch nichts vorwärts, was ganz schlecht wäre - da bin ich also gleicher Meinung wie Darkness )

Testversionen http://forum.birth-of-the-empires.de/vi ... 238#p29238: da die Commit-Nummer aus Codeplex nicht mehr verfügbar ist, schlage ich dann eine Datumskennung vor (2013-08-24 und so...)
Benutzeravatar
Vuto
Flottenkapitän
Flottenkapitän
Beiträge: 515
Registriert: Donnerstag 15. Juli 2010, 17:04

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von Vuto »

So, ich habe es dann endlich mal committet.

Datumskennung für die Testversionen sollte ok sein, aber die ersten 7 SHA-Ziffern wären auch eine Möglichkeit.
Anonymissimus
Flottenkapitän
Flottenkapitän
Beiträge: 990
Registriert: Freitag 14. Mai 2010, 14:39

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von Anonymissimus »

Main kann bei unterworfenen Minors deren Gebäude nicht mehr errichten, ich glaube das ging früher ? Kann das mal einer bestätigen bitte, ich unterwerfe da zu wenig für. ;)
Besonders komisch dass ich die Schiffe desselben Minors nämlich bauen kann. Das ist zumindest inkonsequent.
Benutzeravatar
Vuto
Flottenkapitän
Flottenkapitän
Beiträge: 515
Registriert: Donnerstag 15. Juli 2010, 17:04

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von Vuto »

Danke fürs testen, ich werde es mir morgen anschauen.

Vorher konnte man bei unterworfenen Minors definitiv ihre Gebäude bauen, gut möglich dass ich das Detail übersehen habe.
An meine Test für unterworfenen Majors und Heimatplaneten kann ich mich erinnern, an eroberte Minors überraschenderweise nicht. :wink:

Vermutlich muss ich nur 4x

Code: Alles auswählen

&& sector->GetTakenSector() == FALSE
löschen.


Noch ein Frage, soll ich bei der Gelegenheit meine geschweiften Klammern ändern?

Code: Alles auswählen

if(a)
{
b;
}

zu

if(a) {
b;
}
Es hat beides Vor- und Nachtteile, eigentlich wären in dem Codestück sowieso alle außer den vorderen vier Klammerpaaren verzichtbar.
Es ist nur eine Nebensächlichkeit, aber ich wüsste trotzdem gerne ob wir eine bevorzugte Variante haben.
Benutzeravatar
rainer
Vizeadmiral
Vizeadmiral
Beiträge: 2898
Registriert: Mittwoch 12. September 2007, 10:57

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von rainer »

Vuto hat geschrieben:Noch ein Frage, soll ich bei der Gelegenheit meine geschweiften Klammern ändern?

Code: Alles auswählen

if(a)
{
b;
}
[2. Variante gleich gar nicht zitiert]
Es hat beides Vor- und Nachtteile, eigentlich wären in dem Codestück sowieso alle außer den vorderen vier Klammerpaaren verzichtbar.
Es ist nur eine Nebensächlichkeit, aber ich wüsste trotzdem gerne ob wir eine bevorzugte Variante haben.
ich denke, dass obige Variante leichter lesbar ist und auch im Code öfters vorkommt (obwohl die andere Variante wohl die profi-mäßiger ist)
Benutzeravatar
Vuto
Flottenkapitän
Flottenkapitän
Beiträge: 515
Registriert: Donnerstag 15. Juli 2010, 17:04

Re: Gebäudevoraussetzungen blockieren sich gegenseitig

Beitrag von Vuto »

Ist gefixt, es musste wirklich nur GetTakenSector gelöscht werden.

Klammern habe ich so gelassen, ich werde mich einfach immer nach der Klammerung des umgebenden Codeblocks richten.
Antworten

Zurück zu „Archiv Alpha7-Bugs“