BBCode sqf Scriptformat, Woltlab Forum

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • BBCode sqf Scriptformat, Woltlab Forum

    Hallo,

    hoffe meine Fragen sind hier erwünscht und auch im richtigen Forum.

    Folgendes:
    Ich betreibe eine (kleine) Editing und Scripting Supportseite für einen Taktikshooter bzw. Militärsimulation, es geht also vorwiegend um den Austausch und die Darstellung von Code im Forum. :)
    Das Spiel bzw. die Gameengine benutzt eine spezielle Scriptsprache (.sqf), die sich stark an c++ orientiert.
    Nun würde ich gerne einen BBCode für dieses .sqf Scriptformat erstellen, mit speziellem Syntaxhighlighting und einer Tooltipanzeige via mouseover. Ich muss aber gleich dazusagen, dass ich keinen Schimmer hab wie ich sowas am Besten anfange.

    Was Coding generell angeht bin ich kein absoluter Noob, jedoch sind sql, php absolutes Neuland für mich. Vielleicht mag mich ja jemand auf dem Weg zum .sqf BBCode begleiten ?
  • Also im speziellen geht es ja um BBCodes für das Woltlab Burning Board.

    Du musst also zum einen Wissen wie du ein Plugin für das Burning Board entwickelst, zum anderen wie du den Parser schreibst.
    Deswegen solltest du das ganze auch in zwei Milestones angehen

    Suche dir ein existierendes Plugin, das schon nahe an dem dran ist, was du kennst.
    Nehmen wir zum Beispiel den Spoile BBCode, das ist von RouL, der schreibt gute Plugins
    woltlab.com/de/pluginstore/plugin.html?pluginID=15

    Du lädst dir die Datei also herunter und entpackst sie.
    Dann änderst du die package.xml ab und packst einen Paketnamen in die Datei.
    Nun kannst du sie wieder als Archiv packen und über den Woltlab Admin installieren.

    Nächster Schritt: Syntax Highlighting.
    Während der Entwicklung musst du das Paket immer wieder deinstallieren, neu packen und wieder installieren.
    Schau dir die einzige enthaltene PHP Datei an, dort muss dein Parser rein. Du kannst dir den HTMLParser mal als Vorlage anschauen.
    Alternativ halte mal GeSHi ausschau.

    Feinschliff:
    bbcode.xml und grafiken austauschen.
  • Hallo,

    vielen Dank für die Antworten und auch für die Anpassung des Threadnamens, hätte ich erwähnen müssen das es für Woltlab Board ist, klar :)

    Ich habe schon diverse Sachen ausprobiert, unter anderem auch den BBCode für c++ von Jenso versucht für mich zu zerlegen, um da evtl. spicken zu können. Auch das c++ Plugin ist abhängig von GeSHi, welches im Woltlab Board ja auch standartmäßig beiliegt.

    Leider habe ich keinen Plan wie ich Anfangen soll. ?(

    Um die Scriptbefehle der Gameengine eigenen Scriptsprache highlighten zu können, müsste doch auch GeSHi um jene erweitert werden, oder? Ich denke ich werde die Umsetzung ohne Hilfe nicht hinbekommen, da es mir am nötigen Wissen fehlt.
  • Hast du dich an meinen 2 Phasen Plan gehalten und bist mit Phase 1 fertig?

    Wenns es nur noch an der Sprache liegt, hast du dir die GeSHi Syntax Dateien mal angeschaut. Die sind gar nicht so kompliziert.
    Und poste doch mal ein Beispielcode. Bestimmt orientiert sich SQF an anderen Sprachen und ist zum großen Teil schon dadurch abgedeckt.

    Lg
  • Hallo Torben,

    die sqf Syntax der ArmA 2 Engine ist mit c /c++ verwandt, teilweise werden entsprechende Befehle durch das c++ plugin auch abgedeckt. Es sind jedoch eine Vielzahl von engineeigenen Scriptbefehlen, die ich highlighten möchte. Eine liste der ArmA 2 Scriptbefehle und eine Übersicht über das ArmA 2 scripten generell.

    Es lassen sich preprozessor Commands ähnlich wie bei C++ verwenden.

    Meine Fragestellung ist nach wie vor die, wohin mit den Scriptbefehlen? Wo müssen die reingepackt werden, um als "zu highlightendes Objekt" erkannt zu werden.

    Ich habe mir das C++ BBCode Plugin von Jenso entpackt, ebenso das Plugin von GeSHi Team, und versucht aus der Struktur schlau zu werden, allerdings ohne Erfolg.

    Beispielcode für sqf Syntax:

    Quellcode

    1. /*
    2. fFindNearEnemies.sqf
    3. Description / Beschreibung:
    4. returns all enemys of unit within a distance
    5. gibt alle Feindeinheiten aus, welche in bestimmter Distanz zu einer bestimmten Einheit sind
    6. Parameters /Parameter:
    7. _this select 0: unit (Object)
    8. _this select 1: distance (Number) Optional
    9. initialisation / pre-compile:
    10. fFindNearEnemies = compile preprocessFileLineNumbers "fFindNearEnemies.sqf"
    11. exection / Aufruf:
    12. _nearEnemies = _recon call fFindNearEnemies
    13. Returns/Ausgabe:
    14. Array - enemy units
    15. Array - Feindeinheiten
    16. */
    17. private ["_unit", "_dist", "_nearUnits", "_nearEnemies"];
    18. _unit = _this select 0;
    19. _dist = viewdistance;
    20. /*_dist = _this select 1;*/ //optinal, default is viewdistance
    21. _nearUnits = nearestObjects [_unit, ["LandVehicle", "CAManBase"], _dist];
    22. _nearEnemies = [];
    23. {
    24. if ((alive _x) && ((side _x) getFriend (side _unit) < 0.6) && (_x != _unit)) then
    25. {
    26. _nearEnemies set [count _nearEnemies, _x];
    27. };
    28. } foreach _nearUnits;
    29. /*return / Ausgabe*/
    30. _nearEnemies
    Alles anzeigen


    Vielen Dank für die bisherige Hilfestellung :)
  • Onkel Bo schrieb:

    Meine Fragestellung ist nach wie vor die, wohin mit den Scriptbefehlen? Wo müssen die reingepackt werden, um als "zu highlightendes Objekt" erkannt zu werden.
    Ich habe mir das C++ BBCode Plugin von Jenso entpackt, ebenso das Plugin von GeSHi Team, und versucht aus der Struktur schlau zu werden, allerdings ohne Erfolg.


    Also wie gesagt, du musst folgendes ändern:
    * package.xml -> <package name="com.woltlab.community.roul.bbcode.spoiler"
    * bbcodes.xml -> <bbcode name="spoiler"> und <classname>SpoilerBBCode</classname>
    * dann musst du die Klasse unter "files.tar > lib > data > message > bbcode > SpoilerBBCode" entsprechend umbenennen

    auch den Inhalt musst du ändern:

    Quellcode

    1. /**
    2. * @see BBCode::getParsedTag()
    3. */
    4. public function getParsedTag($openingTag, $content, $closingTag, BBCodeParser $parser) {
    5. return $this->getHighlighted($content);
    6. }
    7. private function getHighlighted($content) {
    8. // hier stattdessen code highlighting machen
    9. $content = htmlentities($content);
    10. return $content;
    11. }
    Alles anzeigen