Jump to content

tr0n

Members
  • Posts

    562
  • Joined

  • Last visited

  • Days Won

    10

Posts posted by tr0n

  1. Hey guys,

    guess who is back and even with a new release ? So what is this all about ?

    The atcommand_symbol allows us to set a symbol for using commands ingame.

    Sadly we can only use one symbol only. But not now anymore. This patch allows

    you to add multiple symbols for your atcommand_symbol !

     

    Download:

    - atcommand_symbol.patch

    If someone has issues with the source compiling use this:

    - compile_fix.patch

     

    How to Install:

    - Download the patch

    - apply the patch on your server (tortoise, git, etc.)

    - Recompile source

     

    How do I enable it ?

    Go to: ...\conf\atcommand_athena.conf

     

    Find:

    atcommand_symbol : "@"

    Use it like this for an example: (i just used random symbols so you get what I mean)

    atcommand_symbol : "@!&-_%"

    What  happens now is that all symbols in that line get registered as a atcommand symbol and can be used ingame for commands.

    I limited it to 16 but you can change it if you want.

     

    How to change the limit ?

    Go to: ...\src\map\atcommand.c

     

    Find:

    #define ATCOMMAND_SYMBOL_LENGTH 16

    Replace for example:

    #define ATCOMMAND_SYMBOL_LENGTH 24

    recompile source after this.

    This would allow you to change the limit.

     

    Have Fun with this :)

    Greets tr0n

  2. Hi tr0n,

     

    I would say that your script have a little bug. The bug is that when player accept a quest e.g. the quest is for lvl 80 and the player do this quest, but don't finish it and make rebirth with level 99. Then the player is level 1 rebirth and can finish the quest that he / she accepted with level 80.

     

    Greets

    Hismoon

     

    Thanks for pointing this out. I will fix it soon.

  3. That's the only way. You can use Notepad++ to search for keywords in folders and all documents in /npc. That will help you a lot. Trust me.

    Just get a list of all npcs which have that map and then comment them out in your .conf files so they dont load on mapserver. That's it.

  4. This depends on how your battleground works and what kind of Labels/Events you use. For Example you could use custom events which get triggered if you got killed or a team wins bg, which leads to teleporting one or more players to a desired destination with "bgwarp" or just "warp". That also depends on how much people you want to teleport. You can't just add a one way solution.

  5.  

     

    Thanks! 1 more question

     

    If ever I deactivate this

    	//Activate/Deactivate repeatable quests (1 - activated, 0 - deactivated)
    	set .quest_repeat, 0;
    

    this line will still activate right?

    	//Quest Delay (seconds)
    	//24 hours = 86400 seconds
    	set .quest_delay, 86400;
    

    ex : 1 quest finish (once) wait for 24 hours before you can use the npc again or accept a quest again.

     

    The quest delay is also deactivated if repeatable quests is deactivated. I forgot to write a note to it.

     

     

    but is it possible to activate the delay while the repeat is deactivated?

    Suggestion :

    • //AddCollection("<Quest Name>",<Archer_Class>,<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Item ID>,<Item Amount>,...);
    • //AddHunting("<Quest Name>",<Mage_Class>,<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Monster ID>,<Monster Amount>,...);

     

     

    the delay doesn't work if quest repeatable is deactivated. the delay only works if you can repeat quests.

    About the job id. This could be a added in a future update. shouldnt be hard.

  6. Thanks! 1 more question

     

    If ever I deactivate this

    	//Activate/Deactivate repeatable quests (1 - activated, 0 - deactivated)
    	set .quest_repeat, 0;
    

    this line will still activate right?

    	//Quest Delay (seconds)
    	//24 hours = 86400 seconds
    	set .quest_delay, 86400;
    

    ex : 1 quest finish (once) wait for 24 hours before you can use the npc again or accept a quest again.

     

    The quest delay is also deactivated if repeatable quests is deactivated. I forgot to write a note to it.

  7. tr0n...i wanna ask something...i want to make my collection quest trigger by changes of day...for example, for 1st set collection is for monday....2nd collection for tuesday and so on...so, can it be??

     

    The OnDay Label could work here, put "OnDayXXXX" infront of every quest and enter your day and month into it

    OnDay0101: first quest // This label is triggered on the first day of January

    OnDay0515: second quest // This one is triggered on the fifteenth day of May.

    OnDay1231: "" // This one is triggered on the last day of December.

    OnDay0229: "" // This label is only triggered when it is February 29th, so once every four years.

     

    I never tested it and I dont know if it works properly So go test it out and report if it works or not :)

     

     

    Tr0n is it possible to make it once per quest?  (you can only quest it once not twice.) and set it to per account?

     

    Check the settings after OnInit Label. Check Line: '310' Set it to 0 and you can do every quest only once. And if you want to make it account bound

    just change all character related variables to account related ones. Scripting knowledge required. If you aren't able to change it yourself open a request

    topic in proper section and I am sure someone will help you with that :)

  8. Nice tr0n, working good now. If i found anything will let you know. Btw im using only hunting Quest but all the list include 2nd job, rebirth and baby is there a way to separate them in categories?

     

    it wasn't designed for this. I would need to rework most of the script to act like that. the 2 categories are hard-scripted and not dynamic categories. Maybe I find a way to make it more dynamic in future updates.

  9. Hi Tron, We're using your quest npc for our server, We decided to make it an individual npc. We want to make 1 quest per NPC with cooldown using your script. However, there is a problem, everytime we complete the quest, the cooldown affects all other npcs. Is there a way to make the cooldown of the quest just trigger for that certain npc? Your timer seems to affect all other npcs. Thanks in advance!

     

    this isn't possible, because If you change them from character bound to npc bound, you have to know that if someone completes the quest, every other player can't do it anymore too and everyone has to wait.

     

    I could add a multiple npc feature in a future update.

  10. Kapitel 1: Alles hat einen Anfang
           1.0 - Einführung in die Welt der Scripter (Vorwort)
           1.1 - NPCs (Non-Playable-Character)
           1.2 - Script Commands
           1.3 - Befehle Teil 1 - Abläufe
           1.4 - Variablen
           1.5 - Operatoren
           1.6 - If-Abfragen
           1.7 - Labels
           1.8 - Kommentare
           1.9 - Befehle Teil 2 - Menüs und Eingaben

        
    Kapitel 2: Der Weg des Kriegers
           2.0 - Noch ein weiter Weg

           2.1 - Arrays
           2.2 - Befehle Teil 3 - Die erste Quest
           2.3 - Befehle Teil 4 - Effiziente und bessere Menüs
           2.4 - SQL
           2.5 - Verschiedene Arten von NPCs
           2.6 - Schleifen
           2.7 - Monster
           2.8 - Events


    Kapitel 3: Die geheime Kunst der Mönche
           3.0 - Willkommen im Orden

           3.1 - RID
           3.2 - Funktionen
           3.3 - Dynamische Menüs
           3.4 - Dynamische Shops
           3.5 - Dynamische Arrays
           3.x - Coming soon...

     

     

    Kapitel 1: Alles hat einen Anfang

     

    1.0 - Einführung in die Welt der Scripter (Vorwort)
    Viele neue Scripts entstehen in der Ragnarok Community. Die internationale Community tut ihr bestes daran
    stetig neue Dinge zu entwickeln und das Leben in Ragnarok so wie wir es kennen zu erweitern und den Spaß zu vergrößern.
    Es gibt viele verschiedene Arten von Scripts. Mal sind es kleine Dinge, wie ein Kafra Shop oder auch was größeres, wie ein
    Quest System. Die Möglichkeiten sind unendlich. Ich vertrete die Meinung das Scripts das Herzstück jedes Servers sind. Sie
    sind die letzte Schnittstelle zu den Spielern und die Spieler sind es die damit kommunizieren. Umso wichtiger ist es das
    sie auch funktionieren und den Spielern neue Möglichkeiten bieten Ragnarok neu zu erleben. Ich möchte euch in diese wunderbare
    Welt des Scriptens einführen und euch zeigen das in jedem von euch ein Scripter stecken kann und das auch ihr euren Teil
    zu dieser tollen Community beitragen könnt.

    Wie wird das Guide ablaufen ? - Ich werde euch Schritt für Schritt durch die Thematik führen und euch so gut es geht alles
    erklären was ihr wissen müsst. Mit Beispielen vereinfache ich das ganze und erläutere anschließend alles. Gegebenfalls werde
    ich euch danach kleine Aufgaben stellen die ihr versucht zu lösen. Hier wirkt das Trial and Error Prinzip. Versuchen und Scheitern.
    Das ganze wiederholt ihr bis es funktioniert. Der Prozess des Lernens erfordert Fehler zu machen und aus diesen Fehlern lernen wir
    und dann machen wir es besser. Es wichtig das ihr viel übt und wiederholt um euch Dinge einzuprägen.


    1.1 - NPCs (Non-Playable-Character)
    NPC, auch genannt Non-Playable-Character sind die Personen die in der Map verteilt stehen und die man als Spieler ansprechen kann.
    Jeder NPC hat ein Grundgerüst, welches ich euch hier zeige.

    Beispiel:

    prontera,156,212,7<tab>script<tab>Charlie<tab>811,{ }

    Erläuterung:
    Das ist unser Beispiel namens Charlie, so sieht das Grundgerüst für jeden NPC aus.
    Es definiert alle wichtigen Daten über den NPC. Auf welcher Map es sich befindet, wo es genau steht,
    wie es heißt und wie es aussieht. Gehen wir mal genauer drauf ein.

    prontera = Die Map auf der sich der NPC befindet
    156 = Die X Koordinate auf der Map
    212 = Die Y Koordinate auf der Map
    7 = Ausrichtung des NPCs (Die Richtung in die der NPC schaut)
    script = Typ des NPCs (Es gibt verschiedene Typen von NPCs auf die ich noch eingehen werde)
    Charlie = Name des NPCs (Was der Spieler im Spiel sieht unter dem NPC)
    811 = Aussehen des NPCs (Es werden IDs für das Aussehen verwendet)
    <tab> = Das sollte wohl klar sein. Es ist wichtig das ihr <tab> drückt und keine Leerzeichen verwendet, ansonsten funktioniert der Script nicht
    { } = Hier beginnt der Spaß, denn hier kommen später unsere Befehle und alles andere rein

     

    Map,X,Y:
    Wenn ihr wissen wollt wohin ihr euren NPC hinstellen sollt dann geht im Spiel auf die gewünschte Stelle und tippt folgendes ein: "/where".
    Hiermit erfahrt ihr auf welcher Map und X und Y Koordinate ihr euch befindet. Somit habt ihr schon so gut wie alles was ihr braucht.

    Ausrichtung des NPCs:
    [1][8][7]
    [2][  ][6]
    [3][4][5]

    An diesem Raster könnt ihr sehen welche Zahl für welche Blickrichtung steht.
    Mehr gibt es eigentlich dazu nicht zu sagen.

    Typ des NPCs:
    Es gibt wie schon gesagt verschiedene Arten von NPC Typen. Ich zeige euch die wichtigsten.

     

    script = Standard NPC Typ (Wird am häufigsten verwendet)
    shop = Shop NPC (wie der Name schon sagt handelt es sich hierbei um ein Shop)
    monster = Monster Spawn (Dieser Typ legt ein Spawn für Monster fest)
    warp = Warp Point (Ein Warp Punkt der euch zur gewünschten Map, X und Y Koordinate bringt)

    Name des NPCs:
    Den denkt ihr euch natürlich selbst aus. Es ist zu beachten das NPC Namen auch Leerzeichen enthalten dürfen.
    Maximal können 23 Zeichen für den Namen verwendet werden und jeder Name muss einzigartig sein.
    Der Server erlaubt keine doppelte Namen, da sonst Daten durcheinander kommen würden. (z.B. bei Event Labels)

    Aussehen des NPCs:
    Eine Liste der NPCs und deren IDs findet ihr z.B. hier: http://nn.nachtwolke.com/dev/npclist/

    Hinweis:
    Haltet euch immer an das Beispiel, dann kann nichts schief gehen. Falls doch mal ein Fehler auftaucht,
    dann schaut nach ob ihr auch <tab> statt Leerzeichen verwendet habt und ob alle Kommas richtig sitzen.


    1.2 - Script Commands
    Im Laufe der Zeit werde ich neue Befehle aufgreifen und ich kann euch natürlich nicht jeden Befehl ins Detail erklären, deswegen
    müsst ihr lernen die Wiki zu lesen. Dort findet ihr alle Script-Befehle bis in jedes Detail erklärt, sogar mit Beispielen.
    Das ist sehr wichtig. Ihr könnt euch nicht alle Befehle am Anfang merken, erst recht nicht wie alles funktioniert. Nutzt es
    als Nachschlagewerk und haltet euch nicht zurück. Die Wiki werdet ihr noch sehr oft verwenden müssen.
    Link: http://rathena.org/wiki/Category:Script_Command


    1.3 - Befehle Teil 1 - Abläufe
    Hier beginnt der ganze Spaß. Ihr werdet nun euren ersten sprechenden NPC erstellen.

    Beispiel:

    prontera,156,212,7    script    Charlie    811,{
    
        mes "[Charlie]";
        mes "Hallo ! Mein Name ist Charlie.";
        next;
        mes "[Charlie]";
        mes "Ich heiße euch willkommen!";
        close;
    
    }
    

    Erläuterung:
    Sobald ihr den NPC anklickt wird der Script zwischen den { } ausgeführt. Das ist der sogenannte Script-Block. Dieser enthält
    den kompletten Script des NPCs. Ich erläutere euch nun die Befehle die ich hier verwendet habe.

    mes "<message>";
    Öffnet ein Fenster mit dem folgenden Text "<message>". Die beiden "" beinhalten den Text der ausgegeben werden soll und mit ;
    beenden wir den Befehl. Ein mes steht für eine Zeile. Bedeutet, wenn ihr eine neue Zeile anfangen wollt verwendet ein weiteres mes.
    Wenn ihr in der Wiki schaut werdet ihr verschiedene Varianten finden.
    Link: http://rathena.org/wiki/Mes

    next;
    Zeigt euch ein Button am unteren Rand des Fensters an. Bedeutet das Script pausiert und wartet darauf bis ihr "Next" klickt.
    Tut ihr das wird das Fenster gesäubert und ihr könnt es wieder neu füllen. Somit könnt ihr eure Texte strukturieren und leserlicher
    machen, (auch segmentieren genannt), und dem Spieler Zeit geben Stück für Stück den Text zu lesen.
    Stellt euch zum Beispiel eine Unterhaltung mit dem NPC und dem Spieler vor, sieht besser aus und ist Spieler-freundlicher.
    Link: http://rathena.org/wiki/Next

    close;
    Dieser Befehl zeigt euch ein Close Button am unteren Rand des Fensters an. Wenn ihr es klickt wird das Fenster geschlossen und der Script beendet.
    Wenn ihr nach diesem Befehl noch mehr Befehle schreibt werden diese nicht ausgeführt, deswegen wird close ausschließlich nach mes und next verwendet.
    Link: http://rathena.org/wiki/Close

    Der Server arbeitet Schritt für Schritt jede Zeile ab. Stellt euch vor ihr gibt einem Kleinkind vor was es zu tun hat.
    Gar nicht mal so schwer oder ?

    Lernaufgabe:
    Erstelle ein NPC namens Harald, welches dem Spieler sagt das er ihn in Ruhe lassen soll. Danach wird das Script normal beendet.
    Wenn ihr wollt probiert es mit verschiedenen Namen und verschiedenen Texten und wenn ihr wollt auch an verschiedenen Orten.
    Ihr könnt Harald auch ein anderes Aussehen verpassen. Probiert alles aus und macht euch mit dem Grundgerüst und den Befehlen vertraut.

    Hinweis:
    Vergesst nicht das ; nach jedem Befehl zu verwenden. Ihr werdet es am Anfang sehr oft vergessen. Prägt es euch also schon früh ein!
    Das ; wird verwendet um ein Befehl zu beenden.


    1.4 - Variablen
    Beim Scripten wird der Punkt kommen wo ihr Variablen verwenden müsst. In diesen könnt ihr Informationen speichern, sie aufrufen und
    verarbeiten. Ich werde euch die verschiedenen Arten von Variablen und deren Limitationen zeigen.

    Integer:
    Sind sogenannte Ganzzahlen z.B. (0, 1, 2, 3, 592, -235, -2, etc.) Zu beachten ist das wenn ihr Kommazahlen verwendet, diese einfach
    geschnitten werden. Bedeutet wenn ihr 5.6 eintippt. Dann wird der Server nur die 5 benutzen und nicht das was hinter dem Komma steht.
    Später ist das wichtig zu beachten wenn ihr rechnet und Irgendetwas zum Beispiel durch 2 teilen wollt. Behaltet dies im Hinterkopf.

    String:
    Sind sogenannte Zeichenketten z.B.: "Hallo", "Dies ist eine Botschaft" oder auch Buchstaben wie "a" und "b".
    Beinhaltet alle euch bekannten Zeichen von A bis Z und Wörter, Sätze, Sonderzeichen und auch Zahlen. (Mit den Zahlen kann man dann aber nicht rechnen!)
    Hier ist zu beachten das Strings immer in "" geschrieben werden müssen, ansonsten werden diese nicht erkannt und es gibt Fehlermeldungen.

    Hier nun die verschiedenen Typen die man in der Athena Scripting Sprache festlegen kann:

    variablenname = Eine permanente Charakter basierende Variable
    @variablenname = Eine temporäre Charakter basierende Variable
    .variablenname = Eine permanente NPC Variable
    .@variablenname = Eine temporäre NPC Variable
    $variablenname = Eine globale permanente Variable
    $@variablenname = eine globale temporäre Variable
    #variablenname = eine permanente Account basierende Variable

    Ein $ and das Ende einer Variable liefert eine String Variable die man z.B. für die Input funktion gebrauchen kann.
    z.B.: @var$ <--- Eine temporäre String Variable mit dem Namen var.

    Temporär bedeutet das die Variable gelöscht wird sobald der Server resetted wird.
    Permanent bedeutet das die Variable bleibt selbst wenn der Server resetted wird.
    Global bedeutet das sie für den Server gilt und nicht nur für den Charakter oder Account.
    Account bassierend bedeutet das sie für den Account gesetzt wird. (Nützlich wenn man Quests auf nur 1x pro Account reduziern will)

    Bestimmt wollt ihr nun wissen wie man Variablen benutzt. Dafür brauchen wir den Befehl "set".
    Wie man ihn benutzt und in ein Script einbaut zeige ich euch jetzt.

    Beispiel:

    prontera,156,212,7    script    Charlie    811,{
    
        mes "[Charlie]";
        mes "Hallo ! Mein Name ist Charlie.";
        next;
        mes "[Charlie]";
        mes "Ich heiße euch willkommen!";
        set @geredet, 1;
        close;
    
    }
    

    Erläuterung:
    Dies ist unser Beispiel von vorhin, aber etwas ist anders. Wir haben eine temporäre Charakter Variable namens "geredet" erstellt
    und eine 1 eingespeichert. Nun könnten wir am Anfang abfragen ob die Variable auf 1 gesetzt ist und wenn ja dann würde statt diesem
    Text ein ganz anderer Text erscheinen. Dafür brauchen wir die sogenannten If-Abfragen, zu denen wir schon bald kommen werden.

    set;
    Speichert einen Wert in eine Variable. Ist die Variable nicht vorhanden wird sie erstellt.
    Ist sie jedoch schon vorhanden, wird der alte Wert mit dem neuen Wert überschrieben.
    Link: http://rathena.org/wiki/Set

    Wir können Variablen auch abrufen und diese in "mes" ausgeben lassen.

    Beispiel:

    prontera,156,212,7    script    Charlie    811,{
    
        mes "[Charlie]";
        set @geredet, 1;
        mes "Die Variable ist auf " + @geredet + " gesetzt";
        close;
    
    }
    

    Erläuterung:
    Um eine Variable aufzurufen reicht es einfach den Namen anzugeben. Das "+" ist ein Operator, aber dazu kommen wir gleich.
    Ihr seht, das ich die Variable mit dem Rest des Textes ganz einfach verbunden habe indem ich das "+" dazwischen geschrieben habe.
    Als hätte ich es zusammengerechnet. (In diesem Fall verbunden)


    1.5 - Operatoren
    Ich behandle in diesem Thema zwei Arten von Operatoren. Die mathematischen und die logischen Operatoren. Bei den logischen
    Operatoren gibt es nochmal zwei verschiedene Arten, unzwar die logischen Vergleiche und die logischen Verknüpfungen.

    mathematische Operatoren:
    + Addiert Zahlen
    - Subtrahiert Zahlen
    * Multipliziert Zahlen
    / Dividiert Zahlen (Hinweis: Nicht vergessen, bei einem Ergebnis von z.B 5.6 wird 5 rauskommen, da der Server nur Ganzzahlen verarbeitet)
    % Rest einer Division, z.B.: 7%2 = 1

    Diese Operatoren sind ausschließlich für Integer zu verwenden. Die einzige Ausnahme ist "+", wie im Beispiel vorhin kann man damit
    Variablen mit Texten oder sogar Texte mit Texten verbinden.

    logische Operatoren (Vergleiche):
    == Trifft zu wenn beide Seiten gleich sind. [ 2==2 (wahr) 2==1 (falsch) ]
    != Trifft zu wenn beide Seiten nicht gleich sind. [ 1==1 (falsch) 2==1 (wahr) ]
    >= Trifft zu wenn der erste Wert größer oder gleich ist als der zweite Wert. [ 2>=2 (wahr) 3>=2 (wahr) 1>=2 (falsch) ]
    <= Trifft zu wenn der erste Wert kleiner oder gleich ist als der zweite Wert. [ 1<=2 (wahr) 1<=1 (wahr) 2<=1 (falsch) ]
    > Trifft zu wenn der erste Wert größer ist als der zweite Wert. [ 2>1 (wahr) 1>2 (falsch) ]
    < Trifft zu wenn der erste Wert kleiner ist als der zweite Wert. [ 1<2 (wahr) 2<1 (falsch) ]

    logische Operatoren (Verknüpfungen):
    && UND
    || ODER
    ! NICHT

    Diese Operatoren werden einzig und allein für If-Abfragen verwendet.


    1.6 - If-Abfragen
    Jetzt wird es spannender. Nachdem wir gelernt haben was Variablen und Operatoren sind kommen wir nun zu den If-Abfragen. Hier
    werden wir sowohl variablen als auch logische Operatoren verwenden. Zudem lassen sich auch Funktionen mit Rückgabewerten verwenden,
    jedoch behandeln wir diese erst später.

    if;
    Es handelt sich dabei um eine logische Abfrage. Dabei werden Werte mit Hilfe von logischen Operatoren abgeglichen und auf ihre
    Wahrheit oder Falschheit überprüft. Je nach Resultat wird der darauf folgende Codeblock ausgeführt oder nicht.
    Link: https://rathena.org/wiki/If

    Beispiel:

    prontera,156,212,7    script    Charlie    811,{
    
        if(@geredet == 1)
        {
            mes "[Charlie]";
            mes "Habe ich dir meinen Namen nicht schon verraten ?";
            next;
            mes "[Charlie]";
            mes "Na los, verschwinde endlich!";
            close;
        }
        else
        {
            mes "[Charlie]";
            mes "Hallo ! Mein Name ist Charlie.";
            next;
            mes "[Charlie]";
            mes "Ich heiße euch willkommen!";
            set @geredet, 1;
            close;
        }
    }

    Erläuterung:
    Wie ihr sehen könnt ist am Anfang von unserem netten Kerl Charlie eine If-Abfrage. Im Grunde wird überprüft ob die Variable
    "@geredet" auf 1 gesetzt ist, wenn diese Aussage WAHR ist, wird der Codeblock darunter zwischen den geschweiften Klammern
    ausgeführt. Danach kommt ein "else" welches auf Deutsch "ansonsten" bedeutet. Im Klartext: Ansonsten wenn die Aussage NICHT WAHR,
    also UNWAHR ist, führe den Codeblock unter "else" aus. Ein "else" ist kein muss, jedoch kommt es darauf an wie euer Script aufgebaut
    sein soll. In diesem Fall wollen wir entweder das eine ODER das andere ausgeben lassen. Nochmal: Wenn ihr den NPC das erste mal anspricht
    wird der Codeblock unter "else" ausgefuhrt weil @geredet noch nicht auf 1 gesetzt wurde. Das wird es dann dort. Beim zweiten mal Ansprechen
    ist die Aussage WAHR und der Codeblock unter "if" wird ausgegeben. Stellt euch das wie eine Gabelung vor, entweder der eine oder der andere Weg.

    Mehrere Verzweigungen:
    Es ist auch möglich mehrere If Abfragen zu verketten mit dem "else if" befehl, statt eines "else" benutzt ihr "else if"" und macht
    so noch eine abfrage. Die letzte wird dann ein "else" falls keine der vorherigen Abfragen zu trifft.

    Ergänzung:
    Es ist möglich alle Arten von Variablen miteinander zu vergleichen solange diese den selben Datentypen haben, heißt: string mit string vergleichen.
    Int mit Int vergleichen und so weiter. Ansonsten erhaltet ihr nur Fehler. Liest euch zudem unbedingt die Wiki Seite von if durch, damit ihr es besser versteht.

     

     

    1.7 - Labels

    Labels werden heutzutage so gut wie kaum noch verwendet. Man bezeichnet es als unsauber. Es kann in einigen Situationen jedoch hilfreich sein
    und sollte niemals ganz vergessen werden. Wir werden dafür ein neuen Befehl benötigen den ich euch zeigen werde.

    goto <label>;
    Mit "goto" kann man an ein label springen. Heißt man springt an eine bestimmte Zeile im Script wo euer Label steht.
    Für mehr Informationen besucht die Wiki Seite.
    Link: https://rathena.org/wiki/Goto

    Beispiel:

    prontera,156,212,7    script    Charlie    811,{
    
        if(@geredet == 1)
        {
            goto L_geredet;
        }
        
        mes "[Charlie]";
        mes "Hallo ! Mein Name ist Charlie.";
        next;
        mes "[Charlie]";
        mes "Ich heiße euch willkommen!";
        set @geredet, 1;
        close;
        
    L_geredet:
        mes "[Charlie]";
        mes "Habe ich dir meinen Namen nicht schon verraten ?";
        next;
        mes "[Charlie]";
        mes "Na los, verschwinde endlich!";
        close;
    }

    Erläuterung:
    Kommt euch das bekannt vor ? Genau es ähnelt dem "if" und "else" Beispiel. Statt das wir ein "else" verwenden, springen wir
    zur Zeile wo "L_geredet:" steht. "goto" erlaubt uns quasi einfach hin und her zu springen und von dort aus läuft der Script
    ganz normal weiter nach unten. Man kann mit dieser Methode auch aus Schleifen springen nachdem ein gewünschter Zustand erreicht
    wurde. Die Möglichkeiten sind unendlich.

    Lernaufgabe:
    Probiert euch mal selbst daran und baut ein paar Labels in euer Script und versucht hin und her zu springen.

     

     

    1.8 - Kommentare

    Eines der nützlichsten Werkzeuge in der Informatik. Auch wenn sie selbst kein Einfluss auf eueren Script haben, werden sie
    dazu verwendet euch das Leben leichter zu machen. Wie der Name schon sagt sind es Kommentare. Sie dienen euch dazu Notizen
    im Script zu machen oder euren Script zu erklären und leserlicher zu machen und haben dabei kein Einfluss auf den Script selbst.

    Beispiel:

    prontera,156,212,7    script    Charlie    811,{
    
    
        //Hier frage ich ab ob die Variable @geredet auf 1 gestellt ist
        if(@geredet == 1)
        {
            goto L_geredet; //Wenn ja springe ich zum Label L_geredet
        }
        
        //Diese Stelle wird nur ausgeführt wenn wir nicht zu L_geredet gesprungen sind und die If-Abfrage UNWAHR war.
        mes "[Charlie]";
        mes "Hallo ! Mein Name ist Charlie.";
        next;
        mes "[Charlie]";
        mes "Ich heiße euch willkommen!";
        set @geredet, 1;
        close;
    
    //Hier steht das Label. Man kann es sich als eine Art Checkpoint vorstellen an den man springen kann.
    L_geredet:
        mes "[Charlie]";
        mes "Habe ich dir meinen Namen nicht schon verraten ?";
        next;
        mes "[Charlie]";
        mes "Na los, verschwinde endlich!";
        close;
    }

    Erläuterung:
    Wie ihr sehen könnt beginnt man ein Kommentar mit "//" Damit hat die Zeile kein Einfluss mehr und steht nur als Text da für euch.
    Sehr hilfreich also nutzt es auch ! Im Laufe der Zeit lernt ihr sparsam aber effizient damit umzugehen. Ihr wollt euren Script
    damit ja nicht zukleistern.

     

     

    1.9 - Befehle Teil 2 - Menüs und Eingaben

    - coming soon...

     

    _____________________________________________________________________________________

    Dieses Guide basiert auf dem veralteten Guide aus 2007 welches erstmalig auf eAthena veröffentlich wurde.

    Ich selbst habe durch diesen Guide scripten gelernt. Ich habe dieses Werk als Grundlage für meinen Guide

    genommen. Die Struktur ist ähnlich oder wurde verändert, der Inhalt jedoch ist von mir verfasst und basiert

    auf der aktuellen rAthena Wiki. Link: Klick mich

    • Upvote 7
×
×
  • Create New...