Ja, teste es noch kurz, ob PAE noch startet und lade es dann in einer halben Stunde hoch.
Edit: Gepusht.
Ja, teste es noch kurz, ob PAE noch startet und lade es dann in einer halben Stunde hoch.
Edit: Gepusht.
Geändert von Ramkhamhaeng (07. Juli 2017 um 17:10 Uhr)
Diese Edith
Wenn ich ein Save im Weltenbauer speicher und das WBSave neu lade, sollten die ganzen Altlasten von kaputten SelectionGroups etc. verschwinden, oder?
€: scheint zu klappen. Jetzt noch widersinnige AIs entfernen.
Geändert von Flunky (07. Juli 2017 um 20:25 Uhr)
Ach, das war nur ein Selbstgespräch, was nötig ist um mein Save vernünftig spielbar zu kriegen
Es gibt einen großen Haufen verteilter Listen mit gc.getInfoTypeForString() oder schlicht Strings, die immer wieder neu generiert werden. Die könnte man vielleicht zentralisieren?
Und onCombatLogHit müsste angepasst werden, das war komplett auskommentiert, weil es den Besitzer von Pirateneinheiten verraten hat. Wenn du da eine Version bauen könntest, die Rücksicht auf versteckte Nationalität nimmt, was das klasse. So ganz ohne Kampflog ist nämlich auch nicht toll, wenn die KI 10 Minuten auf meine Städte haut mag ich nicht die ganze Zeit beobachten, was passiert^^
Was ich wohl heut abend machen würde:
Die Verbreitung in onBuildingBuilt besteht noch aus sich wiederholendem Code für die verschiedenen Ressourcen. Das kann in einer Methode in PAE_City zusammengefasst werden.
Ok, ich gucke mir die ersten beiden Punkte am WE mal an. Habe in den Logs auch noch was gefunden. Da fehlen bei mir ein paar Dateien:
Die Spion-Grafik ist wirklich nicht in Art/Units/Diverses/spy zu sehen.Code:ERR: FAudioManager::GetAudioTagIndex(): Could not find string AS3D_UN_BOW of TagId 4 ERR: FAudioManager::GetAudioTagIndex(): Could not find string AS3D_UN_LEATHER_CREAK_SHORT_RUN of TagId 4 ERR: FSharedSoundData::Load: Could not find file Sounds/Soundtrack/AgamemnonEarlyBronze. ERR: FSharedSoundData::Load: Could not find file Sounds/Soundtrack/Ishtar. ERR: FSharedSoundData::Load: Could not find file Sounds/Soundtrack/TheSacredFire. RESMGR: Texture FlagDECAL.dds failed to load RESMGR: Texture Great_Spy_Ancient_DIFF.dds failed to load RESMGR: Texture PlayerColor01.tga failed to load RESMGR: Texture PlayerColor02.tga failed to load RESMGR: Texture elfhood_gloss.dds failed to load RESMGR: Texture transparent.dds failed to load
Transparent und Playercolor* sollten aber schon da sein, da Standardgrafiken
Ignoriere ich aber erstmal, die Meldungen...
Warum entfernt BUILDING_LEVEE (Bewässerungskanäle) nicht mehr den Sumpf auf umliegenden Feldern? Deich und Kanalisation sind ja Spezialgebäude, die demnach nicht allen Civs zur Verfügung stehen, oder?
Kamele können nur auf Wüste vorkommen. Der Kamelstall erlaubt auch Prärie. Soll eins an das andere angepasst werden, oder bleibt das so?
Bei Pferd und Hund andersrum: die können laut XML auf Gras, Prärie und Tundra vorkommen, die Zucht verbreitet nur auf Gras und Prärie.
€: Elefanten können laut XML auf Wüste (mit Savanne) vorkommen, beim Elefantenstall nur auf Gras oder Prärie. Dafür brauchen XML-Elefanten immer Dschungel oder Savanne auf ihrer Wiese/Prärie/Wüste, Stall-Elefanten nicht.
Geändert von Flunky (08. Juli 2017 um 00:58 Uhr)
Das Problem ist, dass man innerhalb der Funktionen nur Zugriff auf die Strukturen 'CombatDetails' hat und nicht auf die beteiligten Einheiten. Man könnte jetzt probieren mit üblen Hacks die Info von HiddenNationality in die vorhandenen Member-Variablen von CombatDetails zu bringen oder versuchen vorher globale Variablen mit den beteilgten Einheiten zu befüllen.
Beides halte ich so kurz vor dem Freigeben von SDK-Änderungen für schlecht und würde die Sache verschieben.
Mit SDK-Änderung fügen wir die Variablen entweder als weiteres Python-Argument hinzu
oder erweitern gleich die CombatDetails-Struktur.
[…]Code:void CvUnit::resolveCombat(CvUnit* pDefender, CvPlot* pPlot, CvBattleDefinition& kBattle) { CombatDetails cdAttackerDetails; CombatDetails cdDefenderDetails; int iHiddenA = 0x01 & m_pUnitInfo->isHiddenNationality() int iHiddenD = 0x02 & !pDefender->getUnitInfo().isHiddenNationality()
[…]Code:if (isHuman() || pDefender->isHuman()) { //Added ST CyArgsList pyArgsCD; pyArgsCD.add(gDLL->getPythonIFace()->makePythonObject(&cdAttackerDetails)); pyArgsCD.add(gDLL->getPythonIFace()->makePythonObject(&cdDefenderDetails)); pyArgsCD.add(getCombatOdds(this, pDefender)); pyArgsCD.add(iHiddenA + iHiddenV) CvEventReporter::getInstance().genericEvent("combatLogCalc", pyArgsCD.makeFunctionArgs()); }
Code:if (isHuman() || pDefender->isHuman()) { CyArgsList pyArgs; pyArgs.add(gDLL->getPythonIFace()->makePythonObject(&cdAttackerDetails)); pyArgs.add(gDLL->getPythonIFace()->makePythonObject(&cdDefenderDetails)); pyArgs.add(1); pyArgs.add(iAttackerDamage); pyArgsCD.add(iHiddenA + iHiddenV) CvEventReporter::getInstance().genericEvent("combatLogHit", pyArgs.makeFunctionArgs()); }
Wenn man so einen Hack macht, kann man gleich die CombatDetails anpassen.
Ok. Hat ja Zeit.
Bei den UnitAIs ist es glaub ich am sinnvollsten, Emigranten, Strandgut und Versorger auf UNITAI_UNKNOWN zu stellen. Also im XML. Im Code einfach NO_UNITAI, das wird automatisch angepasst soweit ich weiß.
Mit UNITAI_UNKNOWN hält sich die DLL komplett raus. Für Emigranten und Strandgut passt das auf jeden Fall, letztere liegen ja eh nur rum, bis sie eingesammelt werden. Ist nur die Frage, was mit Versorgungskarren ist. Die müssten irgendwie der Armee zugeordnet werden, aber alle einigermaßen passenden AIs gehen von kampffähigen Einheiten aus.
Hab nochmal gepusht. Ich hoff es hat geklappt, Git hat wieder rumgezickt. Ich vergess immer, wie ich deine Commits richtig merge
Vielleicht UNITAI_COUNTER oder UNITAI_RESERVE. Leider gibt es keine Beschreibungstexte zu den Skripten, oder?
Ja, daher mein letzter Halbsatz Die vorgeschlagenen Codeänderungen berüchsichtigen das nur nicht, weil ich dann mehr als eine Funktion/Datei hätte ändern müssen und das wollte ich dann nicht hier angeben.
Ich mache es meist mit den zwei Schritten
Wenn beim zweiten Befehl auffällt, dass zu viel schief geht kann man mit git merge --abort das Abbrechen, vorher noch was ändern und es dann noch mal probieren. Kurzform, die beides zusammenfasst, wäreCode:git fetch flunky git merge flunky/PAE_Main
Code:git pull flunky PAE_Main
Mhm, ich dachte ich hätte genau das gemacht. Bin damit aber irgendwie in Detached Head state gelandet
@Counter und Reserve: die kämpfen beide.
Beide versuchen AI_guardCity, das mit FAssert(canDefend()); anfängt.
Hast ja wieder ein Stück im EventManager aufgeräumt
@Counter und Reserve: Ich habe noch ein paar andere Typen angeschaut, aber finde auch kein passenderes Skript.
Selber im SDK-UnitAI-Typen zu kreieren ist fast das einzige, was ich noch nie geschafft habe