Seite 62 von 113 ErsteErste ... 125258596061626364656672112 ... LetzteLetzte
Ergebnis 916 bis 930 von 1686

Thema: Bugsammlung

  1. #916
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.221
    Also, wenn ich im Weltenbauer eine Einheit setze, alle anderen anklicke und mit neuen Befehlen versehe (Leertaste/Zug beenden gilt nicht), kann ich danach weiterspielen. Damit ist die Ursache nicht behoben, aber es geht weiter. Die im WB gesetzte Einheit habe ich danach wieder gelöscht.

    Ich habe dir einmal ein Save angehängt, bei dem es wieder lief. Ich hoffe, ich habe in den fünf Runden, die ich gebraucht habe, dein Spiel nicht vermasselt.

    Bei dem anderen Save müsste es theoretisch auch klappen. Das blöde ist halt, du musst wirklich alle Einheiten, die irgendwo befestigt sind oder keinen Befehl haben oder noch 20 Runden an etwas bauen (da reicht es, denen noch einmal den selben Befehl zu geben) finden und anklicken. Vielleicht finde ich noch eine Lösung, aber bisher habe ich noch nicht einmal eine Idee, woher das Problem stammt.
    Angehängte Dateien Angehängte Dateien

  2. #917
    Registrierter Benutzer
    Registriert seit
    21.05.06
    Beiträge
    6
    Hallo Kathy,

    darüber mach Dir mal keine Sorgen. Schön, dass du es nachvollziehen konntest und vielen Dank für Deine Mühe!

  3. #918
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.122
    Von Nachvollziehen kann noch keine Rede sein. Es sind nur ein paar Symptome aufgefallen.
    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. #919
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.221
    Richtig, das Problem ist nur oderflächlich gelöst. Aber du kannst weiterspielen, das ist immerhin etwas.

  5. #920
    Registrierter Benutzer
    Registriert seit
    14.08.11
    Beiträge
    305
    Hallo Kathy,

    läuft ja gerade die Diskussion um Abstürze und gute Spiele...
    Leider will bei dem angehängten Spiel der Rundenwechsel partout nicht gelingen.
    Würde mich freuen, wenn du den Fehler finden würdest, Danke.
    Angehängte Dateien Angehängte Dateien
    Geändert von MattM (03. März 2015 um 20:41 Uhr)
    Gruß Matt

  6. #921
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.221
    Ich habe einmal in die Logs geschaut, das allein sagt mir nichts. Kannst du auch einmal den Spielstand anhängen, damit ich es mir genauer anschauen kann, was passiert?

  7. #922
    Registrierter Benutzer
    Registriert seit
    14.08.11
    Beiträge
    305
    Angehängt.

    Bei der Gelegenheit noch ein paar Anzeige-/Textfehler und die Frage, warum derzeit nach Eroberungen von Städten Belohnungen fliessen und zweimal die Meldung Aufstand erscheint (screen0067).
    Angehängte Grafiken Angehängte Grafiken
    Geändert von MattM (03. März 2015 um 20:58 Uhr)
    Gruß Matt

  8. #923
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.221
    Zu deinen Fragen: Hast du vielleicht mit der Eroberung von Gozo einen Spieler vernichtet, der mit dem Stadtstaat im Krieg war? Dann zahlen die eine Belohnung.

    Die Nachricht mit den Partisanen kommt zweimal, weil einmal der Originalbesitzer und einmal derjenige mit der höchsten Kultur den Aufstand probt. In diesem Fall ist das vermutlich der selbe. Ich habe die Formel jetzt gerade nicht im Kopf, ich meine, dass einer von beiden auch der Vorbesitzer sein müsste.

    Um die Texte kümmere ich mich, der Spielstand muss etwas warten, bis ich Zeit finde, ich denke, ab Freitag kann ich danach schauen.

  9. #924
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.221
    Das sieht mal wieder nach einer Endlosschleife aus. Letzte Aktion ist das Wachstum von Gauthigoth, davor erobert Spieler 17 einige Bautrupps. Ich schaue mal, wer der Besitzer von Gauthigoth ist.

    Edit: Das Problem liegt also entweder bei den Goten, oder bei den Isländern oder bei den Piraten unter Morgan. Oder bei den Barbaren, die soweit ich weiß ganz zum Schluss kommen.

    Edit2: Also, laut deinem Log schafft es das Spiel bis zu den Goten. Wenn ich aber Isländer und Port Royal lösche, scheint es schon vorher in einer Schleife festzuhängen

    Edit3:
    Die Goten haben laut Log ihre Einheiten schon bewegt. Das Problem ist also entweder die Isländer oder Port Royal - oder der Beginn des neuen Spielerzugs.

    Edit4: Änderungen an den betreffenden Spieler - z.B. Goten eine Tech verkaufen, Grenzen öffnen mit Port Royal... ändert nichts an dem Ergebnis. Island rechnet seine Technologien nicht hoch, scheint also irgendwie im Einheitendurchlauf ein Problem zu haben. Dabei haben sie aber keine erkennbaren problematischen Einheiten.

    Edit 5: Eventuell hat Morgan seinen Zug doch gemacht. Seine Forschungszeit ändert sich zumindest von 105 auf 102. Das kann natürlich auch andere Ursachen haben, wie zusätzliche Handelswege durch Öffnung der Grenzen mit irgendwem. Bei Island ändert sich die Forschung nicht, aber vielleicht hat sich ihr Forschungspunktausstoß auch verringert, so dass die 8 Runden zu Beginn des Durchlaufs nicht die selben sind wie die 8 Runden danach. Sicher weiß ich es nicht. Wenn Morgan allerdings zum Zug kommt, sind die Probleme entweder die Barbaren (unwahrscheinlich, da sie nichts haben) oder ein Ereignis zu Beginn deiner Runde, ein Diplomatie-Angebot oder ein Problem mit der ersten Stadt, die aufgerufen wird. Das dürfte Kumbi Saleh sein, die den Missionar ausbilden.
    Geändert von Kathy (06. März 2015 um 21:49 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

  10. #925
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.221
    Also, Ich bin relativ sicher, dass Morgan forscht. Ich habe aber nicht die geringste Idee, was an deinem Zug das Problem ist. Ich kann nun wieder nur raten und Haltepunkte setzen, in der Hoffnung, dass ich irgendwie das Richtige finde. Eine Lösung habe ich nicht. Zumindest ist nicht das Aufrufen der Städte das Problem, im letzten Durchlauf habe ich dafür gesorgt, dass nirgendwo ein Projekt fertig wurde.

    Mögliche Auslöser sehe ich noch in
    a) ein Diplo-Angebot
    b) Ein Event

    Für beides habe ich aber keine Idee, und das ist auch nur sehr grob geschätzt.
    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. #926
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.221
    Ich fürchte, es hat nichts mit dem Problem zu tun, aber in Mexico City wird der Fehler ausgegeben:
    Code:
    int CvCity::getUnitCombatFreeExperience(UnitCombatTypes eIndex) const
    {
    	FAssertMsg(eIndex >= 0, "eIndex expected to be >= 0");
    	FAssertMsg(eIndex < GC.getNumUnitCombatInfos(), "eIndex expected to be < GC.getNumUnitCombatInfos()");
    	return m_paiUnitCombatFreeExperience[eIndex];
    }
    Weiß jemand, was das bedeutet? Ich vermute, dass eine Einheit ohne UnitCombatType durch Aufwertung (das geht aus dem Stapel hervor) entsteht. Die UnitClass ist 14, das kann ich überprüfen, ob da etwas nicht stimmt.

    Edit: Laut dem Aufruf hat Mexico City gerade versucht, eine Einheit Hirsch zu erschaffen oder aufzuwerten.
    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. #927
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.221
    So, jetzt habe ich folgendes:

    Ich bekomme folgenden Stack:
    Code:
    template <class T>
    T* FFreeListTrashArray<T>::getAt(int iID) const
    {
    	int iIndex;
    
    	if ((iID == FFreeList::INVALID_INDEX) || (m_pArray == NULL))
    	{
    		return NULL;
    	}
    
    	iIndex = (iID & FLTA_INDEX_MASK);
    
    	assert(iIndex >= 0);
    
    	if ((iIndex <= m_iLastIndex) && 
    		(m_pArray[iIndex].pData != NULL))
    	{
    		if (((iID & FLTA_ID_MASK) == 0) || (m_pArray[iIndex].pData->getID() == iID))
    		{
    			return m_pArray[iIndex].pData;
    		}
    	}
    
    	return NULL;
    }
    In der roten Zeile eine unbehandelte Ausnahme
    iID = 385035 (auch Zeile 2, sowie "unit" in Zeile 3)
    iIndex =11
    iLastIndex = 39

    Zeile 2:
    Code:
    CvUnit* CvPlayer::getUnit(int iID) const
    {
    	return (m_units.getAt(iID));
    }
    Zeile 3:
    Code:
    CvUnit* getUnit(IDInfo unit)
    {
    	if ((unit.eOwner >= 0) && unit.eOwner < MAX_PLAYERS)
    	{
    		return (GET_PLAYER((PlayerTypes)unit.eOwner).getUnit(unit.iID));
    	}
    
    	return NULL;
    }
    eOwner = 5

    Zeile 4:
    Code:
    CvUnit* CvUnit::getTransportUnit() const
    {
    	return getUnit(m_transportUnit);
    }
    m_transportUnit = siehe ID

    Zeile 5:
    Code:
    bool CvUnit::isCargo() const
    {
    	return (getTransportUnit() != NULL);
    }
    Zeile 6:
    Code:
    bool CvUnit::isInvisible(TeamTypes eTeam, bool bDebug, bool bCheckCargo) const
    {
    	if (bDebug && GC.getGameINLINE().isDebugMode())
    	{
    		return false;
    	}
    
    	if (getTeam() == eTeam)
    	{
    		return false;
    	}
    
    	if (alwaysInvisible())
    	{
    		return true;
    	}
    
    	if (bCheckCargo && isCargo())
    	{
    		return true;
    	}
    
    	if (getInvisibleType() == NO_INVISIBLE)
    	{
    		return false;
    	}
    
    	return !(plot()->isInvisibleVisible(eTeam, getInvisibleType()));
    }
    eTeam = 0, check Cargo = true

    Code:
    bool CvUnit::canCoexistWithEnemyUnit(TeamTypes eTeam) const
    {
    	if (NO_TEAM == eTeam)
    	{
    		if(alwaysInvisible())
    		{
    			return true;
    		}
    		
    		return false;
    	}
    
    	if(isInvisible(eTeam, false))
    	{
    		return true;
    	}
    
    	return false;
    }
    eTeam = 0

    Code:
    bool PUF_isEnemy(const CvUnit* pUnit, int iData1, int iData2)
    {
    	FAssertMsg(iData1 != -1, "Invalid data argument, should be >= 0");
    	FAssertMsg(iData2 != -1, "Invalid data argument, should be >= 0");
    
    	TeamTypes eOtherTeam = GET_PLAYER((PlayerTypes)iData1).getTeam();
    	TeamTypes eOurTeam = GET_PLAYER(pUnit->getCombatOwner(eOtherTeam, pUnit->plot())).getTeam();
    
    	if (pUnit->canCoexistWithEnemyUnit(eOtherTeam))
    	{
    		return false;
    	}
    
    	return (iData2 ? eOtherTeam != eOurTeam : atWar(eOtherTeam, eOurTeam));
    }
    eOurTeam = 5
    eOtherTeam = 0
    iData1, iData2 = 0
    pUnit ist Unitclass 29

    Code:
    CvUnit* CvPlot::plotCheck(ConstPlotUnitFunc funcA, int iData1A, int iData2A, PlayerTypes eOwner, TeamTypes eTeam, ConstPlotUnitFunc funcB, int iData1B, int iData2B) const
    {
    	CLLNode<IDInfo>* pUnitNode;
    	CvUnit* pLoopUnit;
    
    	pUnitNode = headUnitNode();
    
    	while (pUnitNode != NULL)
    	{
    		pLoopUnit = ::getUnit(pUnitNode->m_data);
    		pUnitNode = nextUnitNode(pUnitNode);
    
    		if ((eOwner == NO_PLAYER) || (pLoopUnit->getOwnerINLINE() == eOwner))
    		{
    			if ((eTeam == NO_TEAM) || (pLoopUnit->getTeam() == eTeam))
    			{
    				if (funcA(pLoopUnit, iData1A, iData2A))
    				{
    					if ((funcB == NULL) || funcB(pLoopUnit, iData1B, iData2B))
    					{
    						return pLoopUnit;
    					}
    				}
    			}
    		}
    	}
    
    	return NULL;
    }
    eTeam und eOwner sind hier -1

    Code:
    bool CvPlot::isVisibleEnemyUnit(const CvUnit* pUnit) const
    {
    	return (plotCheck(PUF_isEnemy, pUnit->getOwnerINLINE(), pUnit->isAlwaysHostile(this), NO_PLAYER, NO_TEAM, PUF_isVisible, pUnit->getOwnerINLINE()) != NULL);
    }
    Code:
    bool CvPlot::isFriendlyCity(const CvUnit& kUnit, bool bCheckImprovement) const
    {
    	if (!isCity(bCheckImprovement, kUnit.getTeam()))
    	{
    		return false;
    	}
    
    	if (isVisibleEnemyUnit(&kUnit))
    	{
    		return false;
    	}
    
    	TeamTypes ePlotTeam = getTeam();
    
    	if (NO_TEAM != ePlotTeam)
    	{
    		if (kUnit.isEnemy(ePlotTeam))
    		{
    			return false;
    		}
    
    		TeamTypes eTeam = GET_PLAYER(kUnit.getCombatOwner(ePlotTeam, this)).getTeam();
    
    		if (eTeam == ePlotTeam)
    		{
    			return true;
    		}
    
    		if (GET_TEAM(eTeam).isOpenBorders(ePlotTeam))
    		{
    			return true;
    		}
    
    		if (GET_TEAM(ePlotTeam).isVassal(eTeam))
    		{
    			return true;
    		}
    	}
    
    	return false;
    }
    Code:
    bool CvUnit::canMoveInto(const CvPlot* pPlot, bool bAttack, bool bDeclareWar, bool bIgnoreLoad) const
    {
    	PROFILE_FUNC();
    
    	FAssertMsg(pPlot != NULL, "Plot is not assigned a valid value");
    
    	if (atPlot(pPlot))
    	{
    		return false;
    	}
    
    	if (pPlot->isImpassable())
    	{
    		if (!canMoveImpassable())
    		{
    			return false;
    		}
    	}
    
    	// Cannot move around in unrevealed land freely
    	if (m_pUnitInfo->isNoRevealMap() && willRevealByMove(pPlot))
    	{
    		return false;
    	}
    
    	if (GC.getUSE_SPIES_NO_ENTER_BORDERS())
    	{
    		if (isSpy() && NO_PLAYER != pPlot->getOwnerINLINE())
    		{
    			if (!GET_PLAYER(getOwnerINLINE()).canSpiesEnterBorders(pPlot->getOwnerINLINE()))
    			{
    				return false;
    			}
    		}
    	}
    
    	CvArea *pPlotArea = pPlot->area();
    	TeamTypes ePlotTeam = pPlot->getTeam();
    	bool bCanEnterArea = canEnterArea(ePlotTeam, pPlotArea);
    	if (bCanEnterArea)
    	{
    		if (pPlot->getFeatureType() != NO_FEATURE)
    		{
    			if (m_pUnitInfo->getFeatureImpassable(pPlot->getFeatureType()))
    			{
    				TechTypes eTech = (TechTypes)m_pUnitInfo->getFeaturePassableTech(pPlot->getFeatureType());
    				if (NO_TECH == eTech || !GET_TEAM(getTeam()).isHasTech(eTech))
    				{
    					if (DOMAIN_SEA != getDomainType() || pPlot->getTeam() != getTeam())  // sea units can enter impassable in own cultural borders
    					{
    						return false;
    					}
    				}
    			}
    		}
    /************************************************************************************************/
    /* UNOFFICIAL_PATCH                       09/17/09                         TC01 & jdog5000      */
    /*                                                                                              */
    /* Bugfix				                                                                        */
    /************************************************************************************************/
    /* original bts code
    		else
    */
    		// always check terrain also
    /************************************************************************************************/
    /* UNOFFICIAL_PATCH                        END                                                  */
    /************************************************************************************************/
    		{
    			//Korrektur Terrain Impassable Kathy: Passable bei Städten
    			if (pPlot->isFriendlyCity(*this, true) == false )
    			{
    			//Korrektur Terrain Impassable Kathy: Passable bei Städten
    				if (m_pUnitInfo->getTerrainImpassable(pPlot->getTerrainType()))
    				{
    					TechTypes eTech = (TechTypes)m_pUnitInfo->getTerrainPassableTech(pPlot->getTerrainType());
    					if (NO_TECH == eTech || !GET_TEAM(getTeam()).isHasTech(eTech))
    					{
    						if (DOMAIN_SEA != getDomainType() || pPlot->getTeam() != getTeam())  // sea units can enter impassable in own cultural borders
    						{
    							if (bIgnoreLoad || !canLoad(pPlot)) 
    							{ 
    								return false;
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    Da taucht zum ersten mal eine Änderung von mit auf. Die besagt meiner Meinung nach nur, dass die TerrainImpassable-Funktion für befreundete Städte ausgeschaltet ist. Bautrupps können dann ohne die Technologie "Packtiere" ein Wüstenstädte reingehen.

    Code:
    bool CvUnit::jumpToNearestValidPlot()
    {
    	CvCity* pNearestCity;
    	CvPlot* pLoopPlot;
    	CvPlot* pBestPlot;
    	int iValue;
    	int iBestValue;
    	int iI;
    
    	FAssertMsg(!isAttacking(), "isAttacking did not return false as expected");
    	FAssertMsg(!isFighting(), "isFighting did not return false as expected");
    
    	pNearestCity = GC.getMapINLINE().findCity(getX_INLINE(), getY_INLINE(), getOwnerINLINE());
    
    	iBestValue = MAX_INT;
    	pBestPlot = NULL;
    
    	for (iI = 0; iI < GC.getMapINLINE().numPlotsINLINE(); iI++)
    	{
    		pLoopPlot = GC.getMapINLINE().plotByIndexINLINE(iI);
    
    		if (pLoopPlot->isValidDomainForLocation(*this))
    		{
    			if (canMoveInto(pLoopPlot))
    			
    			{
    				if (canEnterArea(pLoopPlot->getTeam(), pLoopPlot->area()) && !isEnemy(pLoopPlot->getTeam(), pLoopPlot))
    				{
    					FAssertMsg(!atPlot(pLoopPlot), "atPlot(pLoopPlot) did not return false as expected");
    
    					if ((getDomainType() != DOMAIN_AIR) || pLoopPlot->isFriendlyCity(*this, true))
    					{
    						if (pLoopPlot->isRevealed(getTeam(), false))
    						{
    							iValue = (plotDistance(getX_INLINE(), getY_INLINE(), pLoopPlot->getX_INLINE(), pLoopPlot->getY_INLINE()) * 2);
    
    							if (pNearestCity != NULL)
    							{
    								iValue += plotDistance(pLoopPlot->getX_INLINE(), pLoopPlot->getY_INLINE(), pNearestCity->getX_INLINE(), pNearestCity->getY_INLINE());
    							}
    
    							if (getDomainType() == DOMAIN_SEA && !plot()->isWater())
    							{
    								if (!pLoopPlot->isWater() || !pLoopPlot->isAdjacentToArea(area()))
    								{
    									iValue *= 3;
    								}
    							}
    							else
    							{
    								if (pLoopPlot->area() != area())
    								{
    									iValue *= 3;
    								}
    							}
    
    							if (iValue < iBestValue)
    							{
    								iBestValue = iValue;
    								pBestPlot = pLoopPlot;
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    
    	bool bValid = true;
    	if (pBestPlot != NULL)
    	{
    		setXY(pBestPlot->getX_INLINE(), pBestPlot->getY_INLINE());
    	}
    	else
    	{
    		bValid = jumpToNearestValidPlot();
    	}
    
    	return bValid;
    }
    Darunter wird scheinbar unendlich oft aufgerufen:
    Code:
    bool CvUnit::jumpToNearestValidPlot()
    {
    	CvCity* pNearestCity;
    	CvPlot* pLoopPlot;
    	CvPlot* pBestPlot;
    	int iValue;
    	int iBestValue;
    	int iI;
    
    	FAssertMsg(!isAttacking(), "isAttacking did not return false as expected");
    	FAssertMsg(!isFighting(), "isFighting did not return false as expected");
    
    	pNearestCity = GC.getMapINLINE().findCity(getX_INLINE(), getY_INLINE(), getOwnerINLINE());
    
    	iBestValue = MAX_INT;
    	pBestPlot = NULL;
    
    	for (iI = 0; iI < GC.getMapINLINE().numPlotsINLINE(); iI++)
    	{
    		pLoopPlot = GC.getMapINLINE().plotByIndexINLINE(iI);
    
    		if (pLoopPlot->isValidDomainForLocation(*this))
    		{
    			if (canMoveInto(pLoopPlot))
    			
    			{
    				if (canEnterArea(pLoopPlot->getTeam(), pLoopPlot->area()) && !isEnemy(pLoopPlot->getTeam(), pLoopPlot))
    				{
    					FAssertMsg(!atPlot(pLoopPlot), "atPlot(pLoopPlot) did not return false as expected");
    
    					if ((getDomainType() != DOMAIN_AIR) || pLoopPlot->isFriendlyCity(*this, true))
    					{
    						if (pLoopPlot->isRevealed(getTeam(), false))
    						{
    							iValue = (plotDistance(getX_INLINE(), getY_INLINE(), pLoopPlot->getX_INLINE(), pLoopPlot->getY_INLINE()) * 2);
    
    							if (pNearestCity != NULL)
    							{
    								iValue += plotDistance(pLoopPlot->getX_INLINE(), pLoopPlot->getY_INLINE(), pNearestCity->getX_INLINE(), pNearestCity->getY_INLINE());
    							}
    
    							if (getDomainType() == DOMAIN_SEA && !plot()->isWater())
    							{
    								if (!pLoopPlot->isWater() || !pLoopPlot->isAdjacentToArea(area()))
    								{
    									iValue *= 3;
    								}
    							}
    							else
    							{
    								if (pLoopPlot->area() != area())
    								{
    									iValue *= 3;
    								}
    							}
    
    							if (iValue < iBestValue)
    							{
    								iBestValue = iValue;
    								pBestPlot = pLoopPlot;
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    
    	bool bValid = true;
    	if (pBestPlot != NULL)
    	{
    		setXY(pBestPlot->getX_INLINE(), pBestPlot->getY_INLINE());
    	}
    	else
    	{
    		bValid = jumpToNearestValidPlot();
    	}
    
    	return bValid;
    }
    Verstehe ich das richtig, dass "jumpToNearestValidPlot" in der Funktion selbst aufgerufen wird? Das klingt für mich erst einmal komisch, weil dadurch tatsächlich nicht sichergestellt wird, dass die Schleife terminiert.
    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. #928
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.221
    Wenn ich
    Code:
    	bool bValid = true;
    	if (pBestPlot != NULL)
    	{
    		setXY(pBestPlot->getX_INLINE(), pBestPlot->getY_INLINE());
    	}
    	else
    	{
    		bValid = jumpToNearestValidPlot();
    	}
    
    	return bValid;
    }
    zu

    Code:
    	bool bValid = true;
    	if (pBestPlot != NULL)
    	{
    		setXY(pBestPlot->getX_INLINE(), pBestPlot->getY_INLINE());
    	}
    	else
    	{
    		bValid = false
    	}
    
    	return bValid;
    }
    ändere, läuft das Spiel durch. Ehe ich das jetzt allgemein ändere: Hat jemand eine Idee, was das vorher sollte?
    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. #929
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.122
    Du rufst in der bool CvUnit::jumpToNearestValidPlot() wieder bool CvUnit::jumpToNearestValidPlot() plot aus und das lässt den Stack volllaufen, weil es eben beim zweiten mal ohne andere Eingabewerte halt kein anderes Ergebnis gibt und daher unendlich ineinander jumpToNearestValidPlot() aufgerufen wird. Das ist nicht original BTS und so auch total sinnlos außer um den Rechner crashen zu lassen. Wahrscheinlich sieht man das genau an den Aufrufstack, der uns noch verheimlicht wird.
    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.

  15. #930
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    18.221
    Zitat Zitat von rucivfan Beitrag anzeigen
    Du rufst in der bool CvUnit::jumpToNearestValidPlot() wieder bool CvUnit::jumpToNearestValidPlot() plot aus und das lässt den Stack volllaufen, weil es eben beim zweiten mal ohne andere Eingabewerte halt kein anderes Ergebnis gibt und daher unendlich ineinander jumpToNearestValidPlot() aufgerufen wird. Das ist nicht original BTS und so auch total sinnlos außer um den Rechner crashen zu lassen. Wahrscheinlich sieht man das genau an den Aufrufstack, der uns noch verheimlicht wird.
    Das habe ich doch geschrieben, dass es sinnlos ist. Und dass es unendlich oft aufgerufen wird habe ich auch geschrieben. Welcher Teil des Aufrufstacks fehlt dir also? Die Frage war für mich nur: Warum macht jemand so etwas?
    Dass das nicht original BtS ist beantwortet für mich diese Frage. Dann kann ich es einfach wegmachen.

    Komischerweise fehlt dieser Fehler tatsächlich auch in der späteren Version des Mods, da steht
    Code:
    	else
    	{
    		kill(false);
    		bValid = false;
    	}
    Das dürfte dem Original entsprechen. Da ich nicht wissentlich den wiederholten Aufruf eingebaut habe, kann ich nicht sagen, wie er dahin kommen. Ich vermute einmal: Einmal zu viel Strg+V statt Strg+C gedrückt und dann nicht bemerkt.
    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 62 von 113 ErsteErste ... 125258596061626364656672112 ... LetzteLetzte

Berechtigungen

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