Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 16

Thema: Feature abholzen = Ressource weg

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.11.08
    Ort
    NRW
    Beiträge
    115

    Feature abholzen = Ressource weg

    Hallo zusammen ,

    wie im Thema angedeutet suche ich nach einer Möglichkeit, wie beim Abholzen eines Waldes/Dschungels auch die entsprechende Ressource, die sich auf diesem Feld befindet, verschwindet.
    Ich bin mir nicht sicher ob das eine xml- oder pythonrelevante Modifikation ist.

  2. #2
    Whovian Avatar von antriot
    Registriert seit
    30.09.12
    Ort
    TARDIS Type 40
    Beiträge
    2.641
    Es gibt die Python Funktion onImprovementBuilt, die müsste auch beim Abholzen aufgerufen werden. So müsstest du die Ressource entfernen können, sobald abgeholzt wurde. Weißt du wie man das implementiert?
    Bedenke jedoch, dass die KI das erstmal nicht versteht, du müsstest ihr das Abholzen irgendwo in der GameUtil verbieten (da kenn ich mich nicht aus)
    Tick tock goes the clock...

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.11.08
    Ort
    NRW
    Beiträge
    115
    Nein, weiß ich leider nicht
    Sofern es für dich keinen allzu großen Aufwand bedeutet, wäre ich für eine kurze Anleitung dankbar.

    Das entsprechende Improvement für die Ressource erhält den xml-code "FeatureMakesValids", insofern sollte die KI die Modernisierung ähnlich wie das Sägewerk in einem Wald bauen und diesen nicht abholzen.

  4. #4
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.919
    Der Python-Code müsste bei "onFeatureRemoved" rein. Der wird aufgerufen, wenn irgendwo eine Geländeeigenschaft entfernt wird.
    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

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.11.08
    Ort
    NRW
    Beiträge
    115
    Kannst du mir vielleicht den kompletten Code nennen und die entsprechende Stelle, wo er hingehört?

  6. #6
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.919
    Die Stelle sieht jetzt so aus:
    Code:
    	def onPlotFeatureRemoved(self, argsList):
    		'Plot Revealed'
    		pPlot = argsList[0]
    		pCity = argsList[1]
    		iFeatureType = argsList[2] # This can be null????
    Meiner Meinung nach müsste reichen:
    Code:
        def onPlotFeatureRemoved(self, argsList):
            'Plot Revealed'
            pPlot = argsList[0]
            pCity = argsList[1]
            iFeatureType = argsList[2] # This can be null????
    ###Entfernt Bonus
            if ( iFeatureType == gc.getInfoTypeForString("FEATURE_FOREST"):
                pPlot.setBonusType(-1)
    ###Entfernt Bonus
    Damit wird allerdings JEDE Ressource auf dem Feld entfernt, wenn du das einschränken möchtest wird es komplizierter.
    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

  7. #7
    Registrierter Benutzer
    Registriert seit
    23.11.08
    Ort
    NRW
    Beiträge
    115
    Ah, super! Danke!
    Werde es in Kürze mal ausprobieren und dann ein Feedback geben.

  8. #8
    Registrierter Benutzer
    Registriert seit
    23.11.08
    Ort
    NRW
    Beiträge
    115
    Hallo Kathy,

    leider funktioniert der Code nicht
    Hast du noch eine Idee?

    In der "History Rewritten" Mod haben sie es auch geschafft, die Änderung wurde aber nicht in der CvEventManager.py sondern in einer seperaten Datei vorgenommen.
    Ab spätestens hier wird es für mich aber zu undurchsichtig.

    Ich habe dir die Codes mal hier reingesetzt, vielleicht hift es bei der Suche nach einer Lösung.

    CvEventManager.py

    Code:
    	
    def onPlotFeatureRemoved(self, argsList):
    		'Plot Feature Removed'
    		pPlot = argsList[0]
    		pCity = argsList[1]
    		iFeatureType = argsList[2]
    
    	### Chopping
    		HR.doChopping(pPlot, pCity, False)
    		###

    Seperate Python-Datei

    Code:
    ### TERRAIN
    
    def doChopping(pPlot, pCity, bForce):
    	'Adds production from chopping to a city'
    	iPlayer = pCity.getOwner()
    	pPlayer = gc.getPlayer(iPlayer)
    	iFeature = pPlot.getFeatureType()
    	lFeature = [gc.getInfoTypeForString('FEATURE_FOREST'), gc.getInfoTypeForString('FEATURE_JUNGLE'), gc.getInfoTypeForString('FEATURE_SAVANNAH')]
    	lBuild = [gc.getInfoTypeForString('BUILD_REMOVE_FOREST'), gc.getInfoTypeForString('BUILD_REMOVE_JUNGLE'), gc.getInfoTypeForString('BUILD_REMOVE_SAVANNAH')]
    	iProduction = 0
    	iBaseProduction = 0
    
    	for i in xrange(len(lFeature)):
    		if lFeature[i] == iFeature:
    			iBuild = lBuild[i]
    			iBaseProduction = pPlot.getFeatureProduction(iBuild, pPlayer.getTeam(), pCity)
    			break
    
    	if iBaseProduction > 0:
    		if bForce:
    			iProduction += iBaseProduction
    
    		# Extra chop production from civic
    		if pPlayer.isCivic(Civic.ChoppingModifier[0]):
    			iProduction += (iBaseProduction * Civic.ChoppingModifier[1] / 100)
    
    		# Extra production if a Prime Timber resource is also chopped
    		if pPlot.getBonusType(-1) == gc.getInfoTypeForString('BONUS_TIMBER'):
    			pPlot.setBonusType(-1)
    			iProduction += iBaseProduction
    			if pPlayer.isCivic(Civic.ChoppingModifier[0]):
    				iProduction += (iBaseProduction * Civic.ChoppingModifier[1] / 100)
    
    			BonusInfo = gc.getBonusInfo(gc.getInfoTypeForString('BONUS_TIMBER'))
    			for iPlayerX in xrange (gc.getMAX_CIV_PLAYERS()):
    				if iPlayerX != iPlayer:
    					pPlayerX = gc.getPlayer(iPlayerX)
    					if pPlot.isVisible(pPlayerX.getTeam(), False):
    						CyInterface().addMessage(iPlayerX, True, 10, CyTranslator().getText("TXT_KEY_MESSAGE_BONUS_DESTROYED", (BonusInfo.getDescription(),)), "", 0, BonusInfo.getButton(), gc.getInfoTypeForString("COLOR_WARNING_TEXT"), pPlot.getX(), pPlot.getY(), True, True)
    
    	if iProduction > 0:
    		sFeature = gc.getFeatureInfo(iFeature).getDescription()
    		pCity.setFeatureProduction(iProduction + pCity.getFeatureProduction())
    		CyInterface().addMessage(iPlayer, True, 10, CyTranslator().getText("TXT_KEY_MISC_CLEARING_FEATURE_BONUS", (sFeature, iProduction, pCity.getName())), "", 0, "", -1, -1, -1, False, False)

  9. #9
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.919
    Zitat Zitat von stefancoe Beitrag anzeigen
    Hallo Kathy,

    leider funktioniert der Code nicht
    Hast du noch eine Idee?
    Kannst du vielleicht etwas genauer beschreiben, was nicht funktioniert? Stürzt das Spiel ab, passiert einfach nichts,...

    Wenn du in der CivilizationIV.ini (normalerweise unter Mygames/Beyond the Sword) den Eintrag "Hide Python Exceptions" auf "0" setzt bekommst du vielleicht eine Fehlermeldung angezeigt, die mir etwas mehr hilft, warum es nicht funktioniert. Lad dann einmal einen Screenshot von der Fehlermeldung hoch.
    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

  10. #10
    Registrierter Benutzer
    Registriert seit
    23.11.08
    Ort
    NRW
    Beiträge
    115
    Hallo Kathi,

    sorry für die spärliche Auskunft.

    Also: Das Spiel startet scheinbar normal, doch bereits zu Beginn eines neuen Spieles erscheint das Intro-Fenster nicht ("Die Sonne erhellt das Jahr 4000 BC....").
    Danach läuft soweit alles, allerdings bleibt die Ressource nach dem Abholzen immer noch auf dem Geländefeld.

    Wie gewünscht habe ich die entsprechende ini-Datei editiert und die Fehlermeldungen dokumentiert (von links nach rechts,beginnend bei Bild 79, dann 53, 55... chronologisch weiter/ Anm. Von den "leeren" Meldeungen wie auf Bild 73 zu sehen ist erscheinen mehrere).
    Wenn ich den Python-Code herausnehme, erscheint - zum Glück - keine dieser Meldungen, also hat es definitiv mit dem neuen Code zu tun.

    Ich hoffe du findest eine Lösung

    Angehängte Grafiken Angehängte Grafiken

  11. #11
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.919
    In der Zeile mit dem
    Code:
     if ( iFeatureType == gc.getInfoTypeForString("FEATURE_FOREST")):
    fehlt die letzte Klammer, die ich hier fett+rot markiert habe. Die fehlte schon in meinem ersten Entwurf.
    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

  12. #12
    Registrierter Benutzer
    Registriert seit
    23.11.08
    Ort
    NRW
    Beiträge
    115
    Hallo Kathi,

    oh stimmt. Aber das hat leider auch noch nicht das Problem gelöst.

    AbsintheRed von den civfanatics meint folgendes, hat aber auch nicht funktioniert.:

    Are you sure about the order in the argslist?
    For me it's the other way around for iFeatureType and pCity:
    Code:
    Code:
    def onPlotFeatureRemoved(self, argsList):
    		'Plot Revealed'
    		pPlot = argsList[0]
    		iFeatureType = argsList[1]
    		pCity = argsList[2] # This can be null
    The pPlot.setBonusType(-1) definitely works (if pPlot is gc.getMap().plot(iX,iY), but I assume that's what it get's), I also use it in my mod

    EDIT: yeah, checked in the dll
    the argslist is: CvPlot *pPlot, FeatureTypes eFeature, CvCity* pCity
    so just switch argsList[1] and argsList[2] in your code, and it will work

  13. #13
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.919
    Hast du einmal beide Änderungen kombiniert? Kommt dann wieder eine Fehlermeldung?
    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

  14. #14
    Registrierter Benutzer
    Registriert seit
    23.11.08
    Ort
    NRW
    Beiträge
    115
    Hallo Kathi,

    ja, ich habe sowohl die Änderungen von AbsintheRed vorgenommen als auch das fehlende ")" hinzugefügt.
    Leider immer noch die gleiche Fehlermeldung.

    Kann das evt. mit anderen Änderungen zusammenhängen, die ich in der Datei bereits getätigt habe?
    Allerdings habe ich bisher keine Änderungen in dem Bereich def onPlotFeatureRemoved(self, argsList): vorgenommen, da ist alles noch im wie im Original.

  15. #15
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.919
    Nein, es sollte nicht an Änderungen in anderen Absätzen liegen.
    Poste doch einmal bitte deinen Absatz, damit ich sehen kann, wie es am Stück aussieht. Irgend etwas ist mit der Syntax in dieser Zeile nicht in Ordnung.
    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •