Seite 2 von 180 ErsteErste 1234561252102 ... LetzteLetzte
Ergebnis 16 bis 30 von 2699

Thema: Der SDK-Fragen-Thread

  1. #16
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Warum sollte Civ da Unterschiede machen? Denke mal, dass Inselwege nur prozentuale Boni darauf geben.

    Hab jetzt auch ne Python-Lösung gefunden, muss ich aber auch noch testen.
    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. #17
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Ich meine ich hätte mal gelesen, TradeRoutes gäbe es nur international von Hauptstadt zu Hauptstadt. Die normalen innerhalb deiner eigenen Städte zur Verteilung der Resourcen etc., zählen mWn nicht zu den hier behandelten TradeRoutes. Sonst würde der PlayerTypes Parameter bei isTrade ja auch wenig Sinn machen.

  3. #18
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Irgendwo muss man aber doch Zugriff auf sämtliche oder auf die anderen haben.
    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. #19
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Keine Ahnung, vielleicht irre ich mich ja auch.

  5. #20
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Also die Python Lösung geht schon mal nicht.
    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. #21
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Hab mich mal ein bisschen durchgewühlt. Hier meine (subjektiven) Erkenntnisse zu den Civ4 (Handels-)Routen:
    Es gibt zwei Arten von Handel, internationalen Handel (nur zwischen Hauptstädten) und "nationalen" Handel zur Verteilung der Resourcen innerhalb des eigenen Gebiets.
    Der internationale Handel wird im Stadtbildschirm oben links angezeigt, er gibt standardmäßig nur Gold, ist aber leicht wie oben gezeigt zu ändern.
    Der 'nationale' Handel zum internen Austausch von Rohstoffen findet über so genannte "PlotGroups" statt. Jedesmal wenn eine Straße/Schiene gebaut wird, wird dieses Feld zu einer Plotgruppe hinzugefügt. Eine Stadt lässt bei der Gründung automatisch eine Straße/Schiene entstehen, wodurch dieses Feld auch zu der Gruppe hinzugefügt wird. Ist nun auf einem dieser Felder eine bestimmte Resource verfügbar, verfügen automatisch alle Felder dieser Gruppe über dieselbe Resource. Desweiteren gibt es noch eine Gruppe für Küsten, bzw. eine für Meeresfelder, glaube ich. Diese Gruppen sind nur innerhalb der eigenen Grenzen gültig. (Bei den Wassergruppen bin ich mir da nicht so sicher.) Folglich muss jede Zivilisation ihre eigenen Gruppen haben.

    Ich hoffe ich konnte etwas 'aufklären'.

  7. #22
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    D.h. man bekommt keinen Kommerz für eigene Städte, sondern nur, wenn mindestens ein weiterer Gegner im Spiel ist?
    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)

  8. #23
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Nach meinem bisherigen Erkenntnisstand, . Ich lasse mich aber gerne eines besseren belehren. Aber, wer spielt schon ohne Gegner?

  9. #24
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Ich hab jetzt aus der Star Trek Mod ne Trait Info geklaut, der den Zugriff allerdings mit Python regelt aufgrund eines Gebäudes. Den speziellen Code hab ich entfernt. Er legt die Boni bei Rundenbeginn fest. Übrig geblieben ist:

    PHP-Code:
    // Cybah - BASE: TradeRouteYieldChange START
        
    CvPlayerpPlayer GET_PLAYER(getOwner());
        
    int iYield 0;
        for (
    int iYieldLoop 0iYieldLoop NUM_YIELD_TYPESiYieldLoop++)
        {
            
    iYield 0;

            
    //Traits with trade routes yields
            
    for (int iTrait 0iTrait GC.getNumTraitInfos(); iTrait++)
            {
                
    TraitTypes eTrait = (TraitTypes)iTrait;
                if (
    pPlayer.hasTrait(eTrait))
                {
                    for (
    int iTradeCity 0iTradeCity getTradeRoutes(); iTradeCity++)
                    {
                        
    CvCitypTradeCity getTradeCity(iTradeCity);
                        if (
    pTradeCity != NULL)
                        {
                            
    iYield += GC.getTraitInfo(eTrait).getTradeRouteYieldChanges(iYieldLoop);
                        }
                    }
                }
            }

        }
    // Cybah - BASE: TradeRouteYieldChange END 

    Wenn ich wüsste, wie man den Traitbonus in updateTradeRoutes einbaut, dann kann der ganze Mist hier weg, der überprüft ja jede Runde jede einzelne Handelsroute. Hast ne Idee? Geht im Prinzip nur um "GC.getTraitInfo(eTrait).getTradeRouteYieldChanges".
    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)

  10. #25
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Vermutlich muss man

    PHP-Code:
        for (iI 0iI NUM_YIELD_TYPESiI++)
        {
            
    setTradeYield(((YieldTypes)iI), calculateTradeYield(((YieldTypes)iI), iTradeProfit)); // XXX could take this out if handled when CvPlotGroup changes...
        

    entsprechend verändern. oder calculateTradeYield. irgendwie gibts tausend funktionen.


    edit: vermutlich tatsächlich eher hier oder?

    PHP-Code:
    int CvCity::calculateTradeYield(YieldTypes eIndexint iTradeProfit) const
    {
        if ((
    iTradeProfit 0) && (GET_PLAYER(getOwnerINLINE()).getTradeYieldModifier(eIndex) > 0))
        {
            return ((
    iTradeProfit GET_PLAYER(getOwnerINLINE()).getTradeYieldModifier(eIndex)) / 100);
        }
        else
        {
            return 
    0;
        }
    }


    void CvCity::setTradeYield(YieldTypes eIndexint iNewValue)
    {
        
    int iOldValue;

        
    FAssertMsg(eIndex >= 0"eIndex expected to be >= 0");
        
    FAssertMsg(eIndex NUM_YIELD_TYPES"eIndex expected to be < NUM_YIELD_TYPES");

        
    iOldValue getTradeYield(eIndex);

        if (
    iOldValue != iNewValue)
        {
            
    m_aiTradeYield[eIndex] = iNewValue;
            
    FAssert(getTradeYield(eIndex) >= 0);

            
    changeBaseYieldRate(eIndex, (iNewValue iOldValue));
        }

    Geändert von Cybah (02. August 2011 um 16:22 Uhr)
    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. #26
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    nevermind. muss nochmal was ändern.
    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)

  12. #27
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    so vielleicht? das wäre billig.

    PHP-Code:
    int CvCity::calculateTradeYield(YieldTypes eIndexint iTradeProfit) const
    {
        if ((
    iTradeProfit 0) && ((GET_PLAYER(getOwnerINLINE()).getTradeYieldModifier(eIndex) > 0) || (GET_PLAYER(getOwnerINLINE()).getTradeYieldChange(eIndex) > 0)))
        {
            return ((
    iTradeProfit GET_PLAYER(getOwnerINLINE()).getTradeYieldModifier(eIndex)) / 100 GET_PLAYER(getOwnerINLINE()).getTradeYieldChange(eIndex));
        }
        else
        {
            return 
    0;
        }


    edit: dann würde man wohl auch aus 0er handelswegen was bekommen oder? hm mal testen obs überhaupt kompilierbar ist.

    edit:

    PHP-Code:
    1>CvCity.cpp(9239) : error C2039'getTradeYieldChange' is not a member of 'CvPlayerAI' 
    was hat die AI jetzt damit zu tun?
    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. #28
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Ich glaube ich habe das Problem nicht ganz verstanden, so wie ich das jetzt verstehe, kann man das einfach bei CvCity::updateTradeRoutes () ganz zum Schluss folgendes einfügen:
    PHP-Code:
    //neu
        
    if (getOwner().hasTrait(GC.getInfoTypeForString("TRAIT_XXX")))//Owner der Stadt ermitteln und gucken ob er den entsprechenden Trait besitzt. :sz:
        
    {
            
    setTradeYield((YieldTypes)GC.getInfoTypeForString("YIELD_PRODUCTION"), 5);
        } 
    Ich glaube ich versteh das Problem nicht ganz.

  14. #29
    verschollen Avatar von deepwater
    Registriert seit
    23.04.11
    Beiträge
    1.580
    Zitat Zitat von Cybah Beitrag anzeigen
    edit:
    PHP-Code:
    1>CvCity.cpp(9239) : error C2039'getTradeYieldChange' is not a member of 'CvPlayerAI' 
    was hat die AI jetzt damit zu tun?
    Weiß nicht wofür das Makro GET_PLAYER steht, evt. bezieht es sich auch auf CvPlayerAi, Glaubs aber eher nicht.

  15. #30
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Ich hab mir jetzt die Arbeit gemacht und in CIV4TraitInfos.xml TradeYieldChanges eingebaut. Jetzt muss ich im SDK darauf zugreifen, damit ich den Wert (bei dir 5) nicht immer im SDK ändern muss, wenn ich mal was ändern will.
    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)

Seite 2 von 180 ErsteErste 1234561252102 ... LetzteLetzte

Berechtigungen

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