10 Sekunden passen eher.
10 Sekunden passen eher.
Ich hatte in meinem derzeitigen Spiel mehrfach folgendes "Problem": Sobald meine Eroberungsarmee sich einer Barbarenstadt näherte, wurden dort alle bis auf 1 Verteidigungseinheit aufgelöst, und das nicht einmal unbedingt die Stärkste. So war es für mich ziemlich leicht, diese Barbarenstädte zu erobern, aber spielerisch war es eine Enttäuschung. Warum macht die KI so etwas? Gibt es eine einfache Möglichkeit, das abzustellen? Selbst, wenn die Barbaren Unterhaltsprobleme hätten (dürften sie doch eigentlich sowieso nicht) macht es keinen Sinn, ausgerechnet in der Runde vor dem Angriff die halbe Armee aufzulösen. Und zwar wirklich immer in genau der Runde vor dem Angriff. Das Phänomen trat bei 7 von 9 Barbarenstädten auf.
That's why I am here: Mein Mod
Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude
Die aktuelle Story zum Mod:
Die Vereinigten Staaten von Amerika
Alte Stories zu alten Versionen:
Alte Storys
Haben nen Kompilierungsfehler bei der Debug DLL (nur dort):
Der Verweis geht dann zuPHP-Code:
1>e:\BASE SDK\CvGameCoreDLL 6.3\CvGlobals.h(171) : fatal error C1067: compiler limit : debug information module size exceeded
An der CvMap wurde aber nie was geändert. Kann es sein, dass die Globals zu groß geworden ist? Dieselbe Fehlermeldung gibt's ja bekanntermaßen bei der CvPlayerInterface1.cpp, wenn sie zu groß wird.PHP-Code:
CvMap& getMapINLINE() { return *m_map; }
Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5
Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)
Wegen Codezeile + https://msdn.microsoft.com/de-de/library/d8s456s8.aspx
würde ich dir Recht geben. Die Klasse wird (für diesen Compiler) zu groß.
Da du CvMap nicht direkt geändert hast müsste es was sein, wie z.B. eine Struktur innerhalb von CvMap, die verändert wurde. Das muss nicht unbedingt in CvDefines.h der Fall sein.
Wir haben jetzt in der CvGlobals eine Member-Funktion auskommentiert und dann kompilierte es.
Hallo zusammen,
ich bin was SDK angeht noch komplett unerfahren. Mein Mod wird auf K-Mod aufgebaut besitzt natürlich eine GameCore.dll
Ich möchte gerne aus einem anderen Mod... den DCM ein paar Codeblöcke aus der CvUnit.cpp in die K-Mod übertragen.
dreht sich um ein Script für eine Unit DCM Nukebomber ist ja vielleicht bekannt. Der Rest vom
DCM ist nicht so wichtig.
Wäre es viel Arbeit das in die DLL zu übertragen?
So grob sollte das die Codeblöcke sein:
Muss halt noch alle Tools zusammen suchen und installieren.Code:/************************************************************************************************/ /* DCM START 04/19/09 Johny Smith */ /************************************************************************************************/ // Dale - NB: A-Bomb START if(canNuke(pPlot)) { kill(true); return; } // Dale - NB: A-Bomb END /************************************************************************************************/ /* DCM END */ /************************************************************************************************/ /************************************************************************************************/ /* DCM START 04/19/09 Johny Smith */ /************************************************************************************************/ // Dale - NB: A-Bomb START if (!((TeamTypes)iI == GET_TEAM(getTeam()).getID())) { if (isNukeVictim(pTargetPlot, ((TeamTypes)iI))) { if (!isEnemy((TeamTypes)iI)) { return false; } } } // Dale - NB: A-Bomb END /************************************************************************************************/ /* DCM END */ /************************************************************************************************/ /************************************************************************************************/ /* DCM START 04/19/09 Johny Smith */ /************************************************************************************************/ // Dale - NB: A-Bomb START if (!((TeamTypes)iI == GET_TEAM(getTeam()).getID())) { GET_TEAM(getTeam()).declareWar(((TeamTypes)iI), false, WARPLAN_TOTAL); } // Dale - NB: A-Bomb END /************************************************************************************************/ /* DCM END */ /************************************************************************************************/ /************************************************************************************************/ /* DCM START 04/19/09 Johny Smith */ /************************************************************************************************/ // Dale - NB: A-Bomb START if(airBaseCombatStr() != 0) { if (interceptTest(pPlot)) { return true; } } // Dale - NB: A-Bomb END /************************************************************************************************/ /* DCM END */ /************************************************************************************************/ /************************************************************************************************/ /* DCM START 04/19/09 Johny Smith */ /************************************************************************************************/ // Dale - NB: A-Bomb START if(airBaseCombatStr() != 0) { CvAirMissionDefinition kAirMission; kAirMission.setMissionTime(GC.getMissionInfo(MISSION_AIRSTRIKE).getTime() * gDLL->getSecsPerTurn()); kAirMission.setMissionType(MISSION_AIRSTRIKE); kAirMission.setPlot(pPlot); kAirMission.setUnit(BATTLE_UNIT_ATTACKER, this); kAirMission.setUnit(BATTLE_UNIT_DEFENDER, NULL); kAirMission.setDamage(BATTLE_UNIT_DEFENDER, 0); kAirMission.setDamage(BATTLE_UNIT_ATTACKER, 0); gDLL->getEntityIFace()->AddMission(&kAirMission); } else { // Nuke entity mission CvMissionDefinition kDefiniton; kDefiniton.setMissionTime(GC.getMissionInfo(MISSION_NUKE).getTime() * gDLL->getSecsPerTurn()); kDefiniton.setMissionType(MISSION_NUKE); kDefiniton.setPlot(pPlot); kDefiniton.setUnit(BATTLE_UNIT_ATTACKER, this); kDefiniton.setUnit(BATTLE_UNIT_DEFENDER, NULL); // Add the non-intercepted mission (defender is NULL) gDLL->getEntityIFace()->AddMission(&kDefiniton); } // Dale - NB: A-Bomb END /************************************************************************************************/ /* DCM END */ /************************************************************************************************/
Vielleicht könnte man die Funktion auch über Pyhton abbilden!??!
Geändert von xaster (20. August 2017 um 03:06 Uhr)
Da hilft nur: Probieren über studieren. Du musst beim mergen selber schauen, wie viel Aufwand das ist und ob es dir das wert ist.
Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5
Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)
Der Code siehe oben, stellt sicher das ein Bomber der als Nuke im XML steht auch noch als Bomber funktioniert wenn ich das richtig verstehe. Vielleicht wäre das auch in Pyhton zu machen ?
....hab mir mal den Code angesehen und auch mit der K-mod CvUnit.cpp genauer verglichen, ein Merge für diese 4 Codeblocke wäre ein Witz. Das einzige Problem was ich da sehe ist einfach die Handhabung der DLL und das Kompilieren damit kenne ich mich echt null aus. Wie ist das eigentlich genau... kann man sich das vorstellen wie ein Archiv das man entpacken kann, ändert was in z.b. dieser CvUnit.cpp und dann wird es wieder zur DLL zusammengefügt
Sorry diese Sache ist echt Neuland für mich
Habe mich jetzt mal um die Tools gekümmert.....
Microsoft Visual C++ Toolkit 2003 installiert und darin dann msvcrt.lib, msvcrtd.lib, msvcprt.lib reinkopiert.
Das Microsoft Visual C++ 2008 Express Edition installiert.
makefile fastdep hab ich auch als Download
Bei ausführen der Windows SDK kommt eine Fehlermeldung, habe aber 3 SDK Versionen unter Programme aufgeführt ?!?
Geändert von xaster (20. August 2017 um 04:02 Uhr)
Man muss da ein bisschen was konfigurieren vorm ersten Mal. Ist bei mir schon nen Jahrzehnt her gefühlt. Bei den Fanatics gibt's aber nen Tutorial soweit ich weiß.
Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5
Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)
Welches SDK muss den drauf sein ??? bei mit ist C:\Program Files\Microsoft SDKs\Windows\v6.0A verfügbar ???
Also ich bekomme das SDK 7.1 einfach nicht drauf ist eine Win10 Maschine...
EDIT doch geschafft, SDK 7.1 wurde installiert, lag am Setup hatte das für 32bit.
Ist die SDK 7.1 die richtige ?
Geändert von xaster (20. August 2017 um 05:39 Uhr)
Kollegen ich brauche jetzt mal eure Hilfe ob ich alles richtg gemacht habe, so sicher bin ich mir da gerade nicht
Ich habe mich soweit es ging an diesen HOW TO gehalten.
Tools wie folgt habe ich besorgt und installiert:
1# install the Microsoft Platform SDK v7.1
2# install Microsoft Visual C++ Toolkit 2003
3# put three library files in this folder: C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib
msvcrt.lib msvcrtd.lib msvcprt.lib
4# install Microsoft Visual C++ 2008 Express Edition
5# Download Makefile.7z
Nun habe ich mir den K-Mod Source von https://github.com/karadoc/Civ4-K-Mod geladen.
Nur leider gab es im CvGameCoreDLL Ordner keinen Boost-1.32.0 & Python24 Unterordner.
Diese habe ich dann aus BTS\CvGameCoreDLL genommen.
Die eine CvUnit.cpp hab ich locker mit dem DCM Nukebomber Code gemerged.
Nun noch die fastdep.exe & Makefile in den project ordner gelegt.
Die Einstellung im MS C++ 2008 und im Makefile habe ich wie beschrieben durchgeführt.
Meine Release DLL wurde erstellt. Das log habe ich mal angehängt
Eine Warung wurde ausgeworfen: LINK : warning LNK4089: all references to 'KERNEL32.dll' discarded by /OPT:REF
Die neue CvGameCore.DLL hab ich in meinen Mod kopiert und der Nukebomber funktioniert nun wie im DCM
Das ich ja schon mal was
Ich habe von der ganzen Sache echt keine Ahnung und bin eigentlich nur durch die Anleitungen geflogen.
Jetzt würde gerne wissen ob ich das richtig gemacht habe gerade da wo ich improvisieren musste....
Wäre net wenn ihr euch mal das Log ansehen könntet und ob die Schritte oben okay sind, Dankeschöööönn
Wenns funktioniert, dann funktionierts.
Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5
Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)
Die Warnung ist normal.
ja cool. wenn ihr keine Einwände wegen der Nutzung von den Boost-1.32.0 & Python24 Unterordner aus BTS habt bin ich Happy.
die waren bei den Source Files von K-Mod nicht dabei.
Denke wenn ich was falsch gemacht hätte beim compilen dann würde das Spiel garnicht richtig starten geschweige denn Laufen mit der neuen DLL.
Ich habe in meinem Mod eine blöde Schleife. Irgendwann kommt ein Punkt, an dem ein bestimmter Spieler festhängt. Ich habe nur keine Idee, wie ich diese Schleife identifizieren kann.
Tatsache ist, dass ich das Problem beheben kann, wenn ich im Weltenbauer den betreffenden Spieler von "Krieg" auf "Frieden" mit einer anderen KI umstelle. Hat jemand eine Idee, wie man sich vernünftig dem Problem annähern kann?
Was ich weiß ist, dass der Spieler davor seine Runde beendet. Der nächste Spieler beginnt, aber ich weiß nicht wie weit er kommt. Ich kann sehen, dass dieser Spieler noch keine Einheit irgend eines Gegners getötet hat. Vermutlich hat er also kaum eine Einheit bewegt. Aber wie finde ich nun die Einheit, an der er sich aufhängt? Oder die Ursache, dass es sich aufhängt?
That's why I am here: Mein Mod
Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude
Die aktuelle Story zum Mod:
Die Vereinigten Staaten von Amerika
Alte Stories zu alten Versionen:
Alte Storys