Wenn BUG/BAT keinen Eventmanager enthält (ich hatte verstanden, dass das das Problem sei), was für einen verwendet das Spiel dann? Eigentlich bleibt doch dann nur der Zugriff auf den im Hauptspiel.
Wenn BUG/BAT keinen Eventmanager enthält (ich hatte verstanden, dass das das Problem sei), was für einen verwendet das Spiel dann? Eigentlich bleibt doch dann nur der Zugriff auf den im Hauptspiel.
Zumindest BUG verwendet doch den EventManager, im Modul BugEventManager.py . Genauergesagt es wird von CvEventManager abgeleitet.
Fehlermeldung
Nach langer Zeit ist dieser Fehler mal wieder aufgetreten...ich hatte die frage schon mal gestellt, Kathy wird sich mit ihren Eli-Gedächtnis sicher erinnnern.
es handelt sich um diese zeile:
die ich dann so geädert habe...PHP-Code:
iCapitalArea = pNewOwnerCapital.area().getID()
Aber diese ändeerung ergab eine neue Fehlermeldung die ich aber nicht aufgezeichnet habe...PHP-Code:
iCapitalArea = pNewOwnerCapital.getArea()
Hier nnoch mal
Conflict on Chiron - Sid Meier's Alpha Centauri vs. Call to Power!
Neu Version Conflict on Chiron v3.4 BETA - 16.01.16
Patch1 - 07.04.16
Die deutschen Sounds und Wunderfilme sind bereits in der MainFile integriert!
Ihr könnt sofort loslegen.
Über Feedback würde ich mich freuen...
Was war der Grund für die Änderung? Es wäre die Zeile aus dem Python code, der in der Fehlermeldung als erstes genannt wird, sehr nützlich.
PHP-Code:
def onCityAcquired(self, argsList):
'City Acquired'
iPreviousOwner,iNewOwner,pCity,bConquest,bTrade = argsList
CvUtil.pyPrint('City Acquired Event: %s' %(pCity.getName()))
pNewOwner = gc.getPlayer(iNewOwner)
pTeam = gc.getTeam(pNewOwner.getTeam())
pPlot = pCity.plot()
iX=pCity.getX()
iY=pCity.getY()
iOriginalOwner = pCity.getOriginalOwner ()
pOriginalOwner = gc.getPlayer(iOriginalOwner)
if not pOriginalOwner.isAlive():
if gc.getMAX_CIV_PLAYERS ()>CyGame().countCivPlayersAlive ():
OriginalName = pOriginalOwner.getName ()
if pNewOwner.isHuman():
iCity = pCity.getID()
CyCamera().JustLookAtPlot( CyMap().plot(iX, iY))
popupInfo = CyPopupInfo()
popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON)
popupInfo.setText(CyTranslator().getText("TXT_KEY_POPUP_FREE_CITY",(pCity.getName(), OriginalName )))
popupInfo.setData1(iNewOwner)
popupInfo.setData2(iCity)
popupInfo.setData3(iOriginalOwner)
popupInfo.setOnClickedPythonCallback("FreeCity")
popupInfo.addPythonButton(CyTranslator().getText("TXT_KEY_POPUP_STADT_BEFREIEN", ()), "")
popupInfo.addPythonButton(CyTranslator().getText("TXT_KEY_POPUP_STADT_NICHT_BEFREIEN", ()), "")
popupInfo.addPopup(iNewOwner)
if not pNewOwner.isHuman():
pOriginalteam = gc.getTeam(iOriginalOwner)
iOriginalTeam = pOriginalteam.getID()
pNewOwnerTeam = gc.getTeam(iNewOwner)
iChance = gc.getGame().getSorenRandNum(3, "Partisan event placement")###Die Bedingungen ab hier müssten natürlich angepasst werden. Damit wird festgelegt, nach welchen Bedingungen die KI eine eroberte Stadt befreit. Bei mit ist das eine Zufallszahl +/-Modifikatoren, wenn die Summe 5 übersteigt, wird befreit
traits = ("TRAIT_HUMANITARIAN", "TRAIT_FUNDAMENTALIST", "TRAIT_ECOLOGIST", "TRAIT_INFOGIRL", "TRAIT_SCIENTIST", "TRAIT_MOGUL", "TRAIT_PROPHET", "TRAIT_QUARIANS", "TRAIT_LABORER", "TRAIT_BUCCANEER", "TRAIT_SWARM", "TRAIT_TRANSHUMANIST")
if any( ( pOriginalOwner.hasTrait( gc.getInfoTypeForString(trait) ) for trait in traits ) ):
iChance = iChance +2
if pNewOwnerTeam.isAtWar (iOriginalTeam):
iChange = iChance -1
if pNewOwner.hasTrait(gc.getInfoTypeForString("TRAIT_HUMANITARIAN")):
iChance = iChance +2
if pNewOwner.hasTrait(gc.getInfoTypeForString("TRAIT_TRANSHUMANIST")):
iChance = iChance +1
if pNewOwner.hasTrait(gc.getInfoTypeForString("TRAIT_SCIENTIST")):
iChance = iChance +1
if pNewOwnerTeam.isHasTech(gc.getInfoTypeForString("TECH_SOCIAL_PSYCH")):
iChance = iChance +1
if pNewOwnerTeam.isHasTech(gc.getInfoTypeForString("TECH_FACTIONALISM")):
iChance = iChance +1
if pNewOwnerTeam.isHasTech(gc.getInfoTypeForString("TECH_PERSONALITY_TRANSCRIPTION")):
iChance = iChance +1
if pNewOwner.isCivic(gc.getInfoTypeForString("CIVIC_DRONE_CORVEE")):
iChance = iChance -2
if pNewOwner.isCivic(gc.getInfoTypeForString("CIVIC_DEMOCRATIC")):
iChance = iChance +2
if pNewOwner.isCivic(gc.getInfoTypeForString("CIVIC_POLICE_STATE")):
iChance = iChance -1
pNewOwnerCapital = pNewOwner.getCapitalCity()
iCapturedArea = pCity.area().getID
iCapitalArea = pNewOwnerCapital.area().getID() ##### zeile 804
if not (iCapturedArea == iCapitalArea):
iChance = iChance +1
if iChance > 5:
pOriginalOwner.acquireCity(pCity,False,True)
pNewOwnerTeam.assignVassal(pOriginalteam.getID(), false)
pOriginalOwner.AI_changeAttitudeExtra(iNewOwner,5)
Conflict on Chiron - Sid Meier's Alpha Centauri vs. Call to Power!
Neu Version Conflict on Chiron v3.4 BETA - 16.01.16
Patch1 - 07.04.16
Die deutschen Sounds und Wunderfilme sind bereits in der MainFile integriert!
Ihr könnt sofort loslegen.
Über Feedback würde ich mich freuen...
Ohne Nummern kann ich nicht abzählen wo der Fehler liegt. Ich brauche mindestens eine Angabe, welche Nummer die erste Zeile des Auszuges ist.
edit: Ich vermute mal, iCity = pCity.getID() ist die richtige Zeile.
edit2: eher iCapturedArea = pCity.area().getID
Geändert von rucivfan (03. Februar 2013 um 10:55 Uhr)
ja sorry, korrigiert....
Conflict on Chiron - Sid Meier's Alpha Centauri vs. Call to Power!
Neu Version Conflict on Chiron v3.4 BETA - 16.01.16
Patch1 - 07.04.16
Die deutschen Sounds und Wunderfilme sind bereits in der MainFile integriert!
Ihr könnt sofort loslegen.
Über Feedback würde ich mich freuen...
Der Grund war, dass "getArea()" die ID der Area direkt zurückgibt, und damit der Umweg über ".area().getID()" abgekürzt würde. Das Problem ist nur: ein City-Objekt kennt den Befehl "getArea()" gar nicht (den gibt es nur für Plots), wie eine Überprüfung jetzt ergab. Ich weiß nicht, wer das vorgeschlagen hatte, aber es kann nicht dunktionieren. Was passiert, wenn du den ursprünglichen Wert wieder einsetzt? Bitte gib uns dann auch noch einmal den ganzen Code, vielleicht lässt sich da ein anderer Fehler finden.
Edit. Crosspost/zu langsam
Kathy:
Das habe ich gerade auch gedacht und festgestellt. Das gilt aber nicht für den c++ Code. Dort gibt es so eine Methode. Es gibt nur keine Pythonerweiterung,
Versuch es mal in zwei Zeilen:
pCapitalArea = pNewOwnerCapital.area()
iCapitalArea = pCapitalArea.getID()
Ich wüsste zwar nicht, dass das einen Unterschied macht, aber vielleicht tritt dann in der ersten Zeile schon ein Fehler auf und wir können es eingrenzen.
Vielleicht hilft es auch, dir nach "pNewOwnerCapital = pNewOwner.getCapitalCity() " mit einer Textzeile die Hauptstadt ausgeben zu lassen, damit wir wissen, ob er sie wirklich korrekt ermittelt hat.
Kann ich in der GameUtils bei dieser Bedingung eine Weitere Hinzufügen, zb eine Tech?!?!
PHP-Code:
if eBuilding == gc.getInfoTypeForString("BUILDING_ORBITAL_PHALANX"):
if pCity.getNumRealBuilding(gc.getInfoTypeForString("BUILDING_ORBITAL_BASE_LAND")) and not pCity.getNumRealBuilding(eBuilding):
return True
Conflict on Chiron - Sid Meier's Alpha Centauri vs. Call to Power!
Neu Version Conflict on Chiron v3.4 BETA - 16.01.16
Patch1 - 07.04.16
Die deutschen Sounds und Wunderfilme sind bereits in der MainFile integriert!
Ihr könnt sofort loslegen.
Über Feedback würde ich mich freuen...
Ich verstehe nicht, wieso die Frage gestellt wird. Entweder du weißt, was du willst oder lass die Finger davon.
Wenn man weiß, was man macht, kann man viel ändern.
Geändert von rucivfan (04. Februar 2013 um 19:25 Uhr)
Müsste gehen, einfach noch eine weitere If-Verschachtelung hinter die letzte setzen. Wo ist das Problem?
Wozu dient das Konstrukt überhaupt? Du kannst doch für "BUILDINGCLASS_ORBITAL_PHALANX" auch das Gebäude "BUILDINGCLASS_ORBITAL_BASE_LAND" in der xml zur Voraussetung machen.
Ich glaube dir ja, dass es einen Hintergedanken hat, aber es ist für mich erstmal nicht ersichtlich.
...du hats recht Kathy, klar kann ich das machen, leider muss ich aber einen Umweg gehen...
Ui, ich glaube ich muss ganz vorne anfangen...ich denke das wird schwer zu verstehen.
Damit ich das mit Den Orbitalbasen geschaukelt bekomme, musste ich zwei "Orbital Base" Klassen erstellen, eine damit über Land gegründet werden kann und eine Über wasser .
Wenn eine OrbitalBasis gegründet wrid, wird automatisch das Gebäude O-Base_Land bzw O-Base gesetzt, auch damit die Stadt überhaupt angezeigt wird. Je nachdem wo sich die Gründungseinheit gerade befindet.
Alle Gebäude die ich für die für die Orbitalen Basen geschaffen habe, benutzen als Vorraussetzung BUILDING_ORBITAL_BASE...
Damit diese Gebäude aber auch in der Land- Variante gebaut werden können, dieses Konstrukt über euch...
Das dumme ist nur, wenn die Orbital-Basis_LAnd Vorhanden ist, kann man komischer weise auch die Gebäude bauen die ich für die ganze "orbial_Basen_schiene" erstellt habe, auch ohne die Tech erforscht zu haben.
Wie würde die zweite if Schleife aussehen...
PHP-Code:
def canConstruct(self,argsList):
pCity = argsList[0]
eBuilding = argsList[1]
bContinue = argsList[2]
bTestVisible = argsList[3]
bIgnoreCost = argsList[4]
eTech = argList[5]
if eBuilding == gc.getInfoTypeForString("BUILDING_SUBSPACE_GENERATOR"):
if pCity.getNumRealBuilding(gc.getInfoTypeForString("BUILDING_ORBITAL_BASE_LAND")) and not pCity.getNumRealBuilding(eBuilding):
if pCity.getNumRealTech(gc.getInfoTypeForString("TECH_XXX")) and not pCity.getNumRealTech(eTech):
return True
Geändert von Monaldinio (04. Februar 2013 um 19:40 Uhr)
Conflict on Chiron - Sid Meier's Alpha Centauri vs. Call to Power!
Neu Version Conflict on Chiron v3.4 BETA - 16.01.16
Patch1 - 07.04.16
Die deutschen Sounds und Wunderfilme sind bereits in der MainFile integriert!
Ihr könnt sofort loslegen.
Über Feedback würde ich mich freuen...
Ein grundlegende Problem ist, du sagst, wann man bauen kann. Es ist aber umgekehrt sinnvoller. Geben am Ende immer true wieder. Vorher fragst du ab, unter welchen Bedingungen man nicht bauen darf. Das sollte viel zuverlässlicher sein.
edit:
Wird die Zeile wirklich auf der Stadt ausgeführt? Nicht Team?Code:if pCity.getNumRealTech(gc.getInfoTypeForString("TECH_XXX")) and not pCity.getNumRealTech(eTech):
Geändert von rucivfan (04. Februar 2013 um 20:01 Uhr)