Seite 1 von 2 12 LetzteLetzte
Zeige Ergebnis 1 bis 15 von 17
  1. #1
    Ex-Webmaster
    Staff Maps
    Benutzerbild von peq
    Registriert seit
    Jul 2008
    BNet Account
    peq
    Beiträge
    3.925

    [Systeme] Trigger-Showcase

    Ihr habt eine tolle Funktion oder ein geniales System erstellt, dass ihr gerne allen zeigen wollt? Euer Systen ist jedoch nicht für den praktischen Einsatz in normalen maps geeignet oder einfach nur eine Spielerei?

    Dann ist dieser Thread der richtige

    Postet einfach einen beschreibenden Text und euren Code. Im Gegensatz zu den Headerfunktion-Threads dürfen die Beiträge auch direkt hier diskutiert werden, wie in der Terrain-Gallerie.

    Viel Spaß.

  2. #2
    Yeah.
    Das ist super.
    Dann mach ich mal den Anfang:

    [/list]Übersicht:
    [/list]
    • 1. Chemische Formeln Umwandler [ Taktiker ]
    • 2. Handle Attachment System [ Taktiker ]
    • 3. Timer Struct Attachment [ Taktiker ]
    • 4. Mini HSAS (Handle Struct Attachment System) [ Justify ]
    • 5. Effekt System [ Justify ]
    • 6. Floating Texte [ Justify ]
    • 7. Gruppen/Timer/Lightnings Recyceln [ Justify ]
    • 8. Lightning System [ Justify ]






    Ich fange mal an.
    1.
    Credits: Smartiee für kgV und ggT Funktion
    Name: Chemische Formeln Umwandler
    Beispielmap vorhanden
    Beschreibung: Zuerst den Init Auslöser starten und die Formeln, die man möchte eintragen.
    Diese Funktion(en) wandeln eine Text-chemische Formel in eine mit
    Kürzeln um.
    Beispiel:
    Eisen(III)-oxid => Fe2O3
    Wichtig:
    In den Klammern keine römischen Zeichen eintragen.
    nach den Klammern keinen Bindestrich.
    Also
    Eisen(3)oxid.
    In der Beispielmap ausgeschriebene chemische Formel eingeben
    und Kürzel bekommen.

    Code:

    http://peq.bplaced.de/code.php?id=1332

    2.
    Credits:
    Name: [vJASS] StructAttachment
    Beschreibung:
    Tackert einen integer an ein handle.

    Code:
    http://peq.bplaced.de/code.php?id=1331

    3.
    Credits:
    Name: [vJASS] TimerStructAttachment
    Beschreibung:
    Tackert einen integer an einen timer.

    Code:
    http://peq.bplaced.de/code.php?id=1333

    edit: Bitte meinen thread 'kleine Systeme' löschen.

  3. #3
    Benutzerbild von Justify
    Registriert seit
    Mai 2007
    BNet Account
    Kryil
    Beiträge
    1.736
    Warum nicht

    4. Mini HSAS (Handle Struct Attachment System)
    Credits: PandaMine für das original HSAS
    Benötigt:vJass
    Kommentar: Das ist eigentlich nur eine abgespeckte Version von HSAS die es auch ermöglicht die Werte zu initialisieren.
    Link: http://peq.bplaced.de/code.php?id=1334
    Aufruf: Im gewünschten Trigger (zur Übersicht) die Zeile
    Code:
    //! runtextmacro DataStorage("Name", "Typ", "Init", "Initwert")
    Der Name ist der Name der Bibliothek und bestimmt damit auch den Funktionsnamen. Typ ist der Typ der gesicherten Variable (Integer, Real, Timer, ...). Init ist ein Boolean der auf True dafür sorgt, das der Initwert auf jede Einheit angewandt wird, die die Map betritt. Ein Beispiel wäre:
    Code:
    //! runtextmacro DataStorage("Group", "integer", "false", "0")
    
    call SetGroupData(unitx, 2)
    call GetGroupData(unitx)
    5. Effekt System
    Benötigt: vJass
    Kommentar: Das ist ein System mit einigen Funktionen rund um Effekte. Es erlaubt Effekte für einzelne Spieler/Spielergruppen zu erstellen, sowohl auf dem Boden als auch an eine Unit gehaftet.
    Dazu wird der Effekt automatisch nach einer gegebenen Zeit zerstört, somit muss man sich nicht mehr darum kümmern.
    Link: http://peq.bplaced.de/code.php?id=1335
    Aufruf: Das System enthält folgende Funktionen:
    Code:
    function CreateEffectCircle takes string model, real effects, real x, real y, real radius, real dur returns nothing
    //    Erzeugt einen Kreis aus Effekten mit den gegebenen Werten, welche wohl dank Namen selbsterklären sind, wobei "effects" die Anzahl der Effekte ist.
    
    function CreateEffectForPlayer takes string model, real x, real y, real dur, player p returns nothing
    //    Erzeugt einen Effekt auf dem Boden den NUR der gegebene Spieler sehen kann und nein, es besteht keine Desync gefahr ;)
    
    function CreateEffectForForce takes string model, real x, real y, real dur, force f, boolean c, boolean d returns nothing
    //    Das Ganze noch für eine Spielergruppe.
    //    Ist "c" true wird die Gruppe danach geleert, bei "d" gelöscht.
    
    function CreateEffectTargetForPlayer takes string model, unit u, string s, real dur, player p returns nothing
    //    Selbige Funktion nur an einer Einheit statt einem Punkt. "S" ist der Attachmentpoint
    
    function CreateEffectTargetForForce takes string model, unit u, string s, real dur, force f, boolean c, boolean d returns nothing
    //    Mal wieder für die Spielergruppe :P
    
    function RemoveEffect takes effect e, real dur returns nothing
    //    Die eigentliche Idee des Systems. Der Effekt wird nach "dur" Sekunden automatisch gelöscht.
    6. Floating Texte
    Benötigt: vJass (könnte einfach umgeschrieben werden)
    Kommentar Ich hasse diese 1000. Floating Text Funktionen. Ich habe hier einfach alle zusammen gefasst und in zwei Funktion gepackt, einmal für einen Spieler und einmal für eine Spielergruppe.
    Die Erklärung ist dieses mal als Kommentar im Code enthalten.
    Link: http://peq.bplaced.de/code.php?id=1336

    7. Gruppen/Timer/Lightnings Recyceln
    Benötigt: Alle benötigen mein Mini HSAS in 4.
    Kommentar: Es ist einfach nur schwachsinnig die gegebenen 3 Handletypen immer wieder neu zu erstellen und zu zerstören. Statt dessen kann man sie immer zurückstellen und nur Neue erstellen wenn sonst keines mehr frei verfügbar ist.
    Links:
    Gruppen
    Timer
    Lightnings
    Aufruf: Statt CreateTimer(), CreateLightning() und CreateGroup() benutzt man einfach AllocateTimer(), AllocateLightning() und AllocateGroup(). Statt DestroyTimer(), DestroyLightning() und DestroyGroup() benutzt man dann RestoreTimer(), RestoreGroup() und RestoreLightning().
    Die Variablen beim Aufruf sollten sich wieder selbst erklären.

    8. Lightning System
    Benötigt: Das Lightning Recycle System aus 7. und somit auch das Mini HSAS aus 4.
    Kommentar: Eigentlich nur mein Effektsystem auf Lightnings umgeschrieben, dank benutzung des Recyclesystems aber schön Effektiv
    Link: http://peq.bplaced.de/code.php?id=1340
    Kommentar: Die Funktionen sind alle in 5. beschrieben

  4. #4
    9. Debug System
    Beschreibung: Während der Testphase einer map sehr nützlich, bei release unbedingt entfernen, da performancelastig.
    Schreibt einen Text an alle Spieler.
    Allerdings kann man diesen Text zuordnen;
    zum Beispiel

    Code:
    call CreateDebug("KB","Knockback System: ")
    erstellt die Identifizierung "KB". Mit
    Code:
    call ReplaceDebug("KB","Knockback gestartet")
    wird dann der Text "Knockback System: Knockback gestartet" erstellt.
    Außerdem kann die Identifizierung noch für einen Hochzähler benutzt
    werden:

    Code:
    call NumDebug("KB")
    Zählt einen Integer, der mit "KB" identifiiert wird, hoch.
    Das heißt das würde
    "Knockback System: 1"
    "Knockback System: 2"
    "Knockback System: 3"
    "Knockback System: 4"
    schreiben.

    Mit
    Code:
    call ResetDebug("KB")
    setzt man diesen Integer wieder auf 0.
    Und wenn man möchte, dass die Texte mit der Identifizierung "KB"
    verborgen werden, der muss nur

    Code:
    call SetDebug("KB",false)
    schreiben und es mit
    Code:
    call SetDebug("KB",true)
    wieder aktivieren.
    Wird noch erweitert!

    KEIN vJASS! BENÖTIGT GLOBALE VARIABLEN!
    In der Beispielmap sind dsie als GUI-tRigger enthalten, und wenn man den kopiert, ht man auch die variablen.

    http://peq.bplaced.de/code.php?id=1342

  5. #5
    Benutzerbild von Skater
    Registriert seit
    Apr 2006
    Ort
    ••••••••†
    BNet Account
    Skaterl
    Beiträge
    620
    Ich hab grad gesehen, dass man hier drin direkt was schreiben darf

    Also Justify,
    1.Ich mag diese ganzen h2i(h)-0x100000 MEthoden nicht.
    Aber da wird sich wohl nichts dran ändern :/

    2.Alle Recycler haben, soweit ich das sehe keine Doublefree-SChutz, also ist es sehr leicht hier in den Fuss zu schiessen. Zudem ist es bei Groups besser einfach ein paar statische Gruppen für jede Library/Scope zu benutzen.

    @Tatktiker:
    KAnn ich nicht auch einfach Mueslis JDebug benutzen?
    Are you #gp39f.tmp?

    Mein Spawnsystem macht das Leben einfacher.

    Mein Multiboard-Tutorial: schaut euch es an.

  6. #6
    Benutzerbild von Justify
    Registriert seit
    Mai 2007
    BNet Account
    Kryil
    Beiträge
    1.736
    1) Was soll daran schlecht sein?^^ Der Nachteil ist das langsamer Werden durch den hohen Index, was aber durch die Tatsache das der Speichervorgang nur zwei Funktionsaufrufe und einzelne If-Conditions sind und somit mega schnell ist, mehr als wett gemacht wird
    Und ja es hat Nachteile, sofern man Spells auf einen einzelnen Timer auslegt ist es schwer, da man die Werte weder an den Timer noch an die Einheiten (MUI) hängen kann :/

    2) Stimmt, hab daran nicht gedacht weil sie auf Eigenbedarf ausgelegt waren. Ich werd das Zeug noch erweitern Mit den Gruppen würd ich dir unrecht geben. Stell dir vor du hast eine Map mit ~120 Spells (30 Helden, gut umsetzbar). Davon sagen wir benutzen 80 eine statische Gruppe die bei Map-Init erstellt wird, somit existieren 80 Gruppen die du warscheinlich niemals alle brauchst. Mit dem System kommst du warscheinlich mit ~5-10 aus Btw, was ist an der Sache das gelösche Gruppen die mit ForGroup bearbeitet wurden leaken? oO hab das mal iwo gehört.

    Mir fällt grad auf, ich sollte die Lightnings eventuell nach Model "aussortieren"^^

  7. #7
    10 String Table Comfort System
    Beschreibung:
    Erstellt Tabellen und Daten, die dort eingefügt werden.
    Man erstellt eine Tabelle so:
    Code:
    // TS steht für TableString
    call CreateTS("Tabelle_1",10)
    Jetzt haben wir eine Tabelle erstellt, die 10 Daten aufnehmen kann.
    Diese Daten werden durch strings ersetzt:

    Code:
    call AddTS("Tabelle_1","A")
    call AddTS("Tabelle_1","B")
    call AddTS("Tabelle_1","C")
    call AddTS("Tabelle_1","Die Katze liegt im Schnee")
    Nun haben wir 4/10 maximalen strings ausgefüllt.
    Nun haben diese Strings Werte.
    A = 1
    B = 2
    C = 3
    Die Katze liegt im Schnee = 4

    Das ist Nur gut für andere Systeme, die nicht auf Schnelligkeit ausgelegt sind.

    Nun wird sich mancher fragen: Was nützt uns das?
    Schaut euch einfach meine Debug Funktionen an.
    Es ist für den Benutzer sehr viel komfortabler

    Code:
    call CreateDebug("B","BowlingBahn")
    und

    Code:
    call SetDebug("B",true)
    call NumDebug("B")
    zu schreiben, als "B" durch eine Zahl ersetzebn zu müssen, oder?
    Das ist sehrviel Benuterfreundlicher und übersichtlicher.
    Code:

    http://peq.bplaced.de/code.php?id=1391

    edit: Neuer Debug

    http://peq.bplaced.de/code.php?id=1392

    enthält:

    Code:
    function G2S takes group g returns string
    function P2S takes player p returns string
    function AddSquareBrackets takes string s returns string
    function CreateDebugCommand takes string identifier, integer number, string command, string replace returns nothing
    function StoreDebug takes string identifier, string whichString returns nothing
    function ReadStoreDebug takes string identifier, string wonach returns boolean
    function CreateDebugBooled takes string identifier, string replace returns nothing
    function CreateDebug takes string identifier, string replace returns nothing
    function ReplaceDebug takes string identifier, string s returns nothing
    function Debug takes string s returns nothing
    function SetDebug takes string Identifier, boolean bool returns nothing
    function NumDebug takes string identifier returns nothing
    function ResetDebug takes string identifier returns nothing
    function ReplaceDebugNC takes string identifier, string s returns nothing
    
    Funktion 1:
    Zählt die Anzahl der Einheiten in einer Gruppe und gibt diese aus.
    
    Funktion 2:
    Gibt den Spielernamen eines Spielers aus. Ist halt kürzer als GetPlayerName()
    
    Funktion 3:
    Gibt einen string mit eckigen Klammern wieder.
    Beispiel: AddSquareBrackets("600") gibt [600] wieder.
    
    Funktion 4:
    Wenn der string 'command' in einem ReplaceDebug vorhanden ist, wird dieser durch replace ersetzt.
    Gilt nur für einen Debug.
    Beispiel:
    CreateDebug("Ex","Example: ")
    CreateDebugCommand("Ex",1,"E1","> ")
    CreateDebugCommand("Ex",2,"E2",">> ")
    CreateDebugCommand("Ex",3,"E3",">>> ")
    Wenn man nun
    ReplaceDebug("Ex","E1Variablen initialisiert")
    ReplaceDebug("Ex","E2Loop gestartet")
    ReplaceDebug("Ex","E3If-then-Else Verschachtelung erreicht")
    schreibt, schreiben die Debugs:
    "Example: > Variablen initialisiert"
    "Example: >> Loop gestartet"
    "Example: >>> If-then-Else Verschachtelung erreicht"
    Wichtig: Höchstens 4 commands pro Debug möglich!
    Man muss die Nummer des commands angeben.
    
    Funktion 5:
    Speichert an einer Zeichenkette(identifier) einen string.
    Beispiel:
    StoreDebug("Ex","Dieser Debug ist nun X mal gelaufen")
    Fügt "Dieser Debug ist nun X mal gelaufen" zu der Zeichenkette Ex hinzu.
    
    Funktion 6:
    Liest, ob eine Zeichenkette durch Funktion 5 an einen Identifier gespeichert wurde und gibt
    einen Wahrheitswert wieder.
    
    Funktion 7:
    Wenn man grade den Initialisierungstrigger für die Debugs nicht findet, kann man diese Funktion
    benutzen.
    Sie ist nicht so performant wie daqs herkömmliche CreateDebug, aber wenn ein Debug schon existiert,
    wird kein neues erstellt.
    
    Funktion 8:
    Erstellt ein Debug, das heißt man hat einen Identifier, eine kurze Zeichenkette, die den Debug identifiziert.
    Mit Funktion 9 wird der Identifier ersetzt.
    Beispiel:
    CreateDebug("A","Desoxyribonukleinsäure ist ein wertvolles Geschenk der Natur").
    Anstatt Debug("Desoxyribonukleinsäure ist ein wertvolles Geschenk der Natur")
    muss man nun nur noch ReplaceDebug("A",". Und die ReplaceDebug Funktion ist ein guter Bestandteil deiner Arbeit") schreiben, um den Satz
    "Desoxyribonukleinsäure ist ein wertvolles Geschenk der Natur. Und die ReplaceDebug Funktion ist ein guter Bestandteil deiner Arbeit"
    zu schreiben.
    
    Funktion 9:
    Ersetzt ein Identifier durch seinen Gegenspieler, also "Ex" durch zB "Example"
    
    Funktion 10:
    Schreibt einen Text an alle Spieler
    
    Funktion 11:
    Bestimmt, ob ein Debug angezeigt werden soll. Ist am Anfang immer false.
    Wenn du zB nicht willst, dass die Debugs mit den Identifiern "Ex" angezeigt werden,
    schreibe call SetDebug("Ex",false).
    Das ist ziemlich nützlich, man kann den Teil der unbenötigten Debugs einfach verbergen.
    
    Funktion 12:
    Zählt für einen Identifier einen Integer hoch und gibt diesen aus.
    Wenn man 3 Mal NumDebug startet, wird nach der Reihe "1", "2" und "3" ausgegeben
    
    Funktion 13:
    Setzt diesen Integer wieder auf 0
    
    Funktion 14:
    Wie ReplaceDebug, ist aber sehr viel performanter, da es commands ignoriert.

  8. #8
    11.
    Kriegszitate
    Beschreibung:
    Eine Sammling von deutschen und englischen Kriegszitaten.

    Code:
        globals
            string array Zitat
            string array German
            string array name
            integer ZitatNumber = 0
        endglobals
        
    function StoreZitat takes string zitat, string name returns nothing
        set ZitatNumber = ZitatNumber + 1
        set Zitat[ZitatNumber] = zitat
        set name[ZitatNumber] = name
    endfunction
    
    function StoreZitatDeutsch takes string zitat returns nothing
        set German[ZitatNumber] = zitat
    endfunction
        
    function InitZitate takes nothing returns nothing
        call StoreZitat(" I am not sure, with which weapons the third World War is hold, but in the fourth one, they will fight with stones and sticks", "Albert Einstein, german physician")
        call StoreZitatDeutsch("Ich bin nicht sicher, mit welchen Waffen der dritte Weltkrieg ausgetragen wird, aber im vierten Weltkrieg werden sie mit Stöcken und Steinen kämpfen.")
        
        //
        
        call StoreZitat("Imagine it is war and nobody goes there","Carl Sandburg")
        call StoreZitatDeutsch("Stell dir vor, es ist Krieg, und keiner geht hin.")
        
        //
        call StoreZitat("The humanity has to put an end to the war, or the war will put an end to the humanity","John F. Kenndey, ertwhile american president")
        call StoreZitatDeutsch("Die Menschheit muß dem Krieg ein Ende setzen, oder der Krieg setzt der Menschheit ein Ende.")
        
        call StoreZitat("The authors can't write as fast as governments start wars, because writing needs thinking","Bertholt Brecht, german author")
        call StoreZitatDeutsch("Die Schriftsteller können nicht so schnell schreiben, wie die Regierungen Kriege machen; denn das Schreiben verlangt Denkarbeit.")
        
        call StoreZitat("Only the dead have seen the end of a war","Plato, greece philosophican")
        call StoreZitatDeutsch("Nur die Toten haben das Ende des Krieges gesehen.")
        
        call StoreZitat("The truth is the first victim of a war","Aischylos, latin maker of a tragedy")
        call StoreZitatDeutsch("Im Krieg ist die Wahrheit das erste Opfer.")
        
        call StoreZitat("You can win a war like you can win against an earthquake","Jeannette Rankin")
        call StoreZitatDeutsch("Man kann einen Krieg genauso wenig gewinnen wie ein Erdbeben.")
        
        call StoreZitat("We make war that we may live in peace.","Aristoteles")
        call StoreZitatDeutsch("Wir machen Kriege, um in Frieden leben zu können")
        
        call StoreZitat("I have seen war. I have seen war on land and sea. I have seen blood running from the wounded. I have seen the dead in the mud. I have seen cities destroyed. I have seen children starving. I have seen the agony of mothers and wives. I hate war.","Franklin Delano Roosevelt")
        call StoreZitatDeutsch("Ich habe Kriege gesehen. Ich habe Krieg zu Wasser und zu Land gesehen. Ich habe gesehen, wie das Blut aus den Wunden der Verletzten lief. Ich habe die Toten im Dreck liegen sehen. Ich habe zerstörte Städte gesehen. Ich habe verhungerne Kinder gesehen. Ich habe den Todeskampf von Müttern und Ehefrauen gesehen. Ich hasse Krieg!")
        
        call StoreZitat("Violence is the last refuge of the incompetent.","Isaac Asimov")
        call StoreZitatDeutsch("Gewalt ist die letzte Zuflucht der Inkompetenz")
        
        call StoreZitat("You can't say civilization don't advance -- for in every war, they kill you in a new way.","Will Rogers")
        call StoreZitatDeutsch("Man kann nicht sagen, dass sich die Zivilisation nicht entwickelt -- in jedem Krieg töten sie dich auf andere Weise")
    endfunction

  9. #9
    12. Geometrie
    Enthält folgende structs:

    loc
    Linie
    LineareFunktion
    Geometry (hat nur static methods)

    Code:

    http://peeeq.de/code.php?id=1533

    Methods:
    //_____________________________________________
    // Methods
    //_____________________________________________

    //* Lineare Funktion
    //* Calculate : Calculate a linear function for 2 locations
    //* GetIndexDataX : When x is ___, y has to be ... | returns Loc struct
    //* GetIndexDataY : When y is ___, x has to be ... | returns Loc struct
    //* CheckCorrectUsage : Check, if .Calculate was called.
    //* GetDirection : Return direction: The linear function in degrees.
    //* By Mr.Malte : Don't give credits when used, but please be so enat and tell me.
    //* Linie
    //* CreateFromFormular : Erstellt aus einer linearen Funktion eine Linie
    //* Geometry
    //* Nur static method MeasureAngle: Misst den Winkel zwischen 2 Linien.
    Lineare Funktionen:
    Machen viele Dinge einfacher, die man zwar genauso gut mit Sinus und Cosinus lösen könnte, aber es ist halt leichtter und übersichtlicher.

    Hier ein Beispiel für die Benutzung:

    Man will, dass ein Ball zum Zielpunkt fliegt.
    Code:
    function Example takes nothing returns nothing
        //   Ich möchte, dass ein Kugel Dummy zum Zielpunkt fliegt.
        local unit dummy = CreateUnit(...)
        local unit u = GetSpellAbilityUnit()
        local location l = GetSpellTargetLoc() // X und Y geht leider nicht.
        local loc Converted = loc.L2l(l)       // In einen künstlichen Punkt umwandeln.
        local loc loc2
        local LineareFunktion linF
        call linF.Calculate(GetUnitX(u),GetUnitY(u),Converted.x,Converted.y)        // Berechnet die lineare Funktion zwischen dem Start und Ziel
        
        set loc2 = Converted.CreateFrontPoint(1000.,linF.GetDirection())            // Erstellt eine PolarProejektion - 1000 entfernt in der passenden Richtung.
        
        call IssuePointOrder(dummy,"move",loc2.x,loc2.y) // Bewegt zu XY.
        
        call Converted.destroy()
        call linF.destroy()
    endfunction
    Oder ein Knockback (kann man ausbauen, der is unendlich aber nur um die Funktionen ind er Praxis zu zeigen):

    Code:
    library KB initializer Initaa
    globals
        LineareFunktion array Knockbacks
        integer c = 0
        unit array Unit
        constant real SPEED = 5.
    endglobals
    
    function Knockback takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local LineareFunktion knockback
        local integer i = 0
        local real newx
        local real newy
        local real direction
        local loc loc2
            loop
                set i = i + 1
                exitwhen i > c
                set knockback = Knockbacks[i]
                
                // Möglichkeiten, die nezen Kooridanten mit einer linearen Funktion zu bestimmen:
                
                // A:
                set newx = GetUnitX(Unit[i]) + SPEED//Immer 5xe schneller. Das ist die Geschwindigkeit! 5*(1./0.032) = speed
                set newy = knockback.GetXY(newx) // Nun zu dem X die passende Y Koordinate!
                
                // B:
                set loc2 = loc.create()         // Custom locs benötigen keine handle ID !
                set direction = knockback.GetDirection()
                set loc2 = CreateFrontPoint(SPEED,direction) // Eine GEschwindigkeit von 5
                call SetUnitX(Unit[i],loc2.x)
                call SetUnitY(Unit[i],loc2.y)
                call loc2.destroy()
                
                // C:
                
                call SetUnitX(Unit[i],newx)
                call SetUnitY(Unit[i],newy)
            endloop
    endfunction
    
    function Example2 takes unit which, real fromWho returns nothing
        local LineareFunktion knockback = LineareFunktion.create()
        call knockback.Calculate(GetUnitX(fromWho),GetUnitY(fromWho),GetUnitX(which),GetUnitY(which)) // Geht auch mit sin, cos. Aber so ist ein knockback doch schön :)
        set c = c + 1
        set Unit[c] = which
        set Knockbacks[c] = knockback
    endfunction
    
    function Initaa takes nothing returns nothing
        call TimerStart(CreateTimer(),0.032,true,function Knockback)
    endfunction
    
    endlibrary

    Und noch ein Bildbeispiel:

  10. #10
    Ex-Webmaster
    Staff Maps
    Benutzerbild von peq
    Registriert seit
    Jul 2008
    BNet Account
    peq
    Beiträge
    3.925
    Habe mal ne zufällige *g* Funktion ausprobiert, aber er sagt mir "You did not initialize with .Calculate!"

    Code:
        local LineareFunktion fun = LineareFunktion.create()
        local LineareFunktion fun2 = LineareFunktion.create()
        call fun.Calculate(111,222,333,52912.368)
        call fun.CheckCorrectUsage()
    Finde so zufällige Werte immer unschön um irgend etwas zu prüfen Lass doch einfach schon die create-Funktion die Werte nehmen.

    Mein zweiter Versuch hat auch nicht geklappt, aber das leigt wohl in der Natur der Sache.

    Code:
    call fun.Calculate(100,100,100,800)
    Eine Überprüfung wäre hier zumindest im Debug-Modus angepracht.

    Für das Winkel Messen könntest du auch noch was einfacheres nehmen, ich habe da mal was vorbereitet:

    Code:
    //Mit Skalarprodukt
    function MeasureAngle2 takes LineareFunktion l1, LineareFunktion l2 returns real
        return bj_RADTODEG * Acos((1 + l1.m*l2.m)/(SquareRoot(1+ l1.m*l1.m)*SquareRoot(1+ l2.m*l2.m)))
    endfunction
    
    //mit Steigung
    function MeasureAngle3 takes LineareFunktion l1, LineareFunktion l2 returns real
        return bj_RADTODEG * (Atan(l2.m) - Atan(l1.m))
    endfunction

    Deinen Knockback habe ich nicht ausprobiert, aber erreicht die Einheit dabei nicht Lichtgeschwindigkeit, wenn der Winkel gegen 90° geht?

  11. #11
    Mit dem create:

    Mal sehen :-)
    Deine Winkelmessungen sind gute Ideen :-)
    Zu dem Knockback:
    Da hats du vielleicht Recht. Die Geschwindigkeit ist wohl nicht konstant, ich werde da mal noch eine Funktion mit konstanter Differenz einbauen.

    Alternativ kann man auch GetYX benutzen, da ist die Gleiung
    Y = mx +b
    nach X aufgelöst.

    X = (Y-b)/m

  12. #12
    http://peeeq.de/code.php?id=1534

    So.
    So sollte der Knockback nicht mehr Lichtgeschwindigkeit erreichen :-)
    Da wird die Einheit immer um X verschoben, wobei X immer den gleichen Abstand hat.

  13. #13
    masterkane
    Guest
    Gelangweilt von wäldern?
    Gelangweilt, wenn die karte nach einer halben stunde abgeholzt ist?

    dagegen haben ich was:
    Ein wald nachwuchs system:
    Trigger 1:
    in die map ini
    Ereignisse
    Zeit - Elapsed game time is 0.30 seconds
    Bedingungen
    Aktionen
    Set Baum = 0
    Zerstörbar - Pick every destructible in (Playable map area) and do (Actions)
    Schleifen - Aktionen
    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    'IF'-Bedingungen
    (Destructible-type of (Picked destructible)) Gleich Sommerbaumwand
    'THEN'-Aktionen
    Set Baum = (Baum + 1)
    'ELSE'-Aktionen



    trigger 2:
    Treegrow
    Ereignisse
    Zeit - Every 1.00 seconds of game time
    Bedingungen
    Aktionen
    Set Baum_set = (Baum / 50)
    For each (Integer A) from 1 to Baum_set, do (Actions)
    Schleifen - Aktionen
    Set Temppoint = (Random point in (Region centered at (Position of (Random destructible in (Playable map area) matching ((Destructible-type of (Matching destructible)) Gleich Sommerbaumwand))) with size (500.00, 500.00)))
    Zerstörbar - Create a Sommerbaumwand at Temppoint facing (Random angle) with scale 1.00 and variation (Random integer number between 1 and 5)
    Set Baum = (Baum + 1)
    Custom script: call RemoveLocation(udg_Temppoint)


    und der letze trigger =)
    Tree die
    Ereignisse
    Zerstörbar - A destructible within (Playable map area) dies
    Bedingungen
    (Destructible-type of (Dying destructible)) Gleich Sommerbaumwand
    Aktionen
    Set Baum = (Baum - 1)


    mit diesen 3 (kleinen) triggern, schafft ihr es, dass eure bäume "relativ" realistisch nachwachsen, und dass sogar keine neuen bäume wachsen, wenn ein bestimmter wert unterschritten wird.

    Und das beste: fast alles ist frei anpassbar: anzahl vom bäumen benötigt für 1 neuen baum; periodenzeit zum erstellen.....

    trigger dürften eigentlich nicht leaken, und es läuft flüssig =)

    hoffe es findet verwendung

  14. #14
    Benutzerbild von Küken
    Registriert seit
    Jul 2007
    Ort
    Brownschwaik
    BNet Account
    Kueken
    Beiträge
    2.428
    Leakt noch ne Location und ne Region Und natürlich ist alles frei anpassbar, wenn man den Trigger verändert o_0
    Mit Frei anpassbar ist für gewöhnlich gemeint, dass es einen speziellen Konfigurationsteil im Trigger gibt (meist für Jass/vJass Trigger), sodass auch unerfahrene User wichtige Werte verändern können, ohne den Trigger ansich verstehen zu müssen.

    Außerdem wachsen deine Bäume zufällig; also auch evtl an Orten, wo sie nicht sein sollten.
    Nicht zu vergessen, dass es mit den Events für Destructibles nen bug gibt (soweit ich weiss), wodurch das Ganze nur für die ersten 64 Bäume in nem gebiet funktioniert oder so (da bin ich mir aber nicht ganz sicher, wie das genau funktioniert)

    Ganz ehrlich: Jeder, der sowas braucht, kann sich das in einer Minute selbst zusammenbauen (und es gleich noch an die Spezifikationen in seiner Map anpassen)

    Wenn du außerdem ernsthaft der Meinung bist, dass da keine Leaks mehr drin sind, solltest du nochmal sehr aufmerksam das Leak-Tutorial studieren; dann wirst du wahrscheinlich in vielen maps von dir noch Leaks haben.
    Geändert von Küken (23. Juni 2010 um 18:21 Uhr)

  15. #15
    masterkane
    Guest
    na super, alles für die tonne -.-

    naja egal:

    @ Pointleaks: ich habe doch nur 1 location verwendet, die ich meiner meinung nach am ende entferne-> wie kann ich 2 pointleaks bei 1 location haben....

    @ küken: ist wirklich schund, also bitte post löschen ...

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. [Scripts] Triggered Terrain Showcase
    Von XieLong im Forum Material
    Antworten: 1
    Letzter Beitrag: 28. April 2010, 13:59
  2. [Vorschlag] Coding Webdesign Showcase
    Von Apfeltortex3 im Forum Feedback Forum
    Antworten: 1
    Letzter Beitrag: 12. November 2009, 18:54
  3. Quest Systeme
    Von Delario_inaktiv im Forum Triggerforum
    Antworten: 3
    Letzter Beitrag: 20. September 2009, 23:58
  4. [Systeme] Linksammlung
    Von Mueslirocker im Forum Triggerforum Archiv
    Antworten: 3
    Letzter Beitrag: 17. Januar 2008, 14:40

Forumregeln

  • Es ist dir nicht erlaubt, neue Themen zu verfassen.
  • Es ist dir nicht erlaubt, auf Beiträge zu antworten.
  • Es ist dir nicht erlaubt, Anhänge hochzuladen.
  • Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
  •