[FIXED:abcab4f] Gebäudevoraussetzungen blockieren sich
- Vuto
- Flottenkapitän
- Beiträge: 515
- phpbb forum styles
- Registriert: Donnerstag 15. Juli 2010, 17:04
[FIXED:abcab4f] Gebäudevoraussetzungen blockieren sich
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
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.
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
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.
Wüsste auch grade nicht welche Gebäude da mehrfachbetroffen wären.
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
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.
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.
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
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):
Neuer Code kommt in Zeile 2769 (wichtig, nicht an der alten Stelle einfügen):
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?
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;
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;
}
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?
-
- Flottenkapitän
- Beiträge: 990
- Registriert: Freitag 14. Mai 2010, 14:39
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
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.
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.
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
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.
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?
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?
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
Wenn hier Jemand
Im schlimmsten Fall funktioniert es nicht richtig und muss angepasst werden, im besten Fall ist es ein weiterer Schritt in die richtige Richtung.
zu irgendeinem Fortschritt in der Entwicklung schreit werd ich ihn aus dem Verkehr ziehen."NEIN! HALT! STOP!"
Im schlimmsten Fall funktioniert es nicht richtig und muss angepasst werden, im besten Fall ist es ein weiterer Schritt in die richtige Richtung.
-
- Flottenkapitän
- Beiträge: 990
- Registriert: Freitag 14. Mai 2010, 14:39
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
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: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.
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.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?
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.
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
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.
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.
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.
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
Am besten kann man solche Sachen testen, wenn "mehrere" testen - darum würde ich die "Testversionen" wiederaufleben lassen, die aus dem offiziellen Repository kommen.Vuto hat geschrieben:Wollt ihr diesen Fix und wenn ja, soll ich direkt committen oder soll es sich erst noch Anonymissimus anschauen?
(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 , 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...)
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
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.
Datumskennung für die Testversionen sollte ok sein, aber die ersten 7 SHA-Ziffern wären auch eine Möglichkeit.
-
- Flottenkapitän
- Beiträge: 990
- Registriert: Freitag 14. Mai 2010, 14:39
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
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.
Besonders komisch dass ich die Schiffe desselben Minors nämlich bauen kann. Das ist zumindest inkonsequent.
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
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.
Vermutlich muss ich nur 4xlöschen.
Noch ein Frage, soll ich bei der Gelegenheit meine geschweiften Klammern ändern?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.
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.
Vermutlich muss ich nur 4x
Code: Alles auswählen
&& sector->GetTakenSector() == FALSE
Noch ein Frage, soll ich bei der Gelegenheit meine geschweiften Klammern ändern?
Code: Alles auswählen
if(a)
{
b;
}
zu
if(a) {
b;
}
Es ist nur eine Nebensächlichkeit, aber ich wüsste trotzdem gerne ob wir eine bevorzugte Variante haben.
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
ich denke, dass obige Variante leichter lesbar ist und auch im Code öfters vorkommt (obwohl die andere Variante wohl die profi-mäßiger ist)Vuto hat geschrieben:Noch ein Frage, soll ich bei der Gelegenheit meine geschweiften Klammern ändern?Es hat beides Vor- und Nachtteile, eigentlich wären in dem Codestück sowieso alle außer den vorderen vier Klammerpaaren verzichtbar.Code: Alles auswählen
if(a) { b; } [2. Variante gleich gar nicht zitiert]
Es ist nur eine Nebensächlichkeit, aber ich wüsste trotzdem gerne ob wir eine bevorzugte Variante haben.
Re: Gebäudevoraussetzungen blockieren sich gegenseitig
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.
Klammern habe ich so gelassen, ich werde mich einfach immer nach der Klammerung des umgebenden Codeblocks richten.