Multiple System Including Core v1.1 (MSIC)

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo Breadfish-User,
    ich darf ihnen voller Stolz ein neues System vorstellen, welches ihnen jede Menge Vorteile verschafft.
    Ich hab heute ein ganz tolles System entwickelt, welches vielen Projekten, Scriptern und Entwicklern eine Erleichterung zum Scripten werden soll.


    Wieso sollte das Scripten schwer sein? Wieso sollte man bei mehreren Scripten gleich komplette GameModes versenden mit den immer wieder kommenden Gedanken, dass der andere einfach ohne jede Spur verschwindet?


    Bei diesen Script geht es darum, dass mehrere Systeme zusammengefasst werden und das alles zu einen Filterscript.


    Aber wieso nicht einfach für jedes System ein neues Filterscript erstellen?
    Ein Grund für dieses System ist, dass man unendliche viele Systeme haben kann, bei Filterscripten nicht.
    Hier ist eine grafische Vorstellungsmöglichkeit und weitere Informationen:


    [tabmenu]


    [tab='Grafik', 'http://cdn1.iconfinder.com/data/icons/X-Mac/web_design/png/32/graphic_design.png']
    Grafik

    [tab='Vorteile', 'http://cdn5.iconfinder.com/data/icons/pixelo/32/lamp.png']
    Vorteile
    1. Eine unbegrenzte mögliche Anzahl von Systemen (bei FS'en begrenzt)
    2. Du brauchst bei den System-Dateien garnichts #include'en
    3. Selbstbestimmbare System-Priorität
    4. Einfaches bearbeiten von einen System
    5. Man muss niemals das GameMode neustarten
    6. Jedes System ist seperat zu anderen Systemen
    7. Man muss nicht bei Problemen Teile von anderen Systemen preisgeben
    8. Bei mehreren Scripten muss nicht gleich das ganze Script versendet werden
    9. Man muss nicht jedes Callback in den System-Dateien nutzen
    10. Keine Callback-Hooks nötig
    11. Einfaches hinzufügen von Systemen
    12. Einfaches Entfernen von Systemen
    13. Statistik Möglichkeit (Anzahl der Aufrufe der einzelnen Callbacks)
    14. Debug Mode
    15. Die Script-Liste wird beim Start automatisch nach Priorität geordnet
    16. Nach dem Kompillieren muss nur das Filterscript hochgeladen werden


    [tab='Download', 'http://cdn2.iconfinder.com/data/icons/crystalproject/32x32/apps/ark.png']
    [subtab='Information']
    Download
    Es gibt 2 Varianten vom System.
    Beim 'Full-EmptyServer' wird ein kompletter Serverordner geliefert ohne speziellen Gamemode und ohne spezielle Filterscripts.
    Widerrum beim 'Only-System' werden nur die benötigten Dateien gelieft, welche für das System benötigt werden.

    [subtab='Full-EmptyServer-Package']
    Full-EmptyServer-Package
    Download via MediaFire
    Download via Uploaded.to
    Download via MegaUpload



    Installation:
    1. Datei herunterladen
    2. Den Selbstentpackungsvorgang starten
    3. Serverordner anpassen (normalerweise nicht nötig)
    4. Server starten


    [subtab='Only-System-Package']
    Only-System-Package
    Download via MediaFire
    Download via Uploaded.to
    Download via MegaUpload


    Installation:
    1. Datei herunterladen
    2. Den Selbstentpackungsvorgang starten
    3. Den gesamten Inhalt in das eigene Serververzeichnis übertragen
    4. Die Datei 'server.cfg' öffnen und bei 'filterscripts' folgendes hinzufügen: '_atomwork'
    5. Server starten


    [tab='Anleitungen', 'http://cdn3.iconfinder.com/data/icons/49handdrawing/32x32/info.png']
    [subtab='System(e) hinzufügen']
    System(e) hinzufügen
    Folgende Dateien werden benötigt:
    • filterscripts/_atomwork.pwn


    Anleitung:
    1. Das Script '_atomwork.pwn' öffnen.
    2. Das System einbeziehen. (Zeile(n): 4-6)

    Code
    #include "../_atomwork/_Scripts/_Name.pwn"


    3. Zu 'gListOfScripts' gehen. Neue Zeile anlegen.

    Code
    { "Register", 3},
    { "Name", 4}


    4. Falls die Priorität höher ist als die Ursprüngliche dann (Anfang: 3)

    Code
    #define HIGHEST_PRIORITY    4


    5. Die Systemanzahl erhöhen (Anfang: 3)

    Code
    #define MAX_SCRIPTS 4


    6. Filterscript speichern und das Script Kompillieren.


    Falls Ihr noch keine System-Datei habt, dann könnt ihr sie so erstellen:
    1. Die Template-Datei aufrufen:

    Code
    samp03csvr\_atomwork\_template.pwn


    2. Oben im Dateikopf das Makro bearbeiten
    3. Dort, wo 'Name' steht, die Systembezeichnung reinschreiben von:
    /
    5. Datei speichern und in den folgenden Ordner reinstecken: '_atomwork/_Scripts/_Name.pwn'
    6. WICHTIG! Kein Kompillieren der Systemdatei (Am Ende braucht ihr nur die _atomwork.amx hochzuladen)


    Sie haben erfolgreich ein neues System hinzugefügt!
    [subtab='System(e) entfernen']
    System(e) entfernen
    Folgende Dateien werden benötigt:
    • filterscripts/_atomwork.pwn


    Anleitung:
    1. Das Script '_atomwork.pwn' öffnen.
    2. Oben im Dateikopf die #include Zeile entfernen oder auskommentieren
    #include "../_atomwork/_Name.pwn"
    3. Falls das Script die höchste Priorität hatte, die Maximale Prioritätsstufe runtersetzen

    Code
    #define HIGHEST_PRIORITY 3


    4. Die Systemanzahl verringern
    /
    5. Zu 'gListOfScripts' gehen. Die Zeile mit dem System entfernen

    Code
    { "Register", 3}, <-- Nicht vergessen dann das Komma zu entfernen
    { "Name", 4} <-- Entfernen


    6. Man kann, muss man aber nicht, das System entfernen


    Info: Es sollte kein Fehler ausgegeben werden, falls ihr temporär die Systemzeile unter 'gListOfScripts' auskommentiert. (Untested)
    Sie haben erfolgreich ein System entfernt!
    [subtab='Callback(s) hinzufügen']
    Callback(s) hinzufügen
    Es ist sehr einfach ein Eigenes Callback oder ein Callback von einen Plugin hinzuzufügen.


    Folgende Dateien werden benötigt:
    • filterscripts/_atomwork.pwn

    • _atomwork/_atomscripts.pwn


    Anleitung:
    1. Das Script '_atomwork.pwn' öffnen.
    2.
    Zu 'ENUM_SCORENAMES' gehen. Neue Zeile am Ende anlegen:

    Code
    eOnVehicleStreamIn, eOnVehicleStreamOut, eOnDialogResponse, eOnPlayerClickPlayer,meinCallback  <-- Am Ende der Auflistung kein Komma benutzen


    Jetzt müsst ihr nur noch das Callback in der _atomscripts.pwn Datei hinzufügen
    In der Datei ist bereits eine Vorlage, wie das Callback am Ende aussehen muss.

    Sie haben erfolgreich ein neues Callback hinzugefügt!
    [subtab='Callback(s) entfernen']
    Callback(s) entfernen
    Es ist sehr einfach ein Callback zu entfernen.


    Folgende Dateien werden benötigt:
    • filterscripts/_atomwork.pwn
    • _atomwork/_atomscripts.pwn

    Anleitung:
    1. Das Script '_atomwork.pwn' öffnen.
    2.
    Zu 'ENUM_SCORENAMES' gehen. Die Callback-Zeile entfernen:

    Code
    eOnVehicleStreamIn, eOnVehicleStreamOut, eOnDialogResponse, eOnPlayerClickPlayer,
    meinCallback


    Code
    eOnVehicleStreamIn, eOnVehicleStreamOut, eOnDialogResponse, eOnPlayerClickPlayer <-- Komma nicht vergessen



    Jetzt nur noch das Callback aus dem Script '_atomscripts.pwn' entfernen, falls gewünscht, und NUR das Filterscript '_atomwork.pwn' Kompillieren.

    Sie haben erfolgreich ein Callback entfernt!
    [tab='Quellcode', 'http://cdn5.iconfinder.com/data/icons/fatcow/32x32/source_code.png']
    [subtab='Filterscript']
    Filterscript
    Pastebin
    [subtab='Callback-Script']
    Callback-Script
    Pastebin
    [subtab='System-Datei-Template']
    System-Datei-Template
    Pastebin

    [tab='Videos', 'http://cdn1.iconfinder.com/data/icons/nuvola2/32x32/apps/konqsidebar_mediaplayer.png']
    [subtab='Plugins verwenden']
    [video]

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
    [/video]
    [subtab='Callback(s) hinzufügen']
    [video]
    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
    [/video]
    [subtab='Callback(s) entfernen']
    [video]
    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
    [/video]
    [subtab='System(e) hinzufügen']
    [video]
    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
    [/video]
    [subtab='System(e) entfernen']
    [video]
    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
    [/video]
    [tab='Add für v1.1', 'http://cdn2.iconfinder.com/data/icons/basicset/plus_32.png']
    Die folgende Funktion ins Script '_atomwork.pwn' einfügen und dannach das Script neukompillieren.

    new gCallbackScore[ENUM_SCORENAMES];


    forward getCallbackScore(ENUM_SCORENAMES:enum_field);
    public getCallbackScore(ENUM_SCORENAMES:enum_field)
    {
    return (gCallbackScore[enum_field]);
    }


    /* Since v1.1:
    To add a new Callback, open the _atomscripts.pwn and put there your callback.
    */


    Anwendung:

    new aufrufe_OnPlayerConnect = 0;
    aufrufe_OnPlayerConnect = CallRemoteFunction("getCallbackScore", "i", _:eOnPlayerConnect);


    Unglücklicherweise hab ich etwas dabei nicht beachtet. Ihr müsst das Script so anpassen, dass die #include Zeilen dann unter dem SCORE-Abschnitt liegen:

    /* Since v1.1:
    To add a new Callback, open the _atomscripts.pwn and put there your callback.
    */
    #endif


    #include "../_atomwork/_Scripts/_Check.pwn"
    #include "../_atomwork/_Scripts/_Login.pwn"
    #include "../_atomwork/_Scripts/_Register.pwn"

    [/tabmenu]


    Freundliche Grüße
    Martez


    Viel Spaß beim Nutzen & Entwickeln.

    8 Mal editiert, zuletzt von d30af26d () aus folgendem Grund: Neue Version & Video & Neue Score Funktion

  • Werde es natürlich noch testen , Aber vom ersten Eindruck her sehr gut ... werde aber
    noch eine genauere Bewertung abgeben.

  • Kurze Information: Die Priorität dient dazu, welches System zuerst geladen werden soll. Es dürfen ebenso Systeme die selbe Prioritätsnummer haben.


    Freundliche Grüße
    Martez

  • Wieso ist das ne .exe ?
    Sry aber so lad ich mir das nich ^^


    //Edit:

    Bei sämtlichen Veröffentlichungen (egal ob Gamemode, Filterscriopt, Tools, Plugins ,..) MUSS der Quellcode beigelegt oder verlinkt werden, dies dient dem Schutz der User um keine Schadsoftware zu verbreiten. Über Ausnahmen lässt sich diskutieren. Falls der Code für Pastebin o.ä. zu lang ist besteht die Verpflichtung diesen als normale Textdatei darzulegen.

    The fact is, I am right. And if you think I'm wrong, you are wrong.

    Einmal editiert, zuletzt von maddin ()

  • Wurde entfernt da es eine ausführbare datei war, und bei solchen muss der quellcode beigelegt werden. Sonst kann es sein das hier jemand Viren usw mit rein packt, die leute sich das unwissend runterladen und ausführen und dann den rotz auf ihrem Rechner haben. Hatten wir ja alles schon, deshalb Gibt es die Regel das alles ohne Quellcode entfernt wird, zumindest bis dieser nachgereicht wurde.

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Ja und wie sieht jetzt damit aus :| packt der denn Quellcode rein oder nicht ?

  • Der Hintergrundgedanke bei diesen System war, dass man seine System seperart zu seinen System halten kann und somit mehr Ordnung ist, man viel einfacher sein Problem lösen kann usw.

  • Also ich finde es einfach schlecht überdacht dies als selbstentpackende Ausführungsdatei zu erstellen. Somit werden alle die kein Windows besitzen ausgeschlossen dies zu Benutzen. Daher nutz bitte ein einfaches Packverfahren wie als *.zip, oder sonstwas.


    Mit Umständen habe ich es doch nun entpackt, jedoch sehe ich das es sehr statisch aufgebaut ist und es daher etwas mühselig ist neue Callback´s einzufügen.


    Unteranderem ist dir auch wohl nicht im klaren, dass public-Namen maximal 32 Zeichen besitzen dürfen und es daher mit 'MAX_SCRIPTNAME_LENGTH' bei manchen Callback´s Probleme auftauchen könnten.


    Eine kleine Feinheit anzumerken ist, dass manche Definitionen 'üblich' sind und es sozusagen mit Überschneidungen kommen könnte, wo andere wieder diesen Thread zusammen (Beispiel DEBUG_MODE). Daher wäre es ratsam vor den Definitionen eindeutige TAGS zu verwenden. Bsp. ATC_DEBUG_MODE


    Ansonsten da dies die erste Veröffentlichung von so einem Konzept hier im Forum ist, sieht es einigermaßen gut aus.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Ehm entschuldige beim letzten Punkt der Feinheit ist es vielleicht nicht unbedingt notwendig dies einzuführen, da ich grad mich verlesen hab. Bei Include´s wäre es wichtig, aber bei Filterscripts nicht ^^

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Es könnte sich trotzdem mit den Makros aus den einzelnen Systemen überschneiden. - Zum Glück wird da eine Compiler-Warnung herausgegeben.


    -- Version 1.1 ist nun vorhanden.

    Einmal editiert, zuletzt von d30af26d ()

  • Jaein. Es soll in einer Linie die begrenzte Anzahl an Filterscripten übergehen.
    Kurz gesagt: Das Filterscript sammelt halt die ganzen System .pwn Dateien (#include) und das Filterscript ruft per CallLocalFunction die einzelnen Callbacks aus den Systemen, welche nach dem include'en bereits im Filterscript drin sind.
    Es ist halt wie ein getrennter GameMode, der ein Filterscript ist.


    Jedoch läuft der eigentliche GameMode parallel zum Filterscript.
    _______________


    Schau oben die Grafik an.
    Die System werden per #include in das FS geladen und das FS füttert diese mit den im FS #include'deten Native-Funktionen bzw. Normalen Funktionen.
    Während das Filterscript läuft, ruft dieses durch seine Standart-Callbacks, die Callbacks aus den System, welche bereits im Filterscript drin sind.


    €dit: Wenn man eine Variable außerhalb der Callbacks in den System erstellt. Ist diese ebenso Global und erreichbar unter den anderen Systemen.

  • pastebin? oder bin ich blind. Ansonsten gut, ich arbeite aber leiber mit filterscipten als system unterteilung so hat man auch mit 5/6 scriptern kein problem gleichzeitig zu scripten :)