Seite 182 von 182 ErsteErste ... 82132172178179180181182
Ergebnis 2.716 bis 2.726 von 2726

Thema: Der SDK-Fragen-Thread

  1. #2716
    PAE.Sucht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    17.266
    Ah, ok danke! Als Dank dafür wirst du an dieser Stelle namentlich erwähnt
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins allerletzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features, die Spaß machen. Hand drauf!


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden soll ...

  2. #2717
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.373
    Weiß jemand, ob/wie man erfassen kann, wie viele Gebäude eines BuildingClass derzeit in irgendwelchen Baulisten vorhanden sind (bei allen Spielern zusammen) - und wie man dann verhindern kann, dass man dieses Gebäude noch einmal in die Bauliste setzt, aber nicht die derzeitigen Bauten abbricht? Also so, wie man ein Nationales Wunder auch nur einmal bauen kann und nicht in zwei Städten zugleich - aber halt eben, dass es weltweit gilt? Bereits fertige Gebäude sollen ausdrücklich nicht berücksichtigt werden, es geht nur um die derzeit in Bau befindlichen.
    Hintergrund ist ein Feature, dass bestimmte Gebäude (Olympiastation, Weltausstellung, Fußballweltmeisterschaft) zwar in mehreren Städten gebaut werden sollen, aber in jedem Zug nur eine Olympiade stattfinden soll.
    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

  3. #2718
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.136
    Ist das nicht das gleiche wie ein Weltwunderbau, nur das das Weltwunder nach Bau entfernt wird und wieder gebaut werden kann? Gut mehrere Städte sind das Problem.
    Gut, besser, BASE. BASE ist eine Modifikation für Civilization IV: Beyond the Sword, die wie eine größere Erweiterung nah am Originalspiel verbleiben soll.

  4. #2719
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.373
    Ja, irgendwo wird bei den Wundern auch gecheckt, wie viele in der Bauliste sind - aber es können auch mehrere Civs gleichzeitig dasselbe Wunder bauen. Bei "isBuildingClassMaxedOut" werden dann nur die fertigen Gebäude berücksichtigt. Damit mein Vorhaben klappt, dürfen aber auch nicht zwei Civs zugleich dieses Gebäude bauen. Da habe ich keine Idee, wo ich gucken muss.

    Mein erster Ansatz war, dass es egal ist, wie viele Leute bauen - es darf aber immer nur eines pro Runde fertig werden. Da hatte ich aber noch weniger Ideen, wie ich das machen soll, außer, dass ich mit Fertigstellung alle anderen aus der Bauliste kicke. Was ich mir aber sehr lästig vorstelle, wenn man dann z.B. drei Expos baut, und die jede Runde kommt dann dreimal "Stadt XY kann Gebäude ... nicht fortsetzen" - nur, aber man kann es sofort wieder reinstellen, weil nächste Runde geht es dann ja wieder.
    Vermutlich muss ich mir die nationalen Wunder einmal dazu ansehen.
    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. #2720
    Wee Free Man Avatar von Rob Anybody
    Registriert seit
    20.05.06
    Ort
    Ruhrstadt
    Beiträge
    19.351
    Wie häufig kommen Olympiaden in einen Spiel vor? max. 10x ?

    Ich würde einfach 10 verschiedene einmalige Weltwunder "Olympiade" in xml modden, jedes mit Vorgänger als Bedingung. Olympiade2 erfordert Olympiade1, .. bis hin zu Olympiade10 erfordert Olympiade9. (für den Spieler als römische Nummern anzeigen)

    Wenn nun noch jedes begonnene Projekt Olympiade1 zu Olympiade2, Olympiade2 zu Olympiade3, ... (entsprechend veralteter Einheiten) aktualisiert wird, geht auch kein Baufortschritt verloren.

    Allerdings, das wird ein Problem wenn es 50 oder noch mehr Olympiaden geben soll ...
    Aber vielleich gibt es eine Phyton-Lösung wie man die Olympiaden automatisch hochzählen kann ...

    ----

    Zum Vorschlag von Ramk: Dann geht der Baufortshritt jedes mal verloren, oder?

    ----

    Edit: damit nicht zB sofort Olympiade3 auf Olympiade2 folgt, könnte man die Baukosten immer weiter erhöhen. 1. -> 100 . 2. -> 200 usw.
    Allerdings, wenn ein Spieler anstelle der erwarteten 1. Olympiade (100 , erst die 10. Olympiade (1000 ) "gewinnt", ist das für ihn unerwartet teuer geworden ....
    Geändert von Rob Anybody (06. September 2025 um 15:13 Uhr)
    Aber an jenem Morgen war es Magie gewesen. Und es hörte nicht auf, Magie zu sein,
    nur weil man [inzwischen] eine Erklärung dafür hatte ...
    (Terry Pratchett)

  6. #2721
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.373
    Das geht nicht. Ich habe keine Idee, wie ich das umsetzen soll. Also, mit dem aktualisieren des Baufortschritts, der dann den jeweiligen Baufortschritt übernehmen soll.

    Die Voraussetzungen sehe ich auch als Problem. Die soll ja nicht in der selben Stadt gebaut werden. Das heißt, ich kann nicht das Gebäude zur Voraussetzung machen. Wenn ich es über "braucht 1 Olympiade1 im ganzen Reich" mache, werden darauf auf riesigen Karten "braucht 2 Olympiade1", die ich aber nie haben kann. Außerdem würde das nicht verhindern, dass ich in der selben Runde meine Olympiade baue wie ein anderer Spieler (wenn ich es als Nationales Wunder definiere). Genau das aber soll verhindert werden.
    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. #2722
    Wee Free Man Avatar von Rob Anybody
    Registriert seit
    20.05.06
    Ort
    Ruhrstadt
    Beiträge
    19.351
    Ich modde zu wenig um den Teufel im Detail zu erkennen, aber schau dir einfach mal an, welche Möglichkeiten in xml bestehen.

    Wenn die Mechanik "aktualisiere Bauvorhabe nKatapult zu Kanone" bei Gebäuden nicht nicht funktioniert, dann erstelle doch einfach eine Einheit "OlympiadeX" die automatisch das passende Gebäude "OlympiadeX" erstellt und sich opfert. So weit ich weiß muss ein "Weltwunder" kein Gebäude sein, man kann alles auf "einmalig baubar" einstellen.

    Der Trick ist halt die Verkettung Olympiade1 -> Olympiade 2 -> Olympiade 3 ...
    Aber an jenem Morgen war es Magie gewesen. Und es hörte nicht auf, Magie zu sein,
    nur weil man [inzwischen] eine Erklärung dafür hatte ...
    (Terry Pratchett)

  8. #2723
    PAE.Sucht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    17.266
    Zitat Zitat von Kathy Beitrag anzeigen
    Ja, irgendwo wird bei den Wundern auch gecheckt, wie viele in der Bauliste sind - aber es können auch mehrere Civs gleichzeitig dasselbe Wunder bauen. Bei "isBuildingClassMaxedOut" werden dann nur die fertigen Gebäude berücksichtigt. Damit mein Vorhaben klappt, dürfen aber auch nicht zwei Civs zugleich dieses Gebäude bauen. Da habe ich keine Idee, wo ich gucken muss.

    Mein erster Ansatz war, dass es egal ist, wie viele Leute bauen - es darf aber immer nur eines pro Runde fertig werden. Da hatte ich aber noch weniger Ideen, wie ich das machen soll, außer, dass ich mit Fertigstellung alle anderen aus der Bauliste kicke. Was ich mir aber sehr lästig vorstelle, wenn man dann z.B. drei Expos baut, und die jede Runde kommt dann dreimal "Stadt XY kann Gebäude ... nicht fortsetzen" - nur, aber man kann es sofort wieder reinstellen, weil nächste Runde geht es dann ja wieder.
    Vermutlich muss ich mir die nationalen Wunder einmal dazu ansehen.
    Ich komm da auch nicht ganz mit, aber du meinst, das Gebäude soll bei der einen CIV gebaut werden und bei den anderen soll es in der Bauliste bestehen bleiben....

    Das mit Wunder klingt vernünftig, aber da hat Kathy schon recht, dann kommt ne Absage. Besser als normales Gebäude oder Nationalgebäude, wenn man es pro CIV nur einmal bauen soll, es aber nicht tragisch ist, wenn eine andere CIV es gebaut hat.
    Dann einfach den anderen sagen, dass noch weiter daran gebaut werden muss (in dem man zB Baufortschritt reduziert):

    Ich helf dir mal beim Checken der Bauliste.
    Ich denke, die Schleifen für Spieler und Städte brauchst du nicht explizit erklärt. Oder hättest du das gerne alles zusammengefasst?

    PHP-Code:
            for iOrderCurrentCity in range(pCity.getOrderQueueLength()):
                    
    pOrder pCity.getOrderFromQueue(iOrderCurrentCity)
                    if 
    pOrder.iData1 == eBuilding and not pPlayer.isTurnActive():
                            
    iAnz += 
    (ist python)
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins allerletzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features, die Spaß machen. Hand drauf!


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden soll ...

  9. #2724
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.968
    Wie wäre es mit einer Aufteilung in zwei Sektionen: Man bewirbt sich für die Austragung der Veranstaltung, aber die findet erst ein paar Runden später statt. Dann kann man sich als Spieler ein paar Runden drauf freuen und bei Bedarf (Kollisionen bei gleichzeitiger Fertigstellung) kann man das Event für eine Partei weiter in die Zukunft verlagern.

    1. Bewerbungsphase ( Olympia, Weltausstellung, etc), die ein nationales Wunder darstellt. Damit kann sich jede Nation in genau einer Stadt bewerben. Die Bewerbungsphase läuft genauso lang wie das Intervall zwischen zwei Events.
    Beispiel: Man kann sich vier Runden lang für die Austragung einer Olympiade bewerben.

    2. Am Ende der Bewerbungs-Phase (Intern nach der Rundenwechsel-Phase) landen alle Bewerber-Nationen, in einem Topf (Alle die das Nat. Wunder gerade besitzen(?)) und es wird gelost. Bei den Verlieren wird das das nationale Wunder wieder aus der Stadt gelöscht, damit man sich erneut bewerben kann. Da man gewisse Nat. Wunder erneut bauen kann (Palast), sollte das per XML einstellbar sein.
    Beim Gewinner bleibt das Gebäude stehen, damit er sich nicht erneut bewerben kann (optional, *).
    Außerdem wird in der Gewinnerstadt ein Timer (im SDK wie die anderen Timer (Revolte, etc) implementieren) gestartet, der in z.B. vier Runden endet.

    4. Nach Ablauf des Timers wird der Effekt ausgelöst und ggf. (siehe *) das Nat. Wunder gelöscht.
    Da das ein Effekt der Stadt ist, wird es im Rundenwechsel vor den Sachen aus Punkt 2 ablaufen, d.h. es kommt intern zu keinen Überschneidungen von Olympiade X und Olympiade X+1.


    P.S. Punkt 1 könnte man auch abwandeln und eine einmal baubare Einheit draus machen. Die kann man dann als Spieler für eine Bewerbung einsetzen, d.h. man gewinnt die Kontrolle über den Zeitpunkt.

    P.P.S Warum Rob oben von mir schrieb weiß ich nicht. Vermute mal er meinte rucivfan

  10. #2725
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.373
    Ich danke euch für eure Vorschläge.
    Aber was ich eigentlich gesucht habe, war vermutlich diese Funktion in SDK: getBuildingClassMaking(). Das ist die Funktion, die irgendwo mitzählt, wie viele Gebäude gerade im Bau sind.

    Wenn ich das über alle Player prüfe, ob dieser Wert größer dem in der BuildingClass erlaubtem Wert ist (bei Olympiade, Weltausstellung und Weltmeisterschaft 1), kann ich damit vermutlich unterbinden, dass das Gebäude in einer zweiten Stadt in die Bauliste aufgenommen 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

  11. #2726
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.373
    Es funktioniert - aber nicht so, wie es soll.
    Code:
    bool CvGame::isBuildingClassConstructionMaxedOut(BuildingClassTypes eIndex, int iExtra)
    {
    	FAssertMsg(eIndex >= 0, "eIndex is expected to be non-negative (invalid Index)");
    	FAssertMsg(eIndex < GC.getNumBuildingClassInfos(), "eIndex is expected to be within maximum bounds (invalid Index)");
    
    	if ( GC.getBuildingClassInfo(eIndex).getMaxGlobalConstructionPerTurn() != -1 )
    	{
    		int iNumBuildingsUnderConstruction = 0;
    
    		for (int iPlayer = 0; iPlayer < MAX_CIV_PLAYERS; ++iPlayer)
    		{
    			CvPlayer& kPlayer = GET_PLAYER((PlayerTypes)iPlayer);
    
    			iNumBuildingsUnderConstruction += kPlayer.getBuildingClassMaking(eIndex);
    
    		}
    		
    		if (iNumBuildingsUnderConstruction >= GC.getBuildingClassInfo(eIndex).getMaxGlobalConstructionPerTurn())
    		{
    			return true;
    		}
    	}
    //	FAssertMsg( getBuildingClassMaking()(eIndex) <= GC.getBuildingClassInfo(eIndex).getMaxGlobalConstructionPerTurn(), "Index is expected to be within maximum bounds (invalid Index)");
    
    	return false;
    }
    Code:
    bool CvPlayer::canConstruct(BuildingTypes eBuilding, bool bContinue, bool bTestVisible, bool bIgnoreCost) const
    {
    	BuildingClassTypes eBuildingClass;
    	int iI;
    	CvTeamAI& currentTeam = GET_TEAM(getTeam());
    
    	eBuildingClass = ((BuildingClassTypes)(GC.getBuildingInfo(eBuilding).getBuildingClassType()));
    
    	FAssert(GC.getCivilizationInfo(getCivilizationType()).getCivilizationBuildings(eBuildingClass) == eBuilding);
    	if (GC.getCivilizationInfo(getCivilizationType()).getCivilizationBuildings(eBuildingClass) != eBuilding)
    	{
    		return false;
    	}
    
    	if (!bIgnoreCost)
    	{
    		if (GC.getBuildingInfo(eBuilding).getProductionCost() == -1)
    		{
    			return false;
    		}
    	}
    
    	if (!(currentTeam.isHasTech((TechTypes)(GC.getBuildingInfo(eBuilding).getPrereqAndTech()))))
    	{
    		return false;
    	}
    
    	for (iI = 0; iI < GC.getNUM_BUILDING_AND_TECH_PREREQS(); iI++)
    	{
    		if (GC.getBuildingInfo(eBuilding).getPrereqAndTechs(iI) != NO_TECH)
    		{
    			if (!(currentTeam.isHasTech((TechTypes)(GC.getBuildingInfo(eBuilding).getPrereqAndTechs(iI)))))
    			{
    				return false;
    			}
    		}
    	}
    
    	if (currentTeam.isObsoleteBuilding(eBuilding))
    	{
    		return false;
    	}
    
    	if (GC.getBuildingInfo(eBuilding).getSpecialBuildingType() != NO_SPECIALBUILDING)
    	{
    		if (!(currentTeam.isHasTech((TechTypes)(GC.getSpecialBuildingInfo((SpecialBuildingTypes) GC.getBuildingInfo(eBuilding).getSpecialBuildingType()).getTechPrereq()))))
    		{
    			return false;
    		}
    	}
    
    	if (GC.getBuildingInfo(eBuilding).getStateReligion() != NO_RELIGION)
    	{
    		if (getStateReligion() != GC.getBuildingInfo(eBuilding).getStateReligion())
    		{
    			return false;
    		}
    	}
    
    	if (GC.getGameINLINE().countCivTeamsEverAlive() < GC.getBuildingInfo(eBuilding).getNumTeamsPrereq())
    	{
    		return false;
    	}
    
    	if (GC.getBuildingInfo(eBuilding).getVictoryPrereq() != NO_VICTORY)
    	{
    		if (!(GC.getGameINLINE().isVictoryValid((VictoryTypes)(GC.getBuildingInfo(eBuilding).getVictoryPrereq()))))
    		{
    			return false;
    		}
    
    		if (isMinorCiv())
    		{
    			return false;
    		}
    
    		if (currentTeam.getVictoryCountdown((VictoryTypes)GC.getBuildingInfo(eBuilding).getVictoryPrereq()) >= 0)
    		{
    			return false;
    		}
    	}
    
    	if (GC.getBuildingInfo(eBuilding).getMaxStartEra() != NO_ERA)
    	{
    		if (GC.getGameINLINE().getStartEra() > GC.getBuildingInfo(eBuilding).getMaxStartEra())
    		{
    			return false;
    		}
    	}
    	if (GC.getGameINLINE().isBuildingClassMaxedOut(eBuildingClass))
    	{
    		return false;
    	}
    
    	if (currentTeam.isBuildingClassMaxedOut(eBuildingClass))
    	{
    		return false;
    	}
    
    	if (isBuildingClassMaxedOut(eBuildingClass))
    	{
    		return false;
    	}
    
    	CvCivilizationInfo &civilizationInfo = GC.getCivilizationInfo(getCivilizationType());
    	int numBuildingClassInfos = GC.getNumBuildingClassInfos();
    	for (iI = 0; iI < numBuildingClassInfos; iI++)
    	{
    		BuildingTypes ePrereqBuilding = (BuildingTypes)civilizationInfo.getCivilizationBuildings(iI);
    
    		if (NO_BUILDING != ePrereqBuilding && currentTeam.isObsoleteBuilding(ePrereqBuilding))
    		{
    			if (getBuildingClassCount((BuildingClassTypes)iI) < getBuildingClassPrereqBuilding(eBuilding, (BuildingClassTypes)iI, 0))
    			{
    				return false;
    			}
    		}
    	}
    
    	if (!bTestVisible)
    	{
    		//Kathy beginn Olympia, Expo
    		if (GC.getGameINLINE().isBuildingClassConstructionMaxedOut(eBuildingClass), (currentTeam.getBuildingClassMaking(eBuildingClass) + ((bContinue) ? -1 : 0)))
    		{
    			return false;
    		}
    		//Kathy beginn Olympia, Expo
    
    		if (GC.getGameINLINE().isBuildingClassMaxedOut(eBuildingClass, (currentTeam.getBuildingClassMaking(eBuildingClass) + ((bContinue) ? -1 : 0))))
    		{
    			return false;
    		}
    
    		if (currentTeam.isBuildingClassMaxedOut(eBuildingClass, (currentTeam.getBuildingClassMaking(eBuildingClass) + ((bContinue) ? -1 : 0))))
    		{
    			return false;
    		}
    
    		if (isBuildingClassMaxedOut(eBuildingClass, (getBuildingClassMaking(eBuildingClass) + ((bContinue) ? -1 : 0))))
    		{
    			return false;
    		}
    
    		if (GC.getGameINLINE().isNoNukes())
    		{
    			if (GC.getBuildingInfo(eBuilding).isAllowsNukes())
    			{
    				for (iI = 0; iI < GC.getNumUnitInfos(); iI++)
    				{
    					if (GC.getUnitInfo((UnitTypes)iI).getNukeRange() != -1)
    					{
    						return false;
    					}
    				}
    			}
    		}
    
    		if (GC.getBuildingInfo(eBuilding).getSpecialBuildingType() != NO_SPECIALBUILDING)
    		{
    			if (!(GC.getGameINLINE().isSpecialBuildingValid((SpecialBuildingTypes)(GC.getBuildingInfo(eBuilding).getSpecialBuildingType()))))
    			{
    				return false;
    			}
    		}
    
    		if (getNumCities() < GC.getBuildingInfo(eBuilding).getNumCitiesPrereq())
    		{
    			return false;
    		}
    
    		if (getHighestUnitLevel() < GC.getBuildingInfo(eBuilding).getUnitLevelPrereq())
    		{
    			return false;
    		}
    
    		for (iI = 0; iI < numBuildingClassInfos; iI++)
    		{
    			if (getBuildingClassCount((BuildingClassTypes)iI) < getBuildingClassPrereqBuilding(eBuilding, ((BuildingClassTypes)iI), ((bContinue) ? 0 : getBuildingClassMaking(eBuildingClass))))
    			{
    				return false;
    			}
    		}
    	}
    
    	return true;
    }
    getMaxGlobalConstructionPerTurn ist im BuildingClass Schema neu definiert. Ich habe dort derzeit Gebäude mit -1 und 1.

    "isBuildingClassConstructionMaxedOut" müsste meiner Meinung nach bei -1 ein False ausgeben, da der Bereich hinter if ( GC.getBuildingClassInfo(eIndex).getMaxGlobalConstructionPerTurn() != -1 ) ja niemals ausgegeben wird.

    Meiner Meinung nach müsste bei "False" aber der grüne Bereich von canConstruct einfach übersprungen werden. Dennoch wurden im Test auch Gebäude ohne Beschränkung abgebrochen. Außerdem konnte ich auch diese Gebäude nur 1x in einer Stadt bauen lassen.

    Edit: In der nächste Runde wurde kein Bau abgebrochen, aber alle Gebäude, egal, ob getMaxGlobalConstructionPerTurn 1 oder -1 war, konnten nur einmal gebaut und weitergebaut werden. Die KI baut gerade in ihren Städten Kriegern, vielleicht aber auch, weil ich ja Gebäude baue und sie daher gar nicht damit anfangen kann.
    Geändert von Kathy (Gestern um 12:59 Uhr)
    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 182 von 182 ErsteErste ... 82132172178179180181182

Berechtigungen

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