Seite 168 von 180 ErsteErste ... 68118158164165166167168169170171172178 ... LetzteLetzte
Ergebnis 2.506 bis 2.520 von 2699

Thema: Der SDK-Fragen-Thread

  1. #2506
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.023
    Ich habe folgendes Problem. In einem neuen Code benutze ich:
    for (iJ = 0; iJ < aForeignBonusses.size() ; ++iJ)
    Allerdings sagt er mir beim compilieren:
    1>CvPlayer.cpp(4007): warning C4018: '<' : signed/unsigned mismatch
    Ist das dramatisch? Kann man .size() nicht wie eine Zahl benutzen?
    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. #2507
    Registrierter Benutzer Avatar von Strat
    Registriert seit
    08.01.15
    Ort
    HGW
    Beiträge
    3.889
    Ist iJ ein int ? Ersetz das mal durch size_t
    Zitat Zitat von Schlumpf Beitrag anzeigen
    Strat ist doch so ein verkorkster Linker
    Zitat Zitat von Isaac Newton; in einem Brief an Robert Hooke
    Wenn ich weiter geblickt habe, so deshalb, weil ich auf den Schultern von Riesen stehe.
    Storys

    Civ 4: Weg in den Olymp
    Civ 4 PBEM 474 Das Steigen und Fallen der Kurse

  3. #2508
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Zitat Zitat von Kathy Beitrag anzeigen
    Ist das dramatisch? Kann man .size() nicht wie eine Zahl benutzen?
    (int) iJ ist vom Typ signed (Vorzeichen) und size() ist vom Typ unsigned (ohne Vorzeichen). Deine Abfrage funktioniert nur solange "richtig", bis size() als signed Zahl eine negative Zahl wäre, aber es als unsigned nicht ist. Kurz: Solange size() nur klein ist, gibt es keine Probleme. Wenn du auf Nummer sicher gehen willst, nutze doch einfach XXX::size_type als Typ. Das ist der Typ von size(). XXX steht für den Typ von aForeignBonusses.

  4. #2509
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.023
    Ja, es war int. Ich habe es durch size_t ersetzt, beim kompilieren wird jetzt kein Fehler mehr angezeigt. Funktioniert denn dann die for-Schleife noch?
    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. #2510
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Zitat Zitat von Kathy Beitrag anzeigen
    Ja, es war int. Ich habe es durch size_t ersetzt, beim kompilieren wird jetzt kein Fehler mehr angezeigt. Funktioniert denn dann die for-Schleife noch?
    Du hast doch alles richtig gemacht, wenn size_t als Typ genommen hast.

  6. #2511
    Registrierter Benutzer Avatar von Strat
    Registriert seit
    08.01.15
    Ort
    HGW
    Beiträge
    3.889
    size_t ist einfach nur ein unsigned int, funktioniert also.
    Zitat Zitat von Schlumpf Beitrag anzeigen
    Strat ist doch so ein verkorkster Linker
    Zitat Zitat von Isaac Newton; in einem Brief an Robert Hooke
    Wenn ich weiter geblickt habe, so deshalb, weil ich auf den Schultern von Riesen stehe.
    Storys

    Civ 4: Weg in den Olymp
    Civ 4 PBEM 474 Das Steigen und Fallen der Kurse

  7. #2512
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Warum sollte sie nicht mehr funktionieren?

    Es war übrigens kein Fehler, sondern nur eine Warnung. Falls deine DLL nicht kompilierte muss es an etwas anderem liegen…

    …jedenfalls wenn nicht die Kompiler-Option, Warnungen wie Fehler zu behandeln, aktiviert ist. Aber dann würde das Civ4-SDK nicht mehr kompileren.

  8. #2513
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von Kathy Beitrag anzeigen
    Ich habe folgendes Problem. In einem neuen Code benutze ich:

    Allerdings sagt er mir beim compilieren:

    Ist das dramatisch? Kann man .size() nicht wie eine Zahl benutzen?
    Es wäre in diesem Fall nur dann ein Problem, wenn iJ negative Werte annehmen würde. Angenommen, iJ hätte den Wert -1, dann wäre iJ > size(). Denn der Wert von size() hat den Typ size_t (?) (also unsigned int), daher wird die iJ (was den Typ int (?) hat) konvertiert in den Typ size_t, was dann hier den Wert 2^32 -1 gegeben sollte.
    Deswegen die Kompilerwarnung.

    Welchen Typ hat iJ eigentlich? Und warum steht der nicht in der Schleife?

    Code:
    for (iJ = 0; iJ < aForeignBonusses.size() ; ++iJ)
    ist schlechter Stil, besser:

    Code:
    for (size_t iJ = 0; iJ < aForeignBonusses.size() ; ++iJ)
    bzw. der Typ von size(), wenn es was anderes ist.


    Edit: Ich bin zu lansgam. Emoticon: psyduck

  9. #2514
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.023
    Danke, dann sollte es jetzt funktionieren.
    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. #2515
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.023
    Wie kann ich das Diplo-Fenster aufrufen, so dass ein bestimmter Spieler einem anderen anbietet, sein Vasall zu werden? Ich würde gerne an der rot markierten Stelle das Fenster öffnen bzw. in die Liste der Diplomatieaufrufe von kMasterPlayer einfügen, so dass kLoopPlayer an dieser Stelle anbietet, Vasall von kMasterPlayer zu werden. Das gilt dann nur für menschliche Spieler, bei KIs wird immer eine Vasallenbindung gesetzt.
    Code:
    void CvTeam::doCityStateDesert(TeamTypes eCityState) const
    {
    	bool bDesert = false;
    
    	if ( getID() != GET_TEAM(eCityState).getID() )//Nicht, wenn CityState Teammitglied vom TestTeam ist
    	{
    		if ( !GET_TEAM(eCityState).isVassal(getID()) )//Wenn bereits Vasall passiert auch nichts
    		{
    			
    			for (int iPlayer = 0; iPlayer < MAX_PLAYERS; iPlayer++)
    			{
    				CvPlayer& kLoopPlayer = GET_PLAYER((PlayerTypes)iPlayer);
    				if (kLoopPlayer.getTeam() == eCityState && kLoopPlayer.isAlive())//Überprüfen aller Spieler im Team, ob ein Stadtstaat dabei ist
    				{
    					CivilizationTypes eCityStateCiv = (CivilizationTypes)kLoopPlayer.getCivilizationType();
    					CvWString szBuffer;
    
    					if ( GC.getCivilizationInfo(eCityStateCiv).isCitystate() )
    					{
    						bool bNoMaster = true;//Wenn kein alter Master vorhanden: Desertiert immer
    						int iMasterID = -1;
    						for (int iI = 0; iI < MAX_CIV_TEAMS; iI++)//Suchen alter Master
    						{
    							if (GET_TEAM(eCityState).isVassal((TeamTypes)iI) )
    							{
    								bNoMaster = false;
    								iMasterID = iI;
    								if ((GET_TEAM(eCityState).AI_getAttitude((TeamTypes)iI) < (GET_TEAM(eCityState).AI_getAttitude(getID()))))
    								{
    									bDesert = true;
    								}
    								break;
    							}
    						}
    						if ( bDesert || bNoMaster)
    						{
    							if (iMasterID != -1)//Ablösen des alten Hegemon
    							{
    								GET_TEAM((TeamTypes)iMasterID).freeVassal(eCityState);
    								GET_TEAM((TeamTypes)eCityState).setVassal((TeamTypes)iMasterID,false,false);
    
    								for (int jPlayer = 0; jPlayer < MAX_PLAYERS; jPlayer++)
    								{
    									if (GET_PLAYER((PlayerTypes)jPlayer).getTeam() == (TeamTypes)iMasterID)
    									{
    										CvWString szBuffer;
    										PlayerTypes eMasterPlayer;
    										eMasterPlayer = ((PlayerTypes)jPlayer);
    										szBuffer = gDLL->getText("TXT_CITYSTATE_WECHSEL_LOST_TEXT", GET_TEAM((TeamTypes)eCityState).getName().GetCString() , GET_TEAM((TeamTypes)this->getID()).getName().GetCString() );
    										gDLL->getInterfaceIFace()->addMessage(eMasterPlayer, true, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_UNITCAPTURE", MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), -1, -1);
    									}
    								}
    
    							}
    //							assignVassal(eCityState,false);	//original Code
    							for (int jPlayer = 0; jPlayer < MAX_PLAYERS; jPlayer++)
    							{
    								if (GET_PLAYER((PlayerTypes)jPlayer).getTeam() == getID() )
    								{
    									CvWString szBuffer;
    									PlayerTypes eMasterPlayer;
    									eMasterPlayer = ((PlayerTypes)jPlayer);
    									CvPlayer& kMasterPlayer = GET_PLAYER((PlayerTypes)jPlayer);
    									
    									//Kathy begin: Ask Humans first
    									if ( kMasterPlayer.isHuman() )
    									{
    
    
    									}
    									else
    									{
    										assignVassal(eCityState,false);
    									}
    									//Kathy end: Ask Humans first
    									szBuffer = gDLL->getText("TXT_CITYSTATE_WECHSEL_TEXT", GET_TEAM((TeamTypes)eCityState).getName().GetCString() , GET_TEAM((TeamTypes)this->getID()).getName().GetCString() );
    									gDLL->getInterfaceIFace()->addMessage(eMasterPlayer, true, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_UNITCAPTURE", MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), -1, -1);
    									break;
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    }
    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. #2516
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Ich hab mal etwas zusammen kopiert. Getestet habe ich das nat. nicht
    Code:
    CLinkList<TradeData> ourList;
    CLinkList<TradeData> theirList; // wird nicht gebraucht
    
    setTradeItem(&item, TRADE_VASSAL);
    ourList.insertAtEnd(item);
    
    pDiplo = new CvDiploParameters(getID());
    FAssertMsg(pDiplo != NULL, "pDiplo must be valid");
    pDiplo->setDiploComment((DiploCommentTypes)GC.getInfoTypeForString("AI_DIPLOCOMMENT_DEMAND_TRIBUTE"));
    pDiplo->setAIContact(true);
    pDiplo->setOurOfferList(theirList);
    
    gDLL->beginDiplomacy(pDiplo, (PlayerTypes)iI);
    //abContacted[GET_PLAYER((PlayerTypes)iI).getTeam()] = true; //Redundant, aber steht häufig mit im Code.

  12. #2517
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.023
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Ich hab mal etwas zusammen kopiert. Getestet habe ich das nat. nicht
    Code:
    CLinkList<TradeData> ourList;
    CLinkList<TradeData> theirList; // wird nicht gebraucht
    
    setTradeItem(&item, TRADE_VASSAL);
    ourList.insertAtEnd(item);
    
    pDiplo = new CvDiploParameters(getID());
    FAssertMsg(pDiplo != NULL, "pDiplo must be valid");
    pDiplo->setDiploComment((DiploCommentTypes)GC.getInfoTypeForString("AI_DIPLOCOMMENT_DEMAND_TRIBUTE"));
    pDiplo->setAIContact(true);
    pDiplo->setOurOfferList(theirList);
    
    gDLL->beginDiplomacy(pDiplo, (PlayerTypes)iI);
    //abContacted[GET_PLAYER((PlayerTypes)iI).getTeam()] = true; //Redundant, aber steht häufig mit im Code.
    Danke schön dafür schon einmal. Ich musste noch "CvDiploParameters* pDiplo;" einfügen, allerdings ist noch eine Frage offen: "setTradeItem(&item," - was muss &item hier sein? Das ist nämlich nicht definiert.

    Edit: Schon gefunden. TradeData item;
    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

  13. #2518
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.023
    Ich bin noch am Testen, im Moment funktioniert es leider noch 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. #2519
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    17.023
    Egal, was ich mache: Es öffnet sich kein Diplo-Fenster. Einmal hatte ich es geschafft, dass eines erschien, aber ohne die Handelsoptionen, und ohne dass danach jemand zum Vasall wurde.
    Der modifizierte Code sieht nun so aus:
    Code:
    void CvTeam::doCityStateDesert(TeamTypes eCityState) const
    {
    	bool bDesert = false;
    
    	if ( getID() != GET_TEAM(eCityState).getID() )//Nicht, wenn CityState Teammitglied vom TestTeam ist
    	{
    		if ( !GET_TEAM(eCityState).isVassal(getID()) )//Wenn bereits Vasall passiert auch nichts
    		{
    			
    			for (int iPlayer = 0; iPlayer < MAX_PLAYERS; iPlayer++)
    			{
    				CvPlayer& kLoopPlayer = GET_PLAYER((PlayerTypes)iPlayer);
    				if (kLoopPlayer.getTeam() == eCityState && kLoopPlayer.isAlive())//Überprüfen aller Spieler im Team, ob ein Stadtstaat dabei ist
    				{
    					CivilizationTypes eCityStateCiv = (CivilizationTypes)kLoopPlayer.getCivilizationType();
    					CvWString szBuffer;
    
    					if ( GC.getCivilizationInfo(eCityStateCiv).isCitystate() )
    					{
    						bool bNoMaster = true;//Wenn kein alter Master vorhanden: Desertiert immer
    						int iMasterID = -1;
    						for (int iI = 0; iI < MAX_CIV_TEAMS; iI++)//Suchen alter Master
    						{
    							if (GET_TEAM(eCityState).isVassal((TeamTypes)iI) )
    							{
    								bNoMaster = false;
    								iMasterID = iI;
    								if ((GET_TEAM(eCityState).AI_getAttitude((TeamTypes)iI) < (GET_TEAM(eCityState).AI_getAttitude(getID()))))
    								{
    									bDesert = true;
    								}
    								break;
    							}
    						}
    						if ( bDesert || bNoMaster)
    						{
    							if (iMasterID != -1)//Ablösen des alten Hegemon
    							{
    								GET_TEAM((TeamTypes)iMasterID).freeVassal(eCityState);
    								GET_TEAM((TeamTypes)eCityState).setVassal((TeamTypes)iMasterID,false,false);
    
    								for (int jPlayer = 0; jPlayer < MAX_PLAYERS; jPlayer++)
    								{
    									if (GET_PLAYER((PlayerTypes)jPlayer).getTeam() == (TeamTypes)iMasterID)
    									{
    										CvWString szBuffer;
    										PlayerTypes eMasterPlayer;
    										eMasterPlayer = ((PlayerTypes)jPlayer);
    										szBuffer = gDLL->getText("TXT_CITYSTATE_WECHSEL_LOST_TEXT", GET_TEAM((TeamTypes)eCityState).getName().GetCString() , GET_TEAM((TeamTypes)this->getID()).getName().GetCString() );
    										gDLL->getInterfaceIFace()->addMessage(eMasterPlayer, true, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_UNITCAPTURE", MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), -1, -1);
    									}
    								}
    
    							}
    //							assignVassal(eCityState,false);	//original Code
    							for (int jPlayer = 0; jPlayer < MAX_PLAYERS; jPlayer++)
    							{
    								if (GET_PLAYER((PlayerTypes)jPlayer).getTeam() == getID() )
    								{
    									CvWString szBuffer;
    									PlayerTypes eMasterPlayer;
    									eMasterPlayer = ((PlayerTypes)jPlayer);
    									CvPlayer& kMasterPlayer = GET_PLAYER((PlayerTypes)jPlayer);
    									
    									//Kathy begin: Ask Humans first
    									if ( kMasterPlayer.isHuman() )
    									{
    										// Ramkhamhaeng Beginn
    										CLinkList<TradeData> ourList;
    										CLinkList<TradeData> theirList; // wird nicht gebraucht
    										TradeData item;
    										setTradeItem(&item, TRADE_VASSAL);
    										ourList.insertAtEnd(item);
    										theirList.insertAtEnd(item);
    
    										CvDiploParameters* pDiplo;
    										pDiplo = new CvDiploParameters(kLoopPlayer.getID());
    										FAssertMsg(pDiplo != NULL, "pDiplo must be valid");
    										pDiplo->setDiploComment((DiploCommentTypes)GC.getInfoTypeForString("AI_DIPLOCOMMENT_OFFER_VASSAL"));
    										pDiplo->setAIContact(true);
    										pDiplo->setTheirOfferList(ourList);
    										pDiplo->setOurOfferList(theirList);
    
    										gDLL->beginDiplomacy(pDiplo,eMasterPlayer  );
    										//abContacted[GET_PLAYER((PlayerTypes)iI).getTeam()] = true; //Redundant, aber steht häufig mit im Code.
    
    										// Ramkhamhaeng End
    									}
    									else
    									{
    										assignVassal(eCityState,false);
    									}
    									//Kathy end: Ask Humans first
    									szBuffer = gDLL->getText("TXT_CITYSTATE_WECHSEL_TEXT", GET_TEAM((TeamTypes)eCityState).getName().GetCString() , GET_TEAM((TeamTypes)this->getID()).getName().GetCString() );
    									gDLL->getInterfaceIFace()->addMessage(eMasterPlayer, true, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_UNITCAPTURE", MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), -1, -1);
    									break;
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    }
    //Kathy End Citystate-Quests
    Parallel bekomme ich zwei Fehlermeldungen:
    Assert Failed

    File: CvPlayerAI.cpp
    Line: 13265
    Expression: AI_getPeacetimeGrantValue(eIndex) >= 0
    Message:
    Assert Failed

    File: CvPlayerAI.cpp
    Line: 13267
    Expression: iChange > 0
    Message:
    Beide beziehen sich auf diesen Code:

    Code:
    void CvPlayerAI::AI_changePeacetimeGrantValue(PlayerTypes eIndex, int iChange)
    {
    	PROFILE_FUNC();
    
    	int iI;
    
    	FAssertMsg(eIndex >= 0, "eIndex is expected to be non-negative (invalid Index)");
    	FAssertMsg(eIndex < MAX_PLAYERS, "eIndex is expected to be within maximum bounds (invalid Index)");
    
    	if (iChange != 0)
    	{
    		m_aiPeacetimeGrantValue[eIndex] = (m_aiPeacetimeGrantValue[eIndex] + iChange);
    		FAssert(AI_getPeacetimeGrantValue(eIndex) >= 0);
    
    		FAssert(iChange > 0);
    
    		if (iChange > 0)
    		{
    			if (GET_PLAYER(eIndex).getTeam() != getTeam())
    			{
    				for (iI = 0; iI < MAX_CIV_TEAMS; iI++)
    				{
    					if (GET_TEAM((TeamTypes)iI).isAlive())
    					{
    						if (GET_TEAM((TeamTypes)iI).AI_getWorstEnemy() == getTeam())
    						{
    /************************************************************************************************/
    /* UNOFFICIAL_PATCH                       03/02/10                                Sephi         */
    /*                                                                                              */
    /* Bug fix                                                                                      */
    /************************************************************************************************/
    /* orig bts code
    							GET_TEAM((TeamTypes)iI).AI_changeEnemyPeacetimeGrantValue(GET_PLAYER(eIndex).getTeam(), iChange);
    */
                                //make sure that if A trades with B and A is C's worst enemy, C is only mad at B if C has met B before
                                //A = this
                                //B = eIndex
                                //C = (TeamTypes)iI
                                if (GET_TEAM((TeamTypes)iI).isHasMet(GET_PLAYER(eIndex).getTeam()))
                                {
    								GET_TEAM((TeamTypes)iI).AI_changeEnemyPeacetimeGrantValue(GET_PLAYER(eIndex).getTeam(), iChange);
    							}
    /************************************************************************************************/
    /* UNOFFICIAL_PATCH                        END                                                  */
    /************************************************************************************************/
    						}
    					}
    				}
    			}
    		}
    	}
    }
    Ich kann aber nicht sehen, wo dieser Code gestartet 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

  15. #2520
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Muss der assignVassal-Aufruf über dem neuen Code auskommentiert werden (weil du diesen ersetzen willst)? (Edit: Ach so, die // ganz am Anfang der Zeile waren außerhalb des Sichtfensters...)
    Dann sehe ich noch, dass du das item beiden Listen zuweist, aber es sollte nur in 'our'.

Seite 168 von 180 ErsteErste ... 68118158164165166167168169170171172178 ... LetzteLetzte

Berechtigungen

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