Ergebnis 1 bis 7 von 7

Thema: Tore

  1. #1
    12 of 5
    Registriert seit
    31.12.2011
    Beiträge
    3
    Downloads
    0
    Uploads
    0

    Frage Tore

    Ich hätte da mal eine Frage.
    Geht es über einen Tribut ein Tor zu öffnen während ein anderes schließt?
    Der Tribut soll danach nicht verschwinden, sondern beim wieder zahlen das zuvor geöffnete Tor wider schließen und das geschlossene Tor wieder öffnen.
    Das soll dann beliebig oft funktionieren.
    Wäre froh, wenn jemand eine Antwort hätte.

  2. #2
    Lanzenträger Avatar von trabbi
    Registriert seit
    09.03.2006
    Beiträge
    4,968
    Downloads
    1
    Uploads
    0

    Standard AW: Tore

    jo, geht
    hab das selbst in einer Map drin
    weiss jetzt aber nicht mehr, in welcher
    ----------------------
    müsste hier drin sein ?
    http://www.siedler-maps.de/maps/TR_Geburtstag-710.htm
    ----------------------
    wie sich herausstellte, gibst aber einen Trick, den Tribut zu umgehen.
    einfach nahe genug ein Gebäude setzen, und die Trebutfrage ist sinnlos
    Geändert von trabbi (01.01.2012 um 17:19 Uhr)
    trabbi
    Was ist Theorie, - Wenns klappen soll und es klappt nie
    Was ist Praxis, - Frag nicht so dumm, wenns klappt und Du weißt nicht warum

  3. #3
    12 of 5
    Registriert seit
    31.12.2011
    Beiträge
    3
    Downloads
    0
    Uploads
    0

    Frage AW: Tore

    Aber wenn ich


    function Tor öffnen/schließen()
    local tribute = {};
    tribute.playerId = 1;
    tribute.text = "zahle 100 Holz, um die Toore zu schließen/öffnen.";
    tribute.cost = { Wood = 100 };

    AddTribute( tribute );
    ReplaceEntity ("tor1", "XD_WallStraightGate");
    ReplaceEntity ("tor2","XD_WallStraightGate_Close")
    end



    einfüge, dann geht es einmal.
    Ich will aber dass ich es beliebig oft machen kann und so jedes mal ein Tor öffne und eins schließe.



  4. #4
    Lanzenträger Avatar von trabbi
    Registriert seit
    09.03.2006
    Beiträge
    4,968
    Downloads
    1
    Uploads
    0

    Standard AW: Tore

    das Script geht aber weiter ...
    da muss noch ne Stelle (Trigger) sein,
    damit das Tor wieder geschlossen wird
    --------------------
    ps. ich schaue nix nach ... ist alles schon zu lange her
    kram nur noch in meinen Erinnerungen !
    trabbi
    Was ist Theorie, - Wenns klappen soll und es klappt nie
    Was ist Praxis, - Frag nicht so dumm, wenns klappt und Du weißt nicht warum

  5. #5
    12 of 5
    Registriert seit
    31.12.2011
    Beiträge
    3
    Downloads
    0
    Uploads
    0

    Idee AW: Tore

    Ich glaub ich hab´s jetzt gefunden.
    Wird gleich getestet!
    Geändert von Kerberos (02.01.2012 um 11:03 Uhr)

  6. #6
    12 of 5 Avatar von FastBow
    Registriert seit
    23.02.2011
    Beiträge
    16
    Downloads
    0
    Uploads
    0

    Standard AW: Tore

    Zitat Zitat von Kerberos Beitrag anzeigen
    Aber wenn ich
    Code:
       function Tor öffnen/schließen() local tribute = {}; tribute.playerId = 1; tribute.text = "zahle 100 Holz, um die Toore zu schließen/öffnen."; tribute.cost = { Wood = 100 };  AddTribute( tribute ); ReplaceEntity ("tor1", "XD_WallStraightGate"); ReplaceEntity ("tor2","XD_WallStraightGate_Close") end
    einfüge, dann geht es einmal.

    Mich wundert das da alles glatt läuft.
    Ein Leerzeichen und 2 Sonderzeichen im Funktionsnamen ^^

    Ausserdem hast du in deiner Funktion kein Callback

    Stattdessen stehen die Anweisungen in der Tribut-funktion drin.

    Ich stelle mal eine Lösung zusammen und poste dann.


    Edit:

    Probiersmal hiermit.

    Als erstes den Comfort für die Tribut-funktion in dein Skript unten einfügen :
    Code:
    function AddTribute( _tribute )
        assert( type( _tribute ) == "table" );
        assert( type( _tribute.text ) == "string" );
        assert( type( _tribute.cost ) == "table" );
        assert( type( _tribute.playerId ) == "number" );
        assert( not _tribute.Tribute );
        
        uniqueTributeCounter = uniqueTributeCounter or 1;
        _tribute.Tribute = uniqueTributeCounter;
        uniqueTributeCounter = uniqueTributeCounter + 1;
        
        local tResCost = {};
        for k, v in pairs( _tribute.cost ) do
            assert( ResourceType[k] );
            assert( type( v ) == "number" );
            table.insert( tResCost, ResourceType[k] );
            table.insert( tResCost, v );
        end
        
        Logic.AddTribute( _tribute.playerId, _tribute.Tribute, 0, 0, _tribute.text, unpack( tResCost ) );
        SetupTributePaid( _tribute );
        
        return _tribute.Tribute;
    end
    
    -- Workaround for broken unpack() in 1.02-1.04
    function unpack2(_table, _i)
        _i = _i or 1;
    assert(type(_table) == "table");
        if _i <= table.getn(_table) then
            return _table[_i], unpack2(_table, _i + 1);
        end
    end
    
    if not unpack( { true } ) then  -- Check if the normal unpack() works
        unpack = unpack2;           -- Nope. Use unpack2 instead
    end
    Mit dem Comfort wirst du erstmal nichts anfangen können, und das ist auch nicht notwendig.

    Jetzt kommte der für dich interessante Teil.
    Code:
    function SetTribut1()                                                       -- Beliebiger Funktionsname
        local tribute =  {};                                                      -- Table auf
        tribute.playerId = 1;                                                    -- Der Tribut wird Spieler 1 angezeigt
        tribute.text = "F\195\188r 100 Holz wechseln die Tore ...";  -- Text anzeigen
        tribute.cost = { Wood = 100};                                       -- Kosten
        tribute.Callback =Wechsel1 ;                                          --  Funktion die bei Bezahlung des Tributs ausgelöst wird.
        Tribut1 = AddTribute( tribute );                                      -- Name des Tributs. Über den Namen kannst du den Tribut auch Manuell löschen. 
    end
    
    function Wechsel1()
     SetTribut2()                                              -- Der Neue Tribut für erneuten Wechsel
       ReplaceEntity("tor1", Entities.XD_WallStraightGate)
     ReplaceEntity("tor2", Entities.XD_WallStraightGate_Close)
    end
    
    function SetTribut2()                                                       
        local tribute =  {};                                                      
        tribute.playerId = 1;                                                    
        tribute.text = "F\195\188r 100 Holz wechseln die Tore ...";  
        tribute.cost = { Wood = 100};                                       
        tribute.Callback =Wechsel2 ;                                          
        Tribut2 = AddTribute( tribute );                   
    end
    
    function Wechsel2()
     SetTribut1()                                              -- Wieder wechseln
       ReplaceEntity("tor1", Entities.XD_WallStraightGate_Close)
     ReplaceEntity("tor2", Entities.XD_WallStraightGate)
    end
    Erklärungen stehen hinter dem Code.
    So müsste alles gehen.
    Geändert von FastBow (16.02.2012 um 18:16 Uhr)

  7. #7
    Sägewerker Avatar von Flodder
    Registriert seit
    12.07.2006
    Ort
    Wilstedt (Niedersachsen)
    Beiträge
    180
    Downloads
    0
    Uploads
    0

    Standard AW: Tore

    Zitat Zitat von Kerberos Beitrag anzeigen
    Aber wenn ich
    function Tor öffnen/schließen()
    local tribute = {};
    tribute.playerId = 1;
    tribute.text = "zahle 100 Holz, um die Toore zu schließen/öffnen.";
    tribute.cost = { Wood = 100 };

    AddTribute( tribute );
    ReplaceEntity ("tor1", "XD_WallStraightGate");
    ReplaceEntity ("tor2","XD_WallStraightGate_Close")
    end

    einfüge, dann geht es einmal.
    Ich will aber dass ich es beliebig oft machen kann und so jedes mal ein Tor öffne und eins schließe.

    Moin Kerberos,
    dieser Threat ist zwar schon einige Tage her, aber vielleicht doch noch aktuell:

    1.) Zu Deiner Logic:
    "Beliebig oft" wird mit Deiner Funktion schon begrenzt. Ist kein Holz mehr da, dann wird der Mentor "meckern" und der Tribut kann nicht erfüllt werden. Man muss den Tribut also von etwas abhängig machen, was unendlich vorhanden ist. Z.B.: "Nichts" !

    "Nichts" wäre bspw. Gold = 0 , oder ein x-beliebiger anderer Rohstoff mit dem Wert = 0

    Deweiteren bildet man eine Schleife für die Tributabfrage.
    Könnte dann so aussehen:
    Code:
    function TorAufZu_1()
       local tributeTorAufZu_1 =  {}
       tributeTorAufZu_1.playerId = 1;
       tributeTorAufZu_1.text = "Klick auf den Tribut, um die Tore zu oeffnen, oder zu schliessen.";
       tributeTorAufZu_1.cost = { Gold=0 };
       tributeTorAufZu_1.Callback = OnTributeTorAufZu_1;
       AddTribute( tributeTorAufZu_1 )
    end
    
    function OnTributeTorAufZu_1()
       ReplaceEntity ("tor1", "XD_WallStraightGate"); 
       ReplaceEntity ("tor2","XD_WallStraightGate_Close")
       TorAufZu_2()
    end
    
    function TorAufZu_2()
       local tributeTorAufZu_2 =  {}
       tributeTorAufZu_2.playerId = 1;
       tributeTorAufZu_2.text = "Klick auf den Tribut, um die Tore zu oeffnen, oder zu schliessen.";
       tributeTorAufZu_2.cost = { Gold=0 };
       tributeTorAufZu_2.Callback = OnTributeTorAufZu_2;
       AddTribute( tributeTorAufZu_2 )
    end
    
    function OnTributeTorAufZu_2()
       ReplaceEntity ("tor2", "XD_WallStraightGate"); 
       ReplaceEntity ("tor1","XD_WallStraightGate_Close")
       TorAufZu_1()
    end
    Damit wird es zu einer endlosen Schleife, die sich wechselseitig aufruft und die Tore wechselseitig öffnet, oder schliesst und ausserdem "Nichts" abverlangt.

    Benötigt wird dazu folgender Comfort-Code (irgenwo ins Skript kopieren):
    Code:
    function AddTribute( _tribute )
        uniqueTributeCounter = uniqueTributeCounter or 1;
        _tribute.Tribute = uniqueTributeCounter;
        uniqueTributeCounter = uniqueTributeCounter + 1;
        local tResCost = {};
        for k, v in pairs( _tribute.cost ) do
            table.insert( tResCost, ResourceType[k] );
            table.insert( tResCost, v );
        end
        Logic.AddTribute( _tribute.playerId, _tribute.Tribute, 0, 0, _tribute.text, unpack( tResCost ) );
        SetupTributePaid( _tribute );
        return _tribute.Tribute;
    end
    Probier`s mal aus.
    Geändert von Flodder (16.02.2012 um 18:30 Uhr)
    Sinnlos ist ein Leben ohne Sinn für nnisnU!

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Wintersport eines der besten Eishockey Tore ever
    Von Kevin the HERO im Forum Flutlicht Siedlersportforum
    Antworten: 0
    Letzter Beitrag: 14.05.2011, 17:37
  2. Ihr müsst die Tore zerstören
    Von atamiga im Forum Siedler 7 Singleplayer
    Antworten: 5
    Letzter Beitrag: 30.01.2011, 18:09
  3. [beantwortet] Goal_BuildWall erkennt Tore als Durchgang
    Von Annosiedler im Forum S6 Scriptecke
    Antworten: 3
    Letzter Beitrag: 02.01.2010, 14:01
  4. Wie drehe ich die Tore?
    Von chri-Wi im Forum Siedler 6 AeK Tipps und Tricks
    Antworten: 26
    Letzter Beitrag: 27.01.2008, 02:48
  5. [EMap] com AO2 Freispielkarte: Die Tore der Stadt
    Von chri-Wi im Forum Siedler 5 DEdK Lösungen Tipps und Tricks ©
    Antworten: 0
    Letzter Beitrag: 01.11.2005, 11:48

Stichworte

Berechtigungen

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