Seite 1005 von 1527 ErsteErste ... 55059059559951001100210031004100510061007100810091015105511051505 ... LetzteLetzte
Ergebnis 15.061 bis 15.075 von 22904

Thema: BASE: FRAGEN & FEEDBACK (inkl. Fehlermeldungen)

  1. #15061
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Das ist ja mysteriös. Was hat sich Firaxis dabei gedacht?
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  2. #15062
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Mir ist noch was aufgefallen!

    601756 In dieser Zahl steckt +1750 drinn. Das ist die 2000 Strafe - 250 für die Veteidigung-Bonis des Hügel-Stadtfeldes. Das heißt, über den geraden Weg sind die Panzer maßgebend, über den Umweg ist der Schützenpanzer maßgebend. Das ist der Fehler. Es wird von verschiedenen Worst Cases ausgegangen.
    Geändert von rucivfan (15. Juni 2013 um 21:21 Uhr)

  3. #15063
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Manchmal denke ich, Firaxis hätte dich einstellen sollen.
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  4. #15064
    Diable-Blanc
    Gast
    Hallo Leute Danke! für den Patch F

  5. #15065
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Kein Ding. Ich hoffe, es laden den diesmal paar mehr Leute runter. 1000 BASE Downloads, aber nicht mal 200 Patch Downloads war etwas.... seltsam. Entweder die Leute lesen nicht alles oder die meisten wollen nur mal reingucken, aber nicht ernsthaft spielen.
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  6. #15066
    Diable-Blanc
    Gast
    Ja denke ich auch, das die meisten nicht richtig lesen "hust" oder wie Du schon schreibst, nur mal reingucken wollen.
    Aber schade Leute, Ihr verpasst den besten Mod Normal Civ. 4 BTS ist langweilig dagegen.

  7. #15067
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Code:
    int pathCost(FAStarNode* parent, FAStarNode* node, int data, const void* pointer, FAStar* finder)
    {
    	CLLNode<IDInfo>* pUnitNode;
    	CvSelectionGroup* pSelectionGroup;
    	CvUnit* pLoopUnit;
    	CvPlot* pFromPlot;
    	CvPlot* pToPlot;
    	int iWorstCost;
    	int iCost;
    	int iWorstMovesLeft;
    	int iMovesLeft;
    	int iWorstMax;
    	int iMax;
    
    	pFromPlot = GC.getMapINLINE().plotSorenINLINE(parent->m_iX, parent->m_iY);
    	FAssert(pFromPlot != NULL);
    	pToPlot = GC.getMapINLINE().plotSorenINLINE(node->m_iX, node->m_iY);
    	FAssert(pToPlot != NULL);
    
    	pSelectionGroup = ((CvSelectionGroup *)pointer);
    
    	iWorstCost = MAX_INT;
    	iWorstMovesLeft = MAX_INT;
    	iWorstMax = MAX_INT;
    
    	pUnitNode = pSelectionGroup->headUnitNode();
    
    	while (pUnitNode != NULL)
    	{
    		pLoopUnit = ::getUnit(pUnitNode->m_data);
    		pUnitNode = pSelectionGroup->nextUnitNode(pUnitNode);
    		FAssertMsg(pLoopUnit->getDomainType() != DOMAIN_AIR, "pLoopUnit->getDomainType() is not expected to be equal with DOMAIN_AIR");
    
    		if (parent->m_iData1 > 0)
    		{
    			iMax = parent->m_iData1;
    		}
    		else
    		{
    			iMax = pLoopUnit->maxMoves();
    		}
    
    		iCost = pToPlot->movementCost(pLoopUnit, pFromPlot);
    
    		iMovesLeft = std::max(0, (iMax - iCost));
    
    		if (iMovesLeft <= iWorstMovesLeft)
    		{
    			if ((iMovesLeft < iWorstMovesLeft) || (iMax <= iWorstMax))
    			{
    				if (iMovesLeft == 0)
    				{
    					iCost = (PATH_MOVEMENT_WEIGHT * iMax);
    
    					if (pToPlot->getTeam() != pLoopUnit->getTeam())
    					{
    						iCost += PATH_TERRITORY_WEIGHT;
    					}
    
    					// Damage caused by features (mods)
    					if (0 != GC.getPATH_DAMAGE_WEIGHT())
    					{
    						if (pToPlot->getFeatureType() != NO_FEATURE)
    						{
    							iCost += (GC.getPATH_DAMAGE_WEIGHT() * std::max(0, GC.getFeatureInfo(pToPlot->getFeatureType()).getTurnDamage())) / GC.getMAX_HIT_POINTS();
    						}
    
    						if (pToPlot->getExtraMovePathCost() > 0)
    						{
    							iCost += (PATH_MOVEMENT_WEIGHT * pToPlot->getExtraMovePathCost());
    						}
    					}
    				}
    				else
    				{
    					iCost = (PATH_MOVEMENT_WEIGHT * iCost);
    				}
    
    				if (pLoopUnit->canFight())
    				{
    					if (iMovesLeft == 0)
    					{
    						iCost += (PATH_DEFENSE_WEIGHT * std::max(0, (200 - ((pLoopUnit->noDefensiveBonus()) ? 0 : pToPlot->defenseModifier(pLoopUnit->getTeam(), false)))));
    					}
    
    					if (pSelectionGroup->AI_isControlled())
    					{
    						if (pLoopUnit->canAttack())
    						{
    							if (gDLL->getFAStarIFace()->IsPathDest(finder, pToPlot->getX_INLINE(), pToPlot->getY_INLINE()))
    							{
    								if (pToPlot->isVisibleEnemyDefender(pLoopUnit))
    								{
    									iCost += (PATH_DEFENSE_WEIGHT * std::max(0, (200 - ((pLoopUnit->noDefensiveBonus()) ? 0 : pFromPlot->defenseModifier(pLoopUnit->getTeam(), false)))));
    
    									if (!(pFromPlot->isCity()))
    									{
    										iCost += PATH_CITY_WEIGHT;
    									}
    
    									if (pFromPlot->isRiverCrossing(directionXY(pFromPlot, pToPlot)))
    									{
    										if (!(pLoopUnit->isRiver()))
    										{
    											iCost += (PATH_RIVER_WEIGHT * -(GC.getRIVER_ATTACK_MODIFIER()));
    											iCost += (PATH_MOVEMENT_WEIGHT * iMovesLeft);
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    
    				if (iCost < iWorstCost)
    				{
    					iWorstCost = iCost;
    					iWorstMovesLeft = iMovesLeft;
    					iWorstMax = iMax;
    				}
    			}
    		}
    	}
    
    	FAssert(iWorstCost != MAX_INT);
    
    	iWorstCost += PATH_STEP_WEIGHT;
    
    	if ((pFromPlot->getX_INLINE() != pToPlot->getX_INLINE()) && (pFromPlot->getY_INLINE() != pToPlot->getY_INLINE()))
    	{
    		iWorstCost += PATH_STRAIGHT_WEIGHT;
    	}
    
    	FAssert(iWorstCost > 0);
    
    	// rucivfan[
    	char szLog[1024];
    	sprintf(szLog, "Von Plot: (%d, %d) Zu Plot: (%d, %d) -> WorstCost = %d \n", pFromPlot->getX_INLINE(), pFromPlot->getY_INLINE(), pToPlot->getX_INLINE(), pToPlot->getY_INLINE(), iWorstCost);
    	PROFILE(szLog);
    	OutputDebugString(szLog);
    	// ]rucivfan
    
    	return iWorstCost;
    }
    Das (iMax <= iWorstMax) rot markierte ist die Ursache unseres Problem und die Lösung eines anderen Problemes, was man ohne diese Abfrage hätte.

    Die Idee dafür ist, dass eine Einheit bei gleicher Startbewegung, die erst später in der Einheitenliste auftaucht, noch die Möglichkeit hat, in die Wertung einzugehen. Würde man das Weglassen, so würden nur noch die Kosten der ersten Einheit eines Stackes Einheiten mit gleicher Bewegung berücksichtigt werden, ohne die Berücksichtigungen der folgenden Faktoren. Es ist quasi ein Fehler im Algorithmus als ganzes. Ohne würde er nicht gehen und mit auch nicht.
    Geändert von rucivfan (15. Juni 2013 um 22:55 Uhr)

  8. #15068
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  9. #15069
    Registrierter Benutzer
    Registriert seit
    09.06.11
    Beiträge
    445
    Zitat Zitat von Cybah Beitrag anzeigen
    1000 BASE Downloads, aber nicht mal 200 Patch Downloads war etwas.... seltsam.
    Werden denn alle Downloadversuche oder nur komplette Downloads gezählt? Beim letzten Mal hatte ich alle drei Server parallel gewählt und parallel geladen. Habe dann nur den schnellsten Download fertig gestellt, aber möglicherweise zählte es für 3? Geht sicher auch anderen so.

  10. #15070
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Kein Plan. Schätze, dass gezählt wird, wenn der Browser einen Downloadklick übermittelt.
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  11. #15071
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Habe nur eine kleine Abfrage hinzugefügt und der Angriff auf den Bild oben ging gerade aus.

    Ich kann aber noch nicht garantieren, dass nicht noch was anderes unerhofftes passiert.

  12. #15072
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Bin gespannt.
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  13. #15073
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Cybah:

    Habe mir noch mal die Wegfindung zu gemüte gezogen und bin der Meinung, dass diese Sicher ist. Sie macht das gleiche bis auf den einen Fall. Kannst ja mal ein paar Runden die KI damit kämpfen lassen. In der Base-Funktion gibt es zwar ein paar Erweiterungen durch Better_AI, aber die ändern nichts am ursprünglichen Code selbst.

    Code:
    int pathCost(FAStarNode* parent, FAStarNode* node, int data, const void* pointer, FAStar* finder)
    {
    	CLLNode<IDInfo>* pUnitNode;
    	CvSelectionGroup* pSelectionGroup;
    	CvUnit* pLoopUnit;
    	CvPlot* pFromPlot;
    	CvPlot* pToPlot;
    	
    	// rucivfan_bug_fix rbf[
    	// old code[
    	//int iWorstCost;
    	//int iCost;
    	//int iWorstMovesLeft;
    	//int iMovesLeft;
    	//int iWorstMax;
    	//int iMax;
    	// ]old code
    
    	// new code[
    	int iWorstCost;
    	int iCost;
    	//int iWorstMovesLeft;
    	int iMovesLeft;
    	int iMax;
    	int iWorstLostMove;
    	int iLostMove;
    	// ]new code
    	// ]rucivfan_bug_fix rbf[
    
    	pFromPlot = GC.getMapINLINE().plotSorenINLINE(parent->m_iX, parent->m_iY);
    	FAssert(pFromPlot != NULL);
    	pToPlot = GC.getMapINLINE().plotSorenINLINE(node->m_iX, node->m_iY);
    	FAssert(pToPlot != NULL);
    
    	pSelectionGroup = ((CvSelectionGroup *)pointer);
    	
    	// rucivfan_bug_fix rbf[
    	// old code[
    	//iWorstCost = MAX_INT;
    	//iWorstMovesLeft = MAX_INT;
    	//iWorstMax = MAX_INT;
    	// ]old code
    
    	// new code[
    	iWorstCost = MAX_INT;
    	//iWorstMovesLeft = MAX_INT;
    	iWorstLostMove = MAX_INT;
    	// ]new code
    	// ]rucivfan_bug_fix rbf[
    
    	pUnitNode = pSelectionGroup->headUnitNode();
    
    	while (pUnitNode != NULL)
    	{
    		pLoopUnit = ::getUnit(pUnitNode->m_data);
    		pUnitNode = pSelectionGroup->nextUnitNode(pUnitNode);
    		FAssertMsg(pLoopUnit->getDomainType() != DOMAIN_AIR, "pLoopUnit->getDomainType() is not expected to be equal with DOMAIN_AIR");
    
    		if (parent->m_iData1 > 0)
    		{
    			iMax = parent->m_iData1;
    		}
    		else
    		{
    			iMax = pLoopUnit->maxMoves();
    		}
    		
    		iCost = pToPlot->movementCost(pLoopUnit, pFromPlot);
    		
    		// rucivfan_bug_fix rbf[
    		// old code[
    		//iMovesLeft = std::max(0, (iMax - iCost));
    		//if (iMovesLeft <= iWorstMovesLeft)
    		//{
    		//	if ((iMovesLeft < iWorstMovesLeft) || (iMax <= iWorstMax))
    		//	{
    		// ]old code
    
    		// new code[
    		iLostMove = (iMax - iCost);
    		iMovesLeft = std::max(0, iLostMove);
    
    		//if (iMovesLeft <= iWorstMovesLeft)
    		if(iLostMove <= iWorstLostMove)
    		{
    			//if ((iMovesLeft < iWorstMovesLeft) || (iLostMove <= iWorstLostMove))
    			{
    		// ]new code
    		// ]rucivfan_bug_fix rbf[
    				if (iMovesLeft == 0)
    				{
    					iCost = (PATH_MOVEMENT_WEIGHT * iMax);
    
    					if (pToPlot->getTeam() != pLoopUnit->getTeam())
    					{
    						iCost += PATH_TERRITORY_WEIGHT;
    					}
    
    					// Damage caused by features (mods)
    					if (0 != GC.getPATH_DAMAGE_WEIGHT())
    					{
    						if (pToPlot->getFeatureType() != NO_FEATURE)
    						{
    							iCost += (GC.getPATH_DAMAGE_WEIGHT() * std::max(0, GC.getFeatureInfo(pToPlot->getFeatureType()).getTurnDamage())) / GC.getMAX_HIT_POINTS();
    						}
    
    						if (pToPlot->getExtraMovePathCost() > 0)
    						{
    							iCost += (PATH_MOVEMENT_WEIGHT * pToPlot->getExtraMovePathCost());
    						}
    					}
    				}
    				else
    				{
    					iCost = (PATH_MOVEMENT_WEIGHT * iCost);
    				}
    
    				if (pLoopUnit->canFight())
    				{
    					// rucivfan_bug_fix rbf[
    					// old code[
    					//if (iMovesLeft == 0)
    					//{
    					//	iCost += (PATH_DEFENSE_WEIGHT * std::max(0, (200 - ((pLoopUnit->noDefensiveBonus()) ? 0 : pToPlot->defenseModifier(pLoopUnit->getTeam(), false)))));
    					//}
    					// ]old code
    
    					// new code[
    					iCost += (PATH_DEFENSE_WEIGHT * std::max(0, (200 - ((pLoopUnit->noDefensiveBonus()) ? 0 : pToPlot->defenseModifier(pLoopUnit->getTeam(), false)))));
    					// ]new code
    					// ]rucivfan_bug_fix rbf[
    
    					if (pSelectionGroup->AI_isControlled())
    					{
    						if (pLoopUnit->canAttack())
    						{
    							if (gDLL->getFAStarIFace()->IsPathDest(finder, pToPlot->getX_INLINE(), pToPlot->getY_INLINE()))
    							{
    								if (pToPlot->isVisibleEnemyDefender(pLoopUnit))
    								{
    									iCost += (PATH_DEFENSE_WEIGHT * std::max(0, (200 - ((pLoopUnit->noDefensiveBonus()) ? 0 : pFromPlot->defenseModifier(pLoopUnit->getTeam(), false)))));
    									
    									if (!(pFromPlot->isCity()))
    									{
    										iCost += PATH_CITY_WEIGHT;
    									}
    
    									if (pFromPlot->isRiverCrossing(directionXY(pFromPlot, pToPlot)))
    									{
    										if (!(pLoopUnit->isRiver()))
    										{
    											iCost += (PATH_RIVER_WEIGHT * -(GC.getRIVER_ATTACK_MODIFIER()));
    											iCost += (PATH_MOVEMENT_WEIGHT * iMovesLeft);
    										}
    									}
    								}
    							}
    						}
    					}
    				}
    
    				if (iCost < iWorstCost)
    				{
    					// rucivfan_bug_fix rbf[
    					// old code[
    					//iWorstCost = iCost;
    					//iWorstMovesLeft = iMovesLeft;
    					//iWorstMax = iMax;
    					// ]old code
    
    					// new code[
    					iWorstCost = iCost;
    					//iWorstMovesLeft = iMovesLeft;
    					iWorstLostMove = iLostMove;
    					// ]new code
    					// ]rucivfan_bug_fix rbf[
    				}
    			}
    		}
    	}
    
    	FAssert(iWorstCost != MAX_INT);
    
    	iWorstCost += PATH_STEP_WEIGHT;
    
    	if ((pFromPlot->getX_INLINE() != pToPlot->getX_INLINE()) && (pFromPlot->getY_INLINE() != pToPlot->getY_INLINE()))
    	{
    		iWorstCost += PATH_STRAIGHT_WEIGHT;
    	}
    
    	FAssert(iWorstCost > 0);
    
    	return iWorstCost;
    }

  14. #15074
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Glaube nicht, dass man das testen kann, indem man die KI kämpfen lässt. Man kann die Bewegungen ja kaum sehen/nachvollziehen. Spiel am besten mal ein komplettes Spiel damit und ercheate dir dafür paar Kommandobeförderungen und die eine oder andere Einheit mit ignorierten Fortbewegungskosten auf Gelände.
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  15. #15075
    Kleinpferdefreund Avatar von T2-4B
    Registriert seit
    16.06.13
    Beiträge
    34
    Halli, hallo, hallöle. Folgendes Problem: Ich habe mir jetzt mal BASE runtergeladen und installiert, allerdings hört Civ jedesmal wenn ich den Mod laden will auf zu arbeiten. Also BTS schliesst sich es kommt das lade Fenster und dann die schöne Fehlermeldung dass Beyond The Sword aufgehört hat zu funktionieren. Ich hänge mal meinen BTS ordner an, habe eigentlich auch alle Schritte in der Installation beachten, mMn zumindest. Wäre cool wenn mir jemand helfen könnte.

    Edit: BTS hängt dann als Prozess noch rum , macht aber sonst nix mehr.
    Angehängte Grafiken Angehängte Grafiken

Seite 1005 von 1527 ErsteErste ... 55059059559951001100210031004100510061007100810091015105511051505 ... LetzteLetzte

Berechtigungen

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