Seite 179 von 180 ErsteErste ... 79129169175176177178179180 LetzteLetzte
Ergebnis 2.671 bis 2.685 von 2699

Thema: Der SDK-Fragen-Thread

  1. #2671
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    Sieht so aus, als würde in
    "bool CvDLLButtonPopup::launchProductionPopup(CvPopup* pPopup, CvPopupInfo &info)"
    eine entsprechende Beschränkung durchgeführt.

    Code:
    	for (int iI = 0; iI < GC.getNumUnitClassInfos(); iI++)
    	{
    		UnitTypes eLoopUnit = (UnitTypes)GC.getCivilizationInfo(pCity->getCivilizationType()).getCivilizationUnits(iI);
    
    		if (eLoopUnit != NO_UNIT)
    		{
    			if (eLoopUnit != eProductionUnit)
    			{
    				if (pCity->canTrain(eLoopUnit))
    				{
    					int iTurns = pCity->getProductionTurnsLeft(eLoopUnit, 0);
    					szBuffer.Format(L"%s (%d)", GC.getUnitInfo(eLoopUnit).getDescription(), iTurns);
    					gDLL->getInterfaceIFace()->popupAddGenericButton(pPopup, szBuffer, GET_PLAYER(pCity->getOwnerINLINE()).getUnitButton(eLoopUnit), iI, WIDGET_TRAIN, iI, pCity->getID(), true, POPUP_LAYOUT_STRETCH, DLL_FONT_LEFT_JUSTIFY );
    					iNumBuilds++;
    				}
    			}
    		}
    	}
    Das heißt aus meiner Sicht: Die Einheit ist zwar baubar, aber nicht auswählbar, weil für jede Einheitenklasse nur die jeweilige Einheit der Zivilisation ausgewählt wird. Das sieht jetzt auch nicht so aus, als könnte man es einfach umbauen, indem man noch eine Bedingung hinzufügt. Die ganze Schleife basiert auf den UnitClasses und kann nicht zwei Units pro Klasse zurückgeben.
    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

  2. #2672
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.015
    Lass doch einfach die Schleifen über alle Einheitentypen iterieren. Das ist doch einfach zu lösen. Es kann sein, dass du auch noch im Python-Code was ändern musst.

    Müsstest den Anfang zu folgend ändern:

    Code:
    for (int iI = 0; iI < GC.getNumUnitInfos(); iI++)
    	{
    		UnitTypes eLoopUnit = (UnitTypes) iI;
    Habe jetzt nicht nachgesehen, ob das alles richtig ist.
    Geändert von rucivfan (29. August 2020 um 14:33 Uhr)

  3. #2673
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    Der Code ist soweit korrekt. Aber jetzt werden die Bauaufträge, die ich einstelle, nicht mehr beim Anklicken in der Stadt gesetzt, und die fremden Unique Units sind trotzdem nicht baubar. Dafür scheint die Rechenzeit zu explodieren. Ich fürchte, es steht in keinem Verhältnis zu dem Effekt, auf den ich hinaus wollte.
    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

  4. #2674
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.015
    Zitat Zitat von Kathy Beitrag anzeigen
    Der Code ist soweit korrekt. Aber jetzt werden die Bauaufträge, die ich einstelle, nicht mehr beim Anklicken in der Stadt gesetzt, und die fremden Unique Units sind trotzdem nicht baubar. Dafür scheint die Rechenzeit zu explodieren. Ich fürchte, es steht in keinem Verhältnis zu dem Effekt, auf den ich hinaus wollte.
    Das ist die Kehrseite. Einmal wird über mehr Einheiten gelaufen und einmal wird über alle Teams gelaufen. Das macht sich schon bemerkbar. Im übrigen musst du an mehr stellen den Code ändern. Es gibt viele Stellen die noch angepasst werden müssten.

  5. #2675
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    In irgend einem Faden hatte ich das schon einmal mit euch besprochen, und Ramkhamhaeng hatte auch etwas dazu beigetragen Aber ich finde irgendwie die Diskussion nicht mehr, wo ich anknüpfen könnte. Fällt jemandem zu dieses Problem etwas ein? Eventuell könnte (sollte) man ein eigenes Python-Popup aufkloppen lassen statt dieses Diplo, (auch wenn ich die reizvoll fände), wo man einfach auswählen kann "Vasallenstatus akzeptieren/nicht akzeptieren." Nur wie man das macht weiß ich ebenfalls nicht.
    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

  6. #2676
    Registrierter Benutzer Avatar von Monaldinio
    Registriert seit
    10.11.09
    Ort
    HRO
    Beiträge
    7.650
    Guten Morgen liebe Gemeinde,

    ich weiß das dieser Bereich nicht unbedingt der richtige Platz für meine Frage ist, jedoch was die Expertise anbetrifft.
    Heute komme ich mit einem ganz besonderen Anliegen zu euch. Um präzise zu sein geht es um die Android App "ExaGear Strategies, einen Emulator der die X86 Laufzeitumgebung auf einem Android Handy simuliert (nicht das gesamte Betriebssystem) und damit Spiele wie Civ 3 oder Alpha Centauri auf dem Hände spielbar macht. UND DAS ERSTAUNLICHER WEISE RICHTIG GUT, gerade was die Steuerung anbetrifft bin ich durch überrascht.

    Leider ist der Hersteller bzw Publisher nicht mehr am Markt, die App ist im Play Store nicht mehr erhältlich, sodass ich keine Vollversion kaufen könnte. Dementsprechend muss ich mich mit der 3-tägigen Trial Version zufrieden geben. Nach Ablauf der Trail Version kann die App nicht neu installiert werden um wieder einen 3-tägigen Testzeitraum zu generieren.
    Jedoch besteht ein Workaround. Die App muss immer vor Ablauf des Testzeitraumes deinstalliert werden.
    Auf Dauer ist das aber unbefriedigend für mich.

    Ferner gibt es wohl eine App die sich Lucky Patcher nennt, mit deren Hilfe man wohl den Testzeitraum verlängern kann. Jedoch möchte diese App auf dem Handy Berechtigungen erhalten, von denen ich nicht unbedingt überzeugt bin. Außerdem weißt der Play Store App Scanner darauf hin, dass diese App nicht unbedingt ungefährlich ist. Inwieweit diese App nun wirklich Maleware ist, kann ich nicht sagen. Jedoch bleibt der Virenscanner auf dem aktuellsten Stand stumm.

    Da ich früher, mit Eurer Hilfe, ein bischen SDK für meine Civ 4 Mod programmiert habe, bin ich am Überlegen ob es möglich wäre die App so zu modifizieren das die Testphase verlängert wird, im Best Case Szenario es gar keine Testphase gibt.
    Jetzt meine Frage an die Community, mit den richtigen Werkzeug, also Android SDK etc, wie würden die Erfolgschancen eurer Meinung nach aussehen? Zweifelsfrei werde ich Hilfe dabei brauchen.

    Als Grundlage habe ich die letzte Version der App. mit APK und Obb Datei.

    Ich möchte mich nicht in etwas hereinsteigern was von Vornherein zum Scheitern verurteilt ist.
    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...

  7. #2677
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    Keine Ahnung, wie das geht. Im CivIV SDK ist sehr viel zugänglich und das auch so gewollt, was bei anderen Programmen nicht zugänglich ist bzw. nur als Maschinenlesbarer Code vorliegt.
    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

  8. #2678
    Registrierter Benutzer Avatar von Monaldinio
    Registriert seit
    10.11.09
    Ort
    HRO
    Beiträge
    7.650
    Kurze Rückinfo zu meinem Anliegen, es hat geklappt.
    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...

  9. #2679
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    Irgendwie scheint die KI einen lästigen Bug zu haben. Es kommt bei mir immer wieder vor dass sie, wenn ich mit einer größeren Übermacht neben einer Stadt von ihr stehe, über den Rundenwechsel noch Einheiten auflöst. Das macht überhaupt keinen Sinn, selbst wenn ihre 5 Truppen keine Chance haben, ist es immer noch besser, sie in der Verteidigung zu verheizen, als sie einfach so aufzulösen. Hat jemand eine Idee, an welcher Stelle man das verhindern kann?
    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. #2680
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Das wird mit dem Einnahmendefizit zusammenhängen. Da tendiert sie zum Auflösen vieler Einheiten.
    Wie man das am besten verhindert kann man pauschal nicht sagen. Die Nebenwirkung einer Änderung können schlimmer sein als das Problem, dass du lösen willst.

  11. #2681
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    Klingt nachvollziehbar, aber es tritt auch bei Barbaren auf, die keine Geldprobleme kennen. Und es tritt komischerweise auch nicht irgendwann auf, sondern immer dann, wenn ich gerade neben der Stadt stehe - nicht etwa eine Runde vorher, wenn das Geld vermutlich genauso knapp ist. Und immer nur bei Zivilisationen, die ohnehin wenig Truppen haben. Bei Leuten, die 20-30 Einheiten in der Stadt stehen habe, habe ich das noch nie beobachtet. Eigentlich müssten die also ziemlich viel Geld für ihre Einheiten zur Verfügung haben.
    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. #2682
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Hm, wenn die Auflösungen so spezifisch durchgeführt werden klingt es doch nach einem anderem Faktor. Vielleicht wird berechnet das die Kämpfe alle verloren werden würden und die KI will keine Erfahrungspunkte verschenken?

    In den Code habe ich aber bisher nicht geschaut

  13. #2683
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.918
    Ich habe nach "scrap" gesucht, aber nichts gefunden. Die Suche nach "disband" hat aber etwas in "CvPlayerAI::AI_doTurnUnitsPost()" hervorgebracht.

    Ich glaube, es ist dieser Code. Bevor ich daran etwas mache, möchte ich aber versuchen, es zu verstehen.
    Code:
    void CvPlayerAI::AI_doTurnUnitsPost()
    {
    	PROFILE_FUNC();
    
    	CvUnit* pLoopUnit;
    	CvPlot* pUnitPlot;
    	bool bValid;
    	int iPass;
    	int iLoop;
    
    	if (!isHuman() || isOption(PLAYEROPTION_AUTO_PROMOTION))
    	{
    		for(pLoopUnit = firstUnit(&iLoop); pLoopUnit != NULL; pLoopUnit = nextUnit(&iLoop))
    		{
    			pLoopUnit->AI_promote();
    		}
    	}
    
    	if (isHuman())
    	{
    		return;
    	}
    
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                      02/24/10                                jdog5000      */
    /*                                                                                              */
    /* Gold AI                                                                                      */
    /************************************************************************************************/
    	bool bAnyWar = (GET_TEAM(getTeam()).getAnyWarPlanCount(true) > 0);
    	int iStartingGold = getGold();
    	int iTargetGold = AI_goldTarget();
    	int iUpgradeBudget = (AI_goldToUpgradeAllUnits() / (bAnyWar ? 1 : 2));
    
    	iUpgradeBudget = std::min(iUpgradeBudget, iStartingGold - ((iTargetGold > iUpgradeBudget) ? (iTargetGold - iUpgradeBudget) : iStartingGold/2));
    
    	if( AI_isFinancialTrouble() )
    	{
    		iUpgradeBudget /= 3;
    	}
    
    	// Always willing to upgrade 1 unit if we have the money
    	iUpgradeBudget = std::max(iUpgradeBudget,1);
    
    	bool bUnderBudget = true;
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                       END                                                  */
    /************************************************************************************************/
    
    	CvPlot* pLastUpgradePlot = NULL;
    	for (iPass = 0; iPass < 4; iPass++)
    	{
    		for(pLoopUnit = firstUnit(&iLoop); pLoopUnit != NULL; pLoopUnit = nextUnit(&iLoop))
    		{
    			bool bNoDisband = false;
    			bValid = false;
    
    			switch (iPass)
    			{
    			case 0:
    				// BBAI note:  Effectively only for galleys, triremes, and ironclads ... unit types which are limited in
    				// what terrain they can operate in
    				if (AI_unitImpassableCount(pLoopUnit->getUnitType()) > 0)
    				{
    					bValid = true;
    				}
    				break;
    			case 1:
    				pUnitPlot = pLoopUnit->plot();
    				if (pUnitPlot->isCity())
    				{
    					if (pUnitPlot->getBestDefender(getID()) == pLoopUnit)
    					{
    						bNoDisband = true;
    						bValid = true;
    						pLastUpgradePlot = pUnitPlot;
    					}
    
    					// try to upgrade units which are in danger... but don't get obsessed
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                      08/20/09                                jdog5000      */
    /*                                                                                              */
    /* Unit AI, Efficiency                                                                          */
    /************************************************************************************************/
    					//if (!bValid && (pLastUpgradePlot != pUnitPlot) && ((AI_getPlotDanger(pUnitPlot, 1, false)) > 0))
    					if (!bValid && (pLastUpgradePlot != pUnitPlot) && ((AI_getAnyPlotDanger(pUnitPlot, 1, false))))
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                       END                                                  */
    /************************************************************************************************/	
    					{
    						bNoDisband = true;
    						bValid = true;
    						pLastUpgradePlot = pUnitPlot;
    					}
    				}
    				break;
    			case 2:
    				/********************************************************************************/
    				/* 	BETTER_BTS_AI_MOD						9/15/08			jdog5000		*/
    				/* 																			*/
    				/* 	Gold AI																	*/
    				/********************************************************************************/
    				/* original BTS code
    				if (pLoopUnit->cargoSpace() > 0)
    				{
    					bValid = true;
    				}
    				*/
    				bUnderBudget = (iStartingGold - getGold()) < iUpgradeBudget;
    
    				// Only normal transports
    				if ( (pLoopUnit->cargoSpace() > 0) && (pLoopUnit->specialCargo() == NO_SPECIALUNIT) )
    				{
    					bValid = (bAnyWar || bUnderBudget);
    				}
    				// Also upgrade escort ships
    				if ( pLoopUnit->AI_getUnitAIType() == UNITAI_ESCORT_SEA )
    				{
    					bValid = (bAnyWar || bUnderBudget);
    				}
    				/********************************************************************************/
    				/* 	BETTER_BTS_AI_MOD						END								*/
    				/********************************************************************************/
    				
    				break;
    			case 3:
    				/********************************************************************************/
    				/* 	BETTER_BTS_AI_MOD						9/15/08			jdog5000		*/
    				/* 																			*/
    				/* 	Gold AI																	*/
    				/********************************************************************************/
    				/* original BTS code
    				bValid = true;
    				*/
    				bUnderBudget = (iStartingGold - getGold()) < iUpgradeBudget;
    
    				bValid = (bAnyWar || bUnderBudget);
    				/********************************************************************************/
    				/* 	BETTER_BTS_AI_MOD						END								*/
    				/********************************************************************************/
    				
    				break;
    			default:
    				FAssert(false);
    				break;
    			}
    
    			if (bValid)
    			{
    				bool bKilled = false;
    				if (!bNoDisband)
    				{
    					if (pLoopUnit->canFight())
    					{
    						int iExp = pLoopUnit->getExperience();
    						CvCity* pPlotCity = pLoopUnit->plot()->getPlotCity();
    						if (pPlotCity != NULL && pPlotCity->getOwnerINLINE() == getID())
    						{
    							int iCityExp = 0;
    							iCityExp += pPlotCity->getFreeExperience();
    							iCityExp += pPlotCity->getDomainFreeExperience(pLoopUnit->getDomainType());
    							iCityExp += pPlotCity->getUnitCombatFreeExperience(pLoopUnit->getUnitCombatType());
    							if (iCityExp > 0)
    							{
    								if ((iExp == 0) || (iExp < (iCityExp + 1) / 2))
    								{
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                      08/20/09                                jdog5000      */
    /*                                                                                              */
    /* Unit AI, Efficiency                                                                          */
    /************************************************************************************************/
    									if ((pLoopUnit->getDomainType() != DOMAIN_LAND) || pLoopUnit->plot()->plotCount(PUF_isMilitaryHappiness, -1, -1, getID()) > 1)
    									{
    										//if ((calculateUnitCost() > 0) && (AI_getPlotDanger( pLoopUnit->plot(), 2, false) == 0))
    										if ((calculateUnitCost() > 0) && (AI_getAnyPlotDanger( pLoopUnit->plot(), 2, false)))
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                       END                                                  */
    /************************************************************************************************/	
    										{
    										
    											pLoopUnit->kill(false);
    											bKilled = true;
    											pLastUpgradePlot = NULL;
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    				if (!bKilled)
    				{
    					pLoopUnit->AI_upgrade(); // CAN DELETE UNIT!!!
    				}
    Mir erscheint besonders der grüne Teil fraglich. Wenn ich das richtig interpretiere, heißt das: "Für den Fall dass calculateUnitsCosts >0 ist UND der Plot in Gefahr ist, löse überflüssige/veraltete Einheiten auf, die du nicht upgraden kannst". Wenn ich das richtig sehe, werde also überflüssige Einheiten NUR dann aufgelöst, wenn man sie eigentlich besser als letzte Reserve behalten sollte - und nicht an Stellen, wo der Plot nicht in Gefahr ist und man sie gefahrlos auflösen könnte. Ich habe jetzt an keiner Stelle gesehen, dass die Einheiten nur aufgelöst werden, wenn man in financialTrouble ist, sondern schon dann, wenn man "underBudget" ist.
    Ich wäre aber auch sonst davon ausgegangen, dass Einheiten aufgelöst werden sollen, die überflüssig und nicht upgradebar sind, wenn ein Plot NICHT in Gefahr ist. Ich als Spieler würde eher irgendwelche Schrotteinheiten im Hinterland auflösen, um Geld zu sparen. Das verstehe ich hier nicht.
    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. #2684
    Wee Free Man Avatar von Rob Anybody
    Registriert seit
    20.05.06
    Ort
    Ruhrstadt
    Beiträge
    18.179
    Ein Bug bedruht doch irgendwie auf Irrtum oder Tipfehler. Da ist dann der Code nicht zu verstehen.

    Ich denke du hast das schon richtig erkannt. Ich würde jetzt einen Flag (Assert?) einbauen, ob dieser Code in der von dir beschriebenen Situation aufgerufen wird. Mir ansehen, welche Werte genau in den Variablen stehen und dann entscheiden, ob die Bedingung evt. umgedreht werden kann oder ob es auch reicht einige Zeilen auszukommentieren. Dann testen, ob die gewünschte Wirkung eintritt und noch ein paar Testspiele, ob die KI ungewöhnlichs Verhalten zeigt (nur noch alte Einheiten, immer im Streik, etc.), sollten reichen.
    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)

    Brandstifter benötigen keine Streichhölzer, sie zündeln mit Worten.
    Wer Brandstifter im Internet duldet und nicht wieder und wieder widerspricht,
    darf sich nicht wundern, wenn auch bald sein wahres Leben brennt.
    (frei nach Max Frisch)

  15. #2685
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.015
    Das Codestück ist meines Wissens der einzigste Code, der Einheiten durch Entscheidung der KI auflöst. Das grüne allein ist nicht fraglich, sondern die Art wie der gesamte Code ist ist schon fraglich. Es wird eine Einheit aufgelöst, weil die Stadt, in der die Einheit steht, eine Einheit mit mehr Erfahrung ausbilden kann wenn die Stadt in Gefahr ist und Einheitenunterhalt größer 0 ist? Das steht so in den Code. Offen ist, in welchen iPass Fall das passiert.
    Geändert von rucivfan (20. November 2022 um 13:30 Uhr)

Seite 179 von 180 ErsteErste ... 79129169175176177178179180 LetzteLetzte

Berechtigungen

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