Ich habe alle Quellcodes veröffentlicht, aber ihr nicht. Also liegt es auch an euch das mergen zu übernehmen.
Ich habe alle Quellcodes veröffentlicht, aber ihr nicht. Also liegt es auch an euch das mergen zu übernehmen.
Ja, und beim Github-Projekt sind die Branches "master, unstable und PBMod_v5" gerade auf dem gleichen Stand. Nimm also am besten den PBMod_v5-Branch.
PBMod_v5-Branch runtergeladen -> abgeharkt
In der DLL für de 76er Fix ist auch der restliche SDK Code aus deinen Mod enthalten, Ramkhamhaeng.
Ein User bei den Civfanatics nutzt jetzt auch den Wrapper , hat mich aber auf ein Problem bei diesem hingewiesen.
Ich hatte den Downloader der Spielstände so programmiert dass er erst über https:// versucht einen Spielstand zu laden und dann http:// probiert. Der Timeout zwischen den beiden Versuchen war aber abscheinend zu hoch und die http://-Variante klappte nie.
Habe ich jetzt nicht nochmal ganau untersucht, aber das deckt sich mit meinen damaligen Tests. Kann mich an Probleme erinnern, nachdem ich für Zulans Server die Https-Variante eingebaut hatte.
Daher habe ich jetzt die Url-Erkennung im Wrapper so angepasst dass er gleich das richtige Protokoll wählt.
Außerdem bin ich Zulans Wunsch nach mehr std::string statt char* nachgekommen und habe etwas aufgeräumt.
Die Änderungen sind bisher nur im unstable-Branch von PBStats zu finden. Wandert dann bei Gelegenheit in den Master-Branch.
Geändert von Ramkhamhaeng (26. März 2016 um 18:15 Uhr)
Waere es technisch irgendwie mit vertretbarem Aufwand moeglich ein Server-Seitiges oder zumindest konfigurierbares XML-Balancing zu implementieren?
Also so, dass man z.B. ein PB machen kann, bei dem Mining abgeschwaecht ist, aber der die selbe Version des Mods zum verbinden mit anderen PBs, wo das nicht der Fall ist, genutzt werden kann?
Achtung Spoiler:
Das wäre schon möglich. Man könnte die Änderungen vor/mit/nach (das wäre noch zu überlegen) dem Spielstand übertragen und die durch das XML initialisierten Werte anpassen.
Falls man die Optionen aber nicht nur an den PB-Modus sondern an alle MP-Modi knüpfen wird, ist es etwas schwerer.
Vielleicht gibt es auch schon eine Mod, welche viele der gewünschten Balancing-Änderungen schon beinhaltet. In der K-Mod sehe ich nichts im Changelog aber kann man den Modder fragen, der die PB-Mod dort integriert hat.
Meine Gedanken gehen in die Richtung, dass das Balancing von PB zu PB leicht angepasst wird. Wenn man dann bedenkt wie lange die PBs dauern wird es kompliziert... Wenn man da einigermassen flexible XML overrides im save speichern koennte waere das schon eine interessante Variante.
Achtung Spoiler:
Wenn man dieses Nachladekonzept auf eine Stelle im Code projezieren soll, würde ich mich für
entscheiden. Leider ist der Inhalt von LoadGlobalClassInfo und der Cache-Handler (letztes Argument) nicht im SDK enthalten. Es gibt aber im SDK ein paar Hilfsfunktionen, die höchstwahrscheinlich von LoadGlobalClassInfo aufgerufen werden. Damit kann man die Variablen in der Funktion etwas beeinflussen.Code:Header void LoadGlobalClassInfo(std::vector<T*>& aInfos, const char* szFileRoot, const char* szFileDirectory, const char* szXmlPath, bool bTwoPass, CvCacheObject* (CvDLLUtilityIFaceBase::*pArgFunction) (const TCHAR*) = NULL); Beispielaufruf LoadGlobalClassInfo(GC.getTechInfo(), "CIV4TechInfos", "Technologies", "Civ4TechInfos/TechInfos/TechInfo", true, &CvDLLUtilityIFaceBase::createTechInfoCacheObject);
Eine Art simples Nachladen könnte man dadurch erreichen, dass man den eigentlichen Vektor ( GC.getTechInfo())
durch einen Dummy D austauscht und nach dem Laden dann den richtigen Vektor überschreibt. Den ursprünglichen Vektor muss man außerdem behalten, um nach Verlassen des Spiels den vorherigen Zustand wieder herzustellen.
Leider kann man bei LoadGlobalClassInfo nicht den Dateipfad angeben sondern nur den Namen. Es wird dann vom Programm an bestimmten vordefinierten Positionen nach ihnen gesucht.
Wenn es möglich ist ein eigenen Verzeichnis in die Suche zu schmuggeln, hätte man einen probaten Weg:
1. Auf dem Server wird ein Verzeichnis XML angelegt (mit der gleichen Struktur wie Assets/XML) und die
Änderungen dort hinein gepackt.
2. PB-Server zippt das Verzeichnis beim Start.
3. Save wird um Variable erweitert, die gezipptes Verzeichnis beinhaltet.
4. Client entpackt als erstes die XML-Dateien in ein temporäres Verzeichnis (alles im Speicher zu erledigen wäre noch besser?!) und aktualisert die Daten.
5. Client läd Rest vom Save.
Nachteil 1: Python-Code kann man so nicht ändern. Nennen wir das mal Sicherheitsfeature…
Nachteil 2: Update bestehender Daten zieht manchmal weitere Änderungen nach sich. (Im Code gibt es da beispielsweise Methoden mit dem Namen readPass2 und readPass3…) Ignoriert man dass kann der Zustand inkonsistent werden.
Vorteil: Als Anwender recht leichte Handhabe. Man muss nur die XML-Dateien bei gleichem Pfad replizieren. Um die Dateien klein zu halten schmeißt man alle unveränderten Dateien raus.
Falls das nicht geht könnte man die Sache auch näher an den Dateistukturen anpacken, also bei den CvInfo::read(CvXMLLoadUtility* pXML))-Methoden. Die füllen letztlich die Datenstrukturen. Man müsst dann mit den Daten aus dem Save die pXML-Streams selber produzieren.
Man koennte es auch so machen, das alle Balancing Varianten in einer Modversion inkludiert sind, aber beim Verbinden die richtige Variante ausgewaehlt wird. Dann muesste man nicht XML-Zips entpacken. Wenn es dann noch so kompatibel ist, dass eine alte clientseitige modversion sich zu einer neuen serverseitigen modversion, die aber eine alte balancing-Variante nutzt, verbinden kann, brauchten nur wir bzw. die leute die an neuen PB teilnehmen ihre Mods aktualisieren.
Achtung Spoiler:
So, hier die von Civstats gekl., äh adaptierte Gewinnmeldung auch noch als Bild Hat sich ganz schon gezogen das zu erstellen, wenn man bei Django schon wieder raus ist.
Update erfordert im Idealfall nur compilestatic, collectstatic, migrate, runserver, aber wann hat das schon mal geklappt.
Achtung die Settingsdateien habe ich auch etwas geändert. Sofern deine Einstellungen in settings_local.py stehen sollte da aber nix kollidieren.
Der Weg ist meiner Meinung nach vom Level der Programmierung genauso komplex. Allerdings müssen die Spieler dann ihre Mod-Versionen manuell aktualisieren. Das zieht sich meist über mehrere Tage und wir verlieren hier (so wie ich mir das denke) die Prüfsummen-Checks bei den Dateien, was zu Integritätsproblemen führen kann.
Wenn die Spieler manuell aktualisieren wäre ich eher dafür für alle Balanching-Mods Ableger der Mod anzulegen.
Dafür habe ich im Code für die nächste Modversion die Regeln für die Gegenspionage so geändert, dass man sie auch schon genau eine Runde vorher verlägern kann. Die 10 Runden werden an die verbleibende angehängt. Der Kosten-Modifier bleibt, im Unterschied zu BASE, dann bei +100%.
The law is no substitute for morality. E.Snowden, Dez 2016
Die Welt hat genug für jedermanns Bedürfnisse, aber nicht für jedermanns Gier. Gandhi
Meine PB-Geschichten:
Achtung Spoiler:
@Zulan: Bei einem (neuen) Log-Nachrichtentyp hatte sich ein Fehler in den Ausgabestring geschlichen. Musste ich noch einen Bugfix im Masterbranch pushen. Update eilt aber nicht.