Seite 122 von 219 ErsteErste ... 2272112118119120121122123124125126132172 ... LetzteLetzte
Ergebnis 1.816 bis 1.830 von 3275

Thema: PAE V Patch 4 (01.09.2018)

  1. #1816
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.446
    @AI_Value:

    PHP-Code:


    int CvPlayerAI
    ::AI_bonusTradeVal(BonusTypes eBonusPlayerTypes ePlayerint iChange) const
    {
        
    int iValue;

        
    FAssertMsg(ePlayer != getID(), "shouldn't call this function on ourselves");

        
    iValue AI_bonusVal(eBonusiChange);

        
    iValue *= ((std::min(getNumCities(), GET_PLAYER(ePlayer).getNumCities()) + 3) * 30);
        
    iValue /= 100;

        
    iValue *= std::max(0, (GC.getBonusInfo(eBonus).getAITradeModifier() + 100));
        
    iValue /= 100;

        if (
    GET_TEAM(GET_PLAYER(ePlayer).getTeam()).isVassal(getTeam()) && !GET_TEAM(GET_PLAYER(ePlayer).getTeam()).isCapitulated())
        {
            
    iValue /= 2;
        }

        return (
    iValue GC.getDefineINT("PEACE_TREATY_LENGTH"));
    }


    DenialTypes CvPlayerAI::AI_bonusTrade(BonusTypes eBonusPlayerTypes ePlayer) const
    {
        
    PROFILE_FUNC();

        
    AttitudeTypes eAttitude;
        
    bool bStrategic;
        
    int iIiJ;

        
    FAssertMsg(ePlayer != getID(), "shouldn't call this function on ourselves");

        if (
    isHuman() && GET_PLAYER(ePlayer).isHuman())
        {
            return 
    NO_DENIAL;
        }

        if (
    GET_TEAM(getTeam()).isVassal(GET_PLAYER(ePlayer).getTeam()))
        {
            return 
    NO_DENIAL;
        }

        if (
    atWar(getTeam(), GET_PLAYER(ePlayer).getTeam()))
        {
            return 
    NO_DENIAL;
        }

        if (
    GET_PLAYER(ePlayer).getTeam() == getTeam())
        {
            return 
    NO_DENIAL;
        }

        if (
    GET_PLAYER(ePlayer).getNumAvailableBonuses(eBonus) > && GET_PLAYER(ePlayer).AI_corporationBonusVal(eBonus) <= 0)
        {
            return (
    GET_PLAYER(ePlayer).isHuman() ? DENIAL_JOKING DENIAL_NO_GAIN);
        }

        if (
    isHuman())
        {
            return 
    NO_DENIAL;
        }

        if (
    GET_TEAM(getTeam()).AI_getWorstEnemy() == GET_PLAYER(ePlayer).getTeam())
        {
            return 
    DENIAL_WORST_ENEMY;
        }

        if (
    AI_corporationBonusVal(eBonus) > 0)
        {
            return 
    DENIAL_JOKING;
        }

        
    bStrategic false;

        for (
    iI 0iI GC.getNumUnitInfos(); iI++)
        {
            if (
    GC.getUnitInfo((UnitTypesiI).getPrereqAndBonus() == eBonus)
            {
                
    bStrategic true;
            }

            for (
    iJ 0iJ GC.getNUM_UNIT_PREREQ_OR_BONUSES(); iJ++)
            {
                if (
    GC.getUnitInfo((UnitTypesiI).getPrereqOrBonuses(iJ) == eBonus)
                {
                    
    bStrategic true;
                }
            }
        }

        for (
    iI 0iI GC.getNumBuildingInfos(); iI++)
        {
            if (
    GC.getBuildingInfo((BuildingTypesiI).getPrereqAndBonus() == eBonus)
            {
                
    bStrategic true;
            }

            for (
    iJ 0iJ GC.getNUM_BUILDING_PREREQ_OR_BONUSES(); iJ++)
            {
                if (
    GC.getBuildingInfo((BuildingTypesiI).getPrereqOrBonuses(iJ) == eBonus)
                {
                    
    bStrategic true;
                }
            }
        }

        
    // XXX marble and stone???

        
    eAttitude AI_getAttitude(ePlayer);

        if (
    bStrategic)
        {
            if (
    eAttitude <= GC.getLeaderHeadInfo(getPersonalityType()).getStrategicBonusRefuseAttitudeThreshold())
            {
                return 
    DENIAL_ATTITUDE;
            }
        }

        if (
    GC.getBonusInfo(eBonus).getHappiness() > 0)
        {
            if (
    eAttitude <= GC.getLeaderHeadInfo(getPersonalityType()).getHappinessBonusRefuseAttitudeThreshold())
            {
                return 
    DENIAL_ATTITUDE;
            }
        }

        if (
    GC.getBonusInfo(eBonus).getHealth() > 0)
        {
            if (
    eAttitude <= GC.getLeaderHeadInfo(getPersonalityType()).getHealthBonusRefuseAttitudeThreshold())
            {
                return 
    DENIAL_ATTITUDE;
            }
        }

        return 
    NO_DENIAL;


  2. #1817
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.446
    rucivfan: also müssen wir gucken, dass kein Zufall rein lokal ausgelöst wird? Bzw. bei Spielerentscheidungen irgendwie das Ergebnis kommunizieren?

  3. #1818
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    Zitat Zitat von Flunky Beitrag anzeigen
    rucivfan: also müssen wir gucken, dass kein Zufall rein lokal ausgelöst wird? Bzw. bei Spielerentscheidungen irgendwie das Ergebnis kommunizieren?
    Ja genau! Danach muss man suchen.

  4. #1819
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    @ruci:
    stimmt.. die Zeitverschiebung... also, wenn ich einmal um 3 Uhr in der Früh ein Spiel starten sollte, dann nicht mit den Amerikanern! Das Problem hatte ich bisjetzt nicht und ich kann dir versprechen: werd ich nie haben

    Aber es stimmt... Leute, die Überkontinental spielen wollen, hätten ein Problem. die idee es an einer utc zu verknüpfen ist aber wirklich ne bessere Variante! Hast Recht.

    Wegen dem syncron random hab ichs ja auch so beschrieben, wie du meinst. hast meinen Artikel scheinbar nur überflogen. Deshalb NUR sorenRand für globale Ereignisse nutzen und mapRand für lokale. Oder umgekehrt. Was aber bei mapRand nix bringt, wenn man eingestellte zufallsseeds haben möchte, denn ich kann mir vorstellen, dass civ bei mapRand die Karte als Seed nutzt. wobei ich aber nicht weiß, wie sich der Seed zusammensetzt. Aber egal.
    Conclusio: keine random befehle, wo der seed zurückgesetzt wird, global und lokal mischen

    Nun. Hilft mir trotzdem nix, weil ich das nicht mache. Ich nutze ja immer denselben Seed, den ich am Start des Spiels definiere.

    Aber wenn deine Zitat der myRandom Funktion der aktuelle ist, dann ist mir klar, warum ein OOS Fehler kommt. Ich hab ja den dritten Parameter bei den ausführenden Befehlen rausgegeben.... muss zuhause nachsehn, ob ich wohl vergessen hab rauszunehmen.

    Flunky: Ob der Sklave jetzt an Malaria oder Olivenölüberdosis stirbt, braucht NICHT weiterkommuniziert werden! Das kann ruhig lokal bleiben! keine Sorge. Der Fakt dass der Sklave stirbt muss weitergegeben werden, aber das sollte ja unit.kill machen....
    da kommts mir grad... du hast ja teilweise meine mission-kill Befehle teilweise ersetzt mit dem gewöhnlichen unit.kill befehl... oh... vielleicht liegt da der hund begraben?
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  5. #1820
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    Zitat Zitat von Flunky Beitrag anzeigen
    @AI_Value:

    int CvPlayerAI::AI_bonusTradeVal(BonusTypes eBonus, PlayerTypes ePlayer, int iChange) const
    Da hätte man auch überall ein break einbauen können und danach überall ein if not bStrategic...
    naja... betrifft eh keine Rundenzeit (denk ich).


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

    Wer kann oder wer möchte, dem würde ich gern eine deutsch -> englische Übersetzung ans Herz legen

    http://www.voak.at/PAE/pae_pedias.php

    und zwar "Suche nach": Patch 4

    da sollte ein deutscher Text zu Patch 4 sein, der liebend gern ins englische übersetzt werden möchte.

    generell sei gesagt, es fehlen noch einige übersetzte Pedias und die deutschen Pedias, die noch fehlen...tja.. da find ich die Stellen aus den Büchern nicht mehr, wo ich das rausschreiben wollte wird von mir nachgereicht....
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  6. #1821
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    Zitat Zitat von Pie Beitrag anzeigen
    Der Fakt dass der Sklave stirbt muss weitergegeben werden, aber das sollte ja unit.kill machen....
    Der kill-Befehl tötet nur lokal und muss bei jeden Spieler parallel aufgerufen werden.

    Zitat Zitat von Pie Beitrag anzeigen
    Wegen dem syncron random hab ichs ja auch so beschrieben, wie du meinst. hast meinen Artikel scheinbar nur überflogen. Deshalb NUR sorenRand für globale Ereignisse nutzen und mapRand für lokale. Oder umgekehrt. Was aber bei mapRand nix bringt, wenn man eingestellte zufallsseeds haben möchte, denn ich kann mir vorstellen, dass civ bei mapRand die Karte als Seed nutzt. wobei ich aber nicht weiß, wie sich der Seed zusammensetzt. Aber egal.
    Conclusio: keine random befehle, wo der seed zurückgesetzt wird, global und lokal mischen
    Ich habe deinen Text nicht überflogen, sondern langsam und genau gelesen. Kann sein, dass wir uns nur irgendwo missverstehen. Nach meinen wissen, ist mapRand nur der Zufallswert, der für die Kartengestaltung herangezogen wird. Nach den Karten generieren hat er praktisch keine Verwendung mehr. Der BTS Code nutzt maprand noch für die Bauleistenauswahl, wenn ein Bauprojekt fertig ist, aber sonst nirgends mehr. Wahrscheinlich wird der Zufallswert auf die gleiche Weise wie sorenrand gesetzt.

    Zitat Zitat von Pie Beitrag anzeigen
    Nun. Hilft mir trotzdem nix, weil ich das nicht mache. Ich nutze ja immer denselben Seed, den ich am Start des Spiels definiere.
    Das schon, aber du könntest von einen Spieler den Seed an alle senden und damit den gleichen Startseed bei allen setzen. Damit gäbe es kein Mitternachtsproblem.

    Einfach per CyMessageControl().sendModNetMessage an alle Spieler vom Mensch mit niedrigster ID senden und mit onModNetMessage setzen, das müsste doch gehen?

    Zitat Zitat von Pie Beitrag anzeigen
    Aber wenn deine Zitat der myRandom Funktion der aktuelle ist, dann ist mir klar, warum ein OOS Fehler kommt. Ich hab ja den dritten Parameter bei den ausführenden Befehlen rausgegeben.... muss zuhause nachsehn, ob ich wohl vergessen hab rauszunehmen.
    Habe 4.9 vorher installiert.
    Geändert von rucivfan (30. Mai 2017 um 17:07 Uhr)

  7. #1822
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.446
    Also den Text-Parameter hast du in den Aufrufen noch drin. Den würd ich auch mal mit Inhalt befüllen und loggen, dann sehen wir nämlich im Log gleich, welcher Aufruf OOS verursacht.

    Bzw. würd ich tatsächlich nochmal myRandom als Wrapper für's SorenRandNum nehmen und keinen eigenen Seed setzen. Wenn das kill nur lokal ist, dürften wir den Übeltäter ja an anderer Stelle gefunden haben. Klar, dass dann alle weiteren Entscheidungen OOS sind, wenn ne Einheit mal da ist und mal nicht.

    @ruciv: wie kill ich denn ne Einheit richtig? Ich seh in der DLL immer nur pUnit->kill(false)

    €: hier wird doch das ganze Gerappel mit EventReporter und so abgehandelt?
    PHP-Code:

    void CvUnit
    ::kill(bool bDelayPlayerTypes ePlayer)
    {
        
    PROFILE_FUNC();
        
        
    CLLNode<IDInfo>* pUnitNode;
        
    CvUnitpTransportUnit;
        
    CvUnitpLoopUnit;
        
    CvPlotpPlot;
        
    CvWString szBuffer;
        
    PlayerTypes eOwner;
        
    PlayerTypes eCapturingPlayer;
        
    UnitTypes eCaptureUnitType;

        
    pPlot plot();
        
    FAssertMsg(pPlot != NULL"Plot is not assigned a valid value");

        static 
    std::vector<IDInfooldUnits;
        
    oldUnits.clear();
        
    pUnitNode pPlot->headUnitNode();

        while (
    pUnitNode != NULL)
        {
            
    oldUnits.push_back(pUnitNode->m_data);
            
    pUnitNode pPlot->nextUnitNode(pUnitNode);
        }

        for (
    uint i 0oldUnits.size(); i++)
        {
            
    pLoopUnit = ::getUnit(oldUnits[i]);
            
            if (
    pLoopUnit != NULL)
            {
                if (
    pLoopUnit->getTransportUnit() == this)
                {
                    
    //save old units because kill will clear the static list
                    
    std::vector<IDInfotempUnits oldUnits;

                    if (
    pPlot->isValidDomainForLocation(*pLoopUnit))
                    {
                        
    pLoopUnit->setCapturingPlayer(NO_PLAYER);
                    }
                    
                    
    pLoopUnit->kill(falseePlayer);

                    
    oldUnits tempUnits;
                }
            }
        }

        if (
    ePlayer != NO_PLAYER)
        {
            
    CvEventReporter::getInstance().unitKilled(thisePlayer);

            if (
    NO_UNIT != getLeaderUnitType())
            {
                for (
    int iI 0iI MAX_PLAYERSiI++)
                {
                    if (
    GET_PLAYER((PlayerTypes)iI).isAlive())
                    {
                        
    szBuffer gDLL->getText("TXT_KEY_MISC_GENERAL_KILLED"getNameKey());
                        
    gDLL->getInterfaceIFace()->addMessage(((PlayerTypes)iI), falseGC.getEVENT_MESSAGE_TIME(), szBufferGC.getEraInfo(GC.getGameINLINE().getCurrentEra()).getAudioUnitDefeatScript(), MESSAGE_TYPE_MAJOR_EVENT);
                    }
                }
            }
        }

        if (
    bDelay)
        {
            
    startDelayedDeath();
            return;
        }

        if (
    isMadeAttack() && nukeRange() != -1)
        {
            
    CvPlotpTarget getAttackPlot();
            if (
    pTarget)
            {
                
    pTarget->nukeExplosion(nukeRange(), this);
                
    setAttackPlot(NULLfalse);
            }
        }

        
    finishMoves();

        if (
    IsSelected())
        {
            if (
    gDLL->getInterfaceIFace()->getLengthSelectionList() == 1)
            {
                if (!(
    gDLL->getInterfaceIFace()->isFocused()) && !(gDLL->getInterfaceIFace()->isCitySelection()) && !(gDLL->getInterfaceIFace()->isDiploOrPopupWaiting()))
                {
                    
    GC.getGameINLINE().updateSelectionList();
                }

                if (
    IsSelected())
                {
                    
    gDLL->getInterfaceIFace()->setCycleSelectionCounter(1);
                }
                else
                {
                    
    gDLL->getInterfaceIFace()->setDirty(SelectionCamera_DIRTY_BITtrue);
                }
            }
        }

        
    gDLL->getInterfaceIFace()->removeFromSelectionList(this);

        
    // XXX this is NOT a hack, without it, the game crashes.
        
    gDLL->getEntityIFace()->RemoveUnitFromBattle(this);

        
    FAssertMsg(!isCombat(), "isCombat did not return false as expected");

        
    pTransportUnit getTransportUnit();

        if (
    pTransportUnit != NULL)
        {
            
    setTransportUnit(NULL);
        }

        
    setReconPlot(NULL);
        
    setBlockading(false);

        
    FAssertMsg(getAttackPlot() == NULL"The current unit instance's attack plot is expected to be NULL");
        
    FAssertMsg(getCombatUnit() == NULL"The current unit instance's combat unit is expected to be NULL");

        
    GET_TEAM(getTeam()).changeUnitClassCount((UnitClassTypes)m_pUnitInfo->getUnitClassType(), -1);
        
    GET_PLAYER(getOwnerINLINE()).changeUnitClassCount((UnitClassTypes)m_pUnitInfo->getUnitClassType(), -1);

        
    GET_PLAYER(getOwnerINLINE()).changeExtraUnitCost(-(m_pUnitInfo->getExtraCost()));

        if (
    m_pUnitInfo->getNukeRange() != -1)
        {
            
    GET_PLAYER(getOwnerINLINE()).changeNumNukeUnits(-1);
        }

        if (
    m_pUnitInfo->isMilitarySupport())
        {
            
    GET_PLAYER(getOwnerINLINE()).changeNumMilitaryUnits(-1);
        }

        
    GET_PLAYER(getOwnerINLINE()).changeAssets(-(m_pUnitInfo->getAssetValue()));

        
    GET_PLAYER(getOwnerINLINE()).changePower(-(m_pUnitInfo->getPowerValue()));

        
    GET_PLAYER(getOwnerINLINE()).AI_changeNumAIUnits(AI_getUnitAIType(), -1);

        
    eOwner getOwnerINLINE();
        
    eCapturingPlayer getCapturingPlayer();
        
    eCaptureUnitType = ((eCapturingPlayer != NO_PLAYER) ? getCaptureUnitType(GET_PLAYER(eCapturingPlayer).getCivilizationType()) : NO_UNIT);

        
    setXY(INVALID_PLOT_COORDINVALID_PLOT_COORDtrue);

        
    joinGroup(NULLfalsefalse);

        
    CvEventReporter::getInstance().unitLost(this);

        
    GET_PLAYER(getOwnerINLINE()).deleteUnit(getID());

        if ((
    eCapturingPlayer != NO_PLAYER) && (eCaptureUnitType != NO_UNIT) && !(GET_PLAYER(eCapturingPlayer).isBarbarian()))
        {
            if (
    GET_PLAYER(eCapturingPlayer).isHuman() || GET_PLAYER(eCapturingPlayer).AI_captureUnit(eCaptureUnitTypepPlot) || == GC.getDefineINT("AI_CAN_DISBAND_UNITS"))
            {
                
    CvUnitpkCapturedUnit GET_PLAYER(eCapturingPlayer).initUnit(eCaptureUnitTypepPlot->getX_INLINE(), pPlot->getY_INLINE());

                if (
    pkCapturedUnit != NULL)
                {
                    
    szBuffer gDLL->getText("TXT_KEY_MISC_YOU_CAPTURED_UNIT"GC.getUnitInfo(eCaptureUnitType).getTextKeyWide());
                    
    gDLL->getInterfaceIFace()->addMessage(eCapturingPlayertrueGC.getEVENT_MESSAGE_TIME(), szBuffer"AS2D_UNITCAPTURE"MESSAGE_TYPE_INFOpkCapturedUnit->getButton(), (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), pPlot->getX_INLINE(), pPlot->getY_INLINE());

                    
    // Add a captured mission
                    
    CvMissionDefinition kMission;
                    
    kMission.setMissionTime(GC.getMissionInfo(MISSION_CAPTURED).getTime() * gDLL->getSecsPerTurn());
                    
    kMission.setUnit(BATTLE_UNIT_ATTACKERpkCapturedUnit);
                    
    kMission.setUnit(BATTLE_UNIT_DEFENDERNULL);
                    
    kMission.setPlot(pPlot);
                    
    kMission.setMissionType(MISSION_CAPTURED);
                    
    gDLL->getEntityIFace()->AddMission(&kMission);

                    
    pkCapturedUnit->finishMoves();

                    if (!
    GET_PLAYER(eCapturingPlayer).isHuman())
                    {
                        
    CvPlotpPlot pkCapturedUnit->plot();
                        if (
    pPlot && !pPlot->isCity(false))
                        {
                            if (
    GET_PLAYER(eCapturingPlayer).AI_getPlotDanger(pPlot) && GC.getDefineINT("AI_CAN_DISBAND_UNITS"))
                            {
                                
    pkCapturedUnit->kill(false);
                            }
                        }
                    }
                }
            }
        }

    €^2: teilweise hatten wir COMMAND_DELETE, das ist vielleicht etwas sicherer, weil vorher noch überprüft wird, ob die Einheit grad in nem Kampf ist
    Geändert von Flunky (30. Mai 2017 um 18:25 Uhr)

  8. #1823
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    Zitat Zitat von Flunky Beitrag anzeigen
    @ruciv: wie kill ich denn ne Einheit richtig? Ich seh in der DLL immer nur pUnit->kill(false)
    Es gibt dafür keinen fertigen Aufruf. Ihr müsstet einen mit CyMessageControl().sendModNetMessage und onModNetMessage erstellen. Alle kill-Aufrufe im SDK-Code sind nur die Folge anderer synchronisierter Befehlsketten.

    COMMAND_DELETE dürfte die beste alternative Wahl sein. Commands werden immer synchron bei allen ausgeführt.

  9. #1824
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.446
    Auch wenn ich den per pUnit.doCommand() aufrufe?

  10. #1825
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    Dachte an sendDoCommand. Das man das lokal in Python aufrufen kann, habe ich gerade nicht bedacht. Nein, pUnit.doCommand() geht nicht direkt.

    Habe gerade nachgesehen, dass sendDoCommand doch nur für den aktiven Spieler funktioniert. (indirekt über selectionListGameNetMessage aufrufbar)
    Geändert von rucivfan (30. Mai 2017 um 19:32 Uhr)

  11. #1826
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.446
    €: unfug

    €2: also so?
    gc.getGame().selectionListGameNetMessage(GAMEMESSAGE_DO_COMMAND, COMMAND_DELETE, pUnit.getOwner(), pUnit.getID())
    Geändert von Flunky (30. Mai 2017 um 19:18 Uhr)

  12. #1827
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    Ich meinte nicht, dass man das nutzen sollte. Das kann man nur für den aktiven Spieler ausführen und nicht für die KI. Auf einen PB Server geht das auch nicht. Vom Syntax her sieht das in Ordnung aus. Die letzten beiden Übergabewerte bleiben aber ohne Auswirkung bzw sind sie für andere Übergabewerte bestimmt.

    Geht wohl nur mit CyMessageControl().sendModNetMessage und onModNetMessage 100% sicher.

    Ich muss aber auch sagen, dass ich keine Ahnung habe, um welchen Sklaven Code es geht und was der macht.

    edit: Wenn der Sklavencode unter onModNetMessage in der PAE_Sklaven.py steht, kann man unit.kill oder unit.doDommand nutzen. Das wird parallel bei allen Spielern aufgerufen.
    Geändert von rucivfan (30. Mai 2017 um 19:55 Uhr)

  13. #1828
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.446
    Ok, dann setz ich jetzt doCommand(CommandTypes.COMMAND_DELETE, -1, -1) statt kill und guck in allen 89 Fällen, ob das in nem synchronisierten Pfad steht^^

  14. #1829
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.446
    Ich geh davon aus, dass die hier alle synchron sind, richtig?
    onBeginPlayerTurn
    onCombatResult
    onUnitMove
    onUnitBuildImprovement
    onCityDoTurn
    onEndGameTurn

    AI_unitUpdate

    Das hier könnte kritisch sein:
    onUnitSelected -> PAE_Barbaren.onUnitSelected

    Das wären alle Funktionen, aus denen heraus wir Einheiten killen

  15. #1830
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.016
    onSelected dürfte das einzigste kritische sein. Das wird nur lokal ausgeführt.
    Geändert von rucivfan (30. Mai 2017 um 21:28 Uhr)

Seite 122 von 219 ErsteErste ... 2272112118119120121122123124125126132172 ... LetzteLetzte

Berechtigungen

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