Seite 103 von 180 ErsteErste ... 3539399100101102103104105106107113153 ... LetzteLetzte
Ergebnis 1.531 bis 1.545 von 2699

Thema: Der SDK-Fragen-Thread

  1. #1531
    Registrierter Benutzer Avatar von Monaldinio
    Registriert seit
    10.11.09
    Ort
    HRO
    Beiträge
    7.650
    Noch eine Kleinigkeit, im LateGame gibt es ja bei mir die Möglichkeit Orbitalstädte zu errichten, ich glaube die Ki hat da ein kleines Problem...zum einen weißt sie gar nicht wofür sie die braucht, zum anderen glaube ich das es auch mit der Produktion der erforderlichen Einheit hakt...in deren Einsatz auf Grund der unitAi. (Wo finde ich eigentlich diesen Code CvUnitAI oder so?!)
    Und zu guter Letzt vielleicht das größte Problem, in lateGame ist meist schon alles zugesiegelt, d.h auch die Kulturgrenzen haben sich so weit ausgedehnt das, selbst wenn noch platzt ist für Orbitalstädte kann der Spieler ja nicht innerhalb von feindlichen kulturgrenzen Städte gründen.
    Was ich aber bezogen auf die Orbitalstädte unlogisch finde da sie sich ja 200km über der Erde befinden...
    Also warum sollte Kulturgebiet auf dem Planeten das gründen von Orbitalstädten behindern?!?
    Könnte man das irgendwie aufheben und Bug nur die Regel "3 Felder entfernt von der nächsten Stadt" wirken lassen für orbitale Städte?!?
    Wahrscheinlich sehr umständlich oder?
    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...

  2. #1532
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Das mit der Kultur ist wohl nicht lösbar. Es gibt nur eine Ebene Kultur und die ist auf den Boden. Die Entfernungsregel kann man aufheben, aber was machst du mit der Kultur? Die Städte produzieren auch Kultur.

    Vor allem Bedenke, dass Städte über anderer Kultur auch die Grenzsperren durch Kultur gelten, wenn keine Offene Grenzen sind. Das ist schon ein wenig mehr Arbeit und für dich ein Mammutprojekt. Das ist keine Kleinigkeit.

  3. #1533
    Registrierter Benutzer Avatar von Monaldinio
    Registriert seit
    10.11.09
    Ort
    HRO
    Beiträge
    7.650
    Hab ich mir fast gedacht! Das hätten die Jungs von Firaxis aber Ahnen können das Leute wie ich daherkommen und 2 unabhängige Ebenen brauchen...
    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...

  4. #1534
    Registrierter Benutzer Avatar von Monaldinio
    Registriert seit
    10.11.09
    Ort
    HRO
    Beiträge
    7.650
    Zitat Zitat von rucivfan Beitrag anzeigen

    Mona:

    Dann wird nach einer nicht existierende Technologie gefragt. Ohne den Aufrufstack kann man dazu nichts sagen. Frage doch auch nicht nach den offensichtlichen.
    Hier der Call Stack

    > CvGameCoreDLL.dll!CvTeam::isHasTech(TechTypes eIndex=123) Line 5406 + 0x44 bytes C++
    CvGameCoreDLL.dll!CyTeam::isHasTech(int iIndex=123) Line 826 + 0x16 bytes C++
    CvGameCoreDLL.dll!boost:ython::detail::invoke<boost:ython::to_python_value<bool const &>,bool (__thiscall CyTeam::*)(int),boost:ython::arg_from_python<CyTeam &>,boost:ython::arg_from_python<int> >(boost:ython::detail::invoke_tag_<0,1> __formal={...}, const boost:ython::to_python_value<bool const &> & rc={...}, bool (int)* & f=0x0424eaf5, boost:ython::arg_from_python<CyTeam &> & tc={...}, boost:ython::arg_from_python<int> & ac0={...}) Line 88 + 0x1c bytes C++
    CvGameCoreDLL.dll!boost:ython::detail::caller_arity<2>::impl<bool (__thiscall CyTeam::*)(int),boost:ython::default_call_policies,boost::mpl::vector3<bool,CyTeam &,int> >::operator()(_object * args_=0x17394828, _object * __formal=0x00000000) Line 199 + 0x2f bytes C++
    CvGameCoreDLL.dll!boost:ython::objects::caller_py_function_impl<boost:ython::detail::caller<bool (__thiscall CyTeam::*)(int),boost:ython::default_call_policies,boost::mpl::vector3<bool,CyTeam &,int> > >::operator()(_object * args=0x17394828, _object * kw=0x00000000) Line 39 C++
    boost_python-vc71-mt-1_32.dll!1000ea8d()
    [Frames below may be incorrect and/or missing, no symbols loaded for boost_python-vc71-mt-1_32.dll]
    boost_python-vc71-mt-1_32.dll!1000eb45()
    boost_python-vc71-mt-1_32.dll!100136c1()
    msvcr71.dll!7c3416b3()
    python24.dll!1e05e359()
    python24.dll!1e029d49()
    python24.dll!1e05f62f()
    python24.dll!1e0193cc()
    python24.dll!1e0262a6()
    python24.dll!1e0193a1()
    Civ4BeyondSword.exe!008d94f6()
    Civ4BeyondSword.exe!008d9564()
    Civ4BeyondSword.exe!008d9704()
    Civ4BeyondSword.exe!004d4f5b()
    Civ4BeyondSword.exe!004da0e8()
    CvGameCoreDLL.dll!CvDllPythonEvents:ostEvent(CyArgsList & eventData={...}) Line 24 + 0x4a bytes C++
    CvGameCoreDLL.dll!CvDllPythonEvents::reportCityAcquired(PlayerTypes eOldOwner=2, PlayerTypes ePlayer=18, CvCity * pOldCity=0x31d09570, bool bConquest=true, bool bTrade=false) Line 416 C++
    CvGameCoreDLL.dll!CvEventReporter::cityAcquired(PlayerTypes eOldOwner=2, PlayerTypes iPlayer=18, CvCity * pCity=0x31d09570, bool bConquest=true, bool bTrade=false) Line 179 C++
    CvGameCoreDLL.dll!CvPlayer::acquireCity(CvCity * pOldCity=0x3c37a860, bool bConquest=true, bool bTrade=false, bool bUpdatePlotGroups=true) Line 2755 C++
    CvGameCoreDLL.dll!CvUnit::setXY(int iX=35, int iY=47, bool bGroup=true, bool bUpdate=true, bool bShow=false, bool bCheckPlotVisible=true) Line 11393 C++
    CvGameCoreDLL.dll!CvUnit::move(CvPlot * pPlot=0x20586bdc, bool bShow=true) Line 3669 C++
    CvGameCoreDLL.dll!CvSelectionGroup::groupMove(CvPlot * pPlot=0x20586bdc, bool bCombat=true, CvUnit * pCombatUnit=0x1c2ac150, bool bEndMove=false) Line 3759 C++
    CvGameCoreDLL.dll!CvUnit::updateCombat(bool bQuick=false) Line 1869 C++
    CvGameCoreDLL.dll!CvUnit::attack(CvPlot * pPlot=0x20586bdc, bool bQuick=false) Line 3521 C++
    CvGameCoreDLL.dll!CvSelectionGroup::groupAttack(int iX=35, int iY=47, int iFlags=0, bool & bFailedAlreadyFighting=false) Line 3674 C++
    CvGameCoreDLL.dll!CvSelectionGroup::continueMission(int iSteps=0) Line 1596 + 0x30 bytes C++
    CvGameCoreDLL.dll!CvSelectionGroup::startMission() Line 1567 C++
    CvGameCoreDLL.dll!CvSelectionGroup::activateHeadMission() Line 5269 C++
    CvGameCoreDLL.dll!CvSelectionGroup::insertAtEndMissionQueue(MissionData mission={...}, bool bStart=true) Line 5084 C++
    CvGameCoreDLL.dll!CvSelectionGroup:ushMission(MissionTypes eMission=MISSION_MOVE_TO, int iData1=35, int iData2=47, int iFlags=0, bool bAppend=false, bool bManual=false, MissionAITypes eMissionAI=-1, CvPlot * pMissionAIPlot=0x00000000, CvUnit * pMissionAIUnit=0x00000000) Line 495 C++
    CvGameCoreDLL.dll!CvUnitAI::AI_anyAttack(int iRange=1, int iOddsThreshold=20, int iMinStack=0, bool bAllowCities=true, bool bFollow=false) Line 16095 C++
    CvGameCoreDLL.dll!CvUnitAI::AI_barbAttackMove() Line 2122 + 0x12 bytes C++
    CvGameCoreDLL.dll!CvUnitAI::AI_update() Line 271 C++
    CvGameCoreDLL.dll!CvSelectionGroupAI::AI_update() Line 223 + 0x13 bytes C++
    CvGameCoreDLL.dll!CvPlayerAI::AI_unitUpdate() Line 1467 + 0xd bytes C++
    CvGameCoreDLL.dll!CvGame::updateMoves() Line 6827 + 0xd bytes C++
    CvGameCoreDLL.dll!CvGame::update() Line 2021 C++
    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...

  5. #1535
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Das gut an den Stack ist, man sieht, das ein Pythonaufruf keine Technologie-Enumeration überprüft auf Gültigkeit. Man sieht auch, dass dies im Python-event cityAcquired passiert. Suche dort einfach mal nach eine isHasTech aufruf.

    Überprüfe doch einfach auf Gültige Übergabewerte. (> -1 und < getNumTechInfos())

  6. #1536
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Code:
    template<class T>
    boost::python::list std_vector_to_py_list(const std::vector<T>& v)
    {
        boost::python::object get_iter = boost::python::iterator<std::vector<T> >();
        boost::python::object iter = get_iter(v);
        boost::python::list list(iter);
        return list;
    }
    
    boost::python::list CyUnit::getAvailableUpgrades(int /*UnitTypes*/ iUnit, int iCount)
    {
    	if(m_pUnit)
    	{
    		std::vector<UnitTypes> vctiUnitUpgrades;
    
    		if(m_pUnit->getAvailableUpgrades(vctiUnitUpgrades, (UnitTypes) iUnit, iCount))
    		{
    			//boost::python::list l;
    			//boost::python::object get_iter = boost::python::iterator<std::vector<UnitTypes> >();
    			//boost::python::object iter = get_iter(vctiUnitUpgrades);
    			//boost::python::list l(iter);
    			//return l;
    
    			//return std_vector_to_py_list(vctiUnitUpgrades);
    
    			boost::python::list list;
    			for (std::vector<UnitTypes>::iterator iter = vctiUnitUpgrades.begin(); iter != vctiUnitUpgrades.end(); ++iter) {
    				list.append(*iter);
    			}
    			return list;
    		}
    	}
    
    	return boost::python::list();
    }
    Beim wandeln einer vectors in ein Pythonelement gibt es die direkte Methode zum Hinzufügen in eine Boost Pythonliste, wie ich sie nutze. Im Internet habe ich noch eine andere Funktionsweiße gefunden, die oben auskommentiert wurde. Einmal habe ich das als Template und einmal als Versuch es direkt in meine Funktion einzufügen. Nur das Template ließ sich compilieren. Bei get_iter() bei der direkten Weiße ohne Template will der Compiler einen error-type übergeben haben. Weiß nicht, auf welche Errorstypen sich der Compiler bezieht. Zudem lässt sich die Funktion mit std_vector_to_py_list compilieren, aber er wandelt den c++ int nicht in Python um. Was ist der Unterschied? Genutzt wurde das template im Internet mit std::String als T.

    edit: Kann es sein, dass boost:ython::list list(iter); aus den template nur den vector selbst in ein Pythonobjekt packt, aber nicht seine Werte?
    Geändert von rucivfan (21. Mai 2014 um 09:13 Uhr)

  7. #1537
    Registrierter Benutzer Avatar von Monaldinio
    Registriert seit
    10.11.09
    Ort
    HRO
    Beiträge
    7.650
    Ich habe hier wieder zwei Fehlermeldungen aus dem debugingprozess bekommen..


    1)

    Assert Failed

    File: CvTeam.cpp
    Line: 1457
    Expression: !(AI_isSneakAttackPreparing(eTeam))
    Message:

    ---------------------------------------------------------


    Code:
    if (NO_WARPLAN != eWarPlan)
    		{
    			AI_setWarPlan(eTeam, eWarPlan);
    		}
    
    		FAssert(!(AI_isSneakAttackPreparing(eTeam)));        <<<<<
    		if ((AI_getWarPlan(eTeam) == NO_WARPLAN) || AI_isSneakAttackPreparing(eTeam))
    		{
    			if (isHuman())
    			{
    				AI_setWarPlan(eTeam, WARPLAN_TOTAL);
    			}
    			else if (isMinorCiv() || isBarbarian() || (GET_TEAM(eTeam).getAtWarCount(true) == 1))
    			{
    				AI_setWarPlan(eTeam, WARPLAN_LIMITED);
    			}
    			else
    			{
    				AI_setWarPlan(eTeam, WARPLAN_DOGPILE);
    			}
    		}
    
    		GC.getMapINLINE().verifyUnitValidPlot();
    
    		for (iI = 0; iI < MAX_PLAYERS; iI++)
    		{
    			if (GET_PLAYER((PlayerTypes)iI).getTeam() == getID())
    			{
    				GET_PLAYER((PlayerTypes)iI).verifyUnitStacksValid();
    			}
    		}
    
    		GC.getGameINLINE().AI_makeAssignWorkDirty();

    2)


    Assert Failed

    File: CvTeamAI.cpp
    Line: 4969
    Expression: !AI_shareWar((TeamTypes)iI)
    Message:

    ----------------------------------------------------------


    Code:
    if (((GET_TEAM((TeamTypes)iI).getDefensivePower() * 3) / 2) < iDogpilePower)
    												{
    													iValue = AI_startWarVal((TeamTypes)iI);
    
    													if (iValue > iBestValue)
    													{
    														FAssert(!AI_shareWar((TeamTypes)iI));     <<<<<
    														iBestValue = iValue;
    														eBestTeam = ((TeamTypes)iI);
    													}
    Call Stacks habe ich leider nicht...
    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...

  8. #1538
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    FAssert bedeúten nicht zwangsweiße Fehler, wenn sie falsch gesetzt werden. Es ist aber schon verwunderlich, das diese Fassert ausgelöst werden. Ich kenne einige Unzulänglichkeiten im SDK, aber das ist mir noch nicht vorgekommen.

    Da es sich hier um KI-Code handelt, würde ich die FAsserts erstmal ignorieren. Den KI-Code ändert man nicht mal einfach so. Es müssen dort immer abhängigkeiten berücksichtigt werden. Im schlimmsten Fall gibt es eine endlose Iteration.

  9. #1539
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von rucivfan Beitrag anzeigen
    edit: Kann es sein, dass boost:ython::list list(iter); aus den template nur den vector selbst in ein Pythonobjekt packt, aber nicht seine Werte?
    Der Vector wird nicht verwendet, sondern es werden (C++)-Iteratoren erzeugt mit v.begin() und v.end() (v ist der Vector). Die Elemente, die von diesen Iterator zurückgegeben werden, müssen zu einen Python-Typ konvertiert werden können. Vielleicht hilft es, wenn du CyEnumsInterface.h inkludierst. Boost sollte dann automatisch die den Enum-Typ umwandeln können.

    Auf die Idee mit dem Iterator bin ich gar nicht gekommen. Das einer Liste kannst du auch gleich den Iterator zurückgeben. Wenn man auf Python-Ebene wirklich eine Liste braucht, dann kann man mit list(iterator) ja einfach eine Liste bekommen.

  10. #1540
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Ich probiere es aus. Es gibt aber nur eine CyEnumsInterface.cpp.

    edit:

    Code:
    1>CyUnitInterface1.obj : error LNK2005: "void __cdecl CyEnumsPythonInterface(void)" (?CyEnumsPythonInterface@@YAXXZ) already defined in CyEnumsInterface.obj
    1>CyUnitInterface1.obj : warning LNK4006: "void __cdecl CyEnumsPythonInterface(void)" (?CyEnumsPythonInterface@@YAXXZ) already defined in CyEnumsInterface.obj; second definition ignored
    1>     Creating library Release\CvGameCoreDLL.lib and object Release\CvGameCoreDLL.exp
    Geht wohl nicht so einfach.

  11. #1541
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Stimmt...
    Dann bringt es nichts, das zu inkludieren. Im Gegenteil, der Linker wird meckern.

    Edit: Siehe dein Edit...

  12. #1542
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Was genau kommt denn als Kompiler-Fehler raus, wenn du das auskommentiere verwendest?

  13. #1543
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Python kommt mit c++ int nicht klar, sagt die Meldung aus.

    edit: siehe Bild im Anhang.

    falsche Fehlermeldung. Das stammt von den Fehler, als ich den Vector als ganzes reingepackt hatte.
    Geändert von rucivfan (21. Mai 2014 um 12:20 Uhr)

  14. #1544
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Code:
    boost::python::list CyUnit::getAvailableUpgrades(int /*UnitTypes*/ iUnit, int iCount)
    {
    	if(m_pUnit)
    	{
    		std::vector<UnitTypes> vctiUnitUpgrades;
    
    		if(m_pUnit->getAvailableUpgrades(vctiUnitUpgrades, (UnitTypes) iUnit, iCount))
    		{
    			//boost::python::list l;
    			boost::python::object get_iter = boost::python::iterator<std::vector<UnitTypes> >();
    			boost::python::object iter = get_iter(vctiUnitUpgrades);
    			boost::python::list l(iter);
    
    			//return std_vector_to_py_list(vctiUnitUpgrades);
    
    			//boost::python::list list;
    			//for (std::vector<UnitTypes>::iterator iter = vctiUnitUpgrades.begin(); iter != vctiUnitUpgrades.end(); ++iter) {
    			//	list.append(*iter);
    			//}
    			//return list;
    		}
    	}
    
    	return boost::python::list();
    }
    Habe es jetzt mal damit probiert. Ließ sich ohne morren compilieren, auch wenn angeblich get_iter noch einen Übergabewert bräuchte, laut VS 2010.

    Achtung Spoiler:
    Bild


    Python kommt jetzt mit den Enumeration nicht klar. Wahrscheinlich muss das auch gewrappt werden, was ja leider nicht über den Import geht.

    python::enum_<UnitTypes>("UnitTypes")
    .value("NO_UNIT", NO_UNIT)
    ;
    Ein import würde auch nichts bringen, oder?
    Angehängte Grafiken Angehängte Grafiken
    Geändert von rucivfan (21. Mai 2014 um 12:17 Uhr)

  15. #1545
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Ich weis gerade nicht, wo der Fehler liegt. Eigentlich sollte das gehen... Muss ich nacher mal an einen Beispiel ausprobieren.

Seite 103 von 180 ErsteErste ... 3539399100101102103104105106107113153 ... LetzteLetzte

Berechtigungen

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