Präsentation | extensible event system by Alf21

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
  • Erweiterbares Event System by Alf21

    Heute möchte ich euch mein Eventsystem vorstellen, welches ich am 4. Dezember anfing zu entwickeln.
    Es ist in Java mit Hilfe des Shoebill Plugins (Link) geschrieben, ist somit objektorientiert programmiert und besitzt um die 7000 Zeilen.


    Video Nr. 1 - Catching Event

    Externer Inhalt youtu.be
    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.

    (Link)


    Wichtigste Infos:
    Testserver: 151.80.76.181:7777


    [tabmenu]


    [tab='Eventarten','']

    • Catching (Fangespiel)
    • Trouble in Terrorist Town (TTT aus Garrys Mod)
    • NPC Missionen

    [tab='Standardaktionen','']

    • Event erstellen
    • Event zerstören
    • Event beitreten (alle Events werden mit Namen und benutzer aufgelistet)
    • Event verlassen
    • Event starten
    • Event beenden
    • Event vorbereiten
    • Eventvorbereitung beenden
    • Eventvorbereitung überspringen
    • Spieler einladen
    • Letzte Eventergebnisse einsehen
    • Liste der Member eines Events einsehen
    • Liste der Member, welche noch nicht beim Treffpunkt sind, einsehen
    • Spielstatus einsehen
    • Sprache ändern

    [tab='TODO']

    • Traitorshop
    • NPC AI System
    • Singleplayer / Multiplayer Missions
    • Actorsystem
    • new Eventtypes

    [tab='weitere Infos','']
    Das System ist sehr benutzerfreundlich und nur über Dialoge und über die [ N ] Taste gestaltet, man muss lediglich '/events' eingeben, um den Dialog aufzurufen.
    Sobald ein Spieler das Event verlässt und nur noch der Owner drin ist, wird es beendet, falls der Owner das Event verlässt wird dieses zerstört.


    Alle Eventarten basieren auf ein Basissystem, sozusagen einer Library, weshalb man schnell eine neue Eventart hinzufügen kann (einfaches Eintragen der Class).
    [tab='Bilder','']
    BILDER FOLGEN BALD...
    Man kann dynamisch Maps laden und darauf spielen (und auch wieder zerstören).
    Falls man eine Map benutzt und diese verlässt, wird man wieder am MapSpawn gespawnt.Es gibt globale DropWeapons, welche man im Spiellauf aufheben kann.
    Es gibt einen Gametimer der nach Ablauf das Event beendet.
    Stats der Spieler vor dem Event werden gesichert und danach wieder zurückgegeben.
    Es gibt immer eine Vorbereitungsphase, in der sich alle Spieler in einem Punkt treffen müssen (Checkpoint) um das Event automatisch zu starten, sobald alle beim Treffpunkt sind.
    [tab='Standardeinstellungen','']

    • Spieler rauswerfen (*optional)
    • Map auswählen und gleich laden (**optional / **abhängig vom Eventtype auch wieder zerstören; Die Maps werden in anderen virtuellen Welten geladen um Komplikationen zu vermeiden)
    • Gametimer setzen (*optional)
    • EventSpawn / Treffpunkt setzen (*muss gesetzt werden)
    • Zum EventSpawn / Treffpunkt teleportieren (*optional; *RCON-Admin)
    • Auswahl, ob das Event öffentlich ist (jeder beitreten kann und der Owner andere Spieler einladen kann) oder privat (Der Owner andere Spieler nur einladen kann) (*optional).

    [tab='Startbedingungen','']
    Falls die Bedingungen für ein Event nicht erfüllt sind (durch die Einstellungen), kann das Event nicht gestartet werden. Zudem werden immer min. 2 Spieler benötigt, eine höhere Spielerzahl ist vom Event abhängig.
    [tab='Textdraws','']
    Durch Textdraws kann man einfach die Übersicht über das Event behalten.
    So werden diese Textdraws automatisch erst nach Punktzahl sortiert und falls man die gleiche Punktzahl besitzt werden diese nach Namen sortiert.
    [tab='Updates','']
    Update 0.4e R1:
    - changed Key to open Dialogs and Gates from [ Y ] to [ H ]
    - added a lot of new maps
    - added EventMapDescription to easily describe a map
    - improved EventMap / map handling with a global map loader, now you can easily add new maps
    - fixed some maps with improved extern map converter
    - added Gates from virtuality-roleplay project + improved it
    - fixed eventId counter (calculated with value of events) to autoincrement with local eventIndex Integer
    - improved + fixed Dialoges
    - added map informations / details (because of the credits)
    - changed auto respawn system on leaving the map
    - added destroy() to EventMap for special handling, e.g. creating Gates on a map


    Update 0.4e:
    - improved event handling (eg. instead of remove(Player) and leave(Player) -> onPlayerExit(Player)
    - fixed Textdraws
    - increased range of radius functions
    - minor performance improvement
    - added GPS and RangeLabel
    - fixed getWinner for Catching and TTT
    - improved map handling and added a parent map class to easy handle maps
    - fixed TTTDeadBody
    - added save datas for players before event start and reset datas at end of event / onPlayerExit / on destroy
    - added TTTShop
    - added globalTimer and onGlobalTimer
    - added command to test maps ('/eventsdb', ...)
    - added maps


    Update 0.4c R6:
    - some performance improvement
    - removed random color reset in Catching event and added global reset color on EventBase
    - added global EventTextdraw handling for better programming
    - added onPlayerPause, but currently not used and needs to be programmed and to undo / resend packets because of packetloss
    - added score timer to linear increase event score or check if event score need to increase
    - global stats added (eventScore)
    - added timer to sort the EventTextdraws (1. eventScore, 2. playername)
    - optimized the multiplicator (hunter only deals half damage for vehicle)
    - minor improvement because of color defines
    - fixed colors in event to hide players
    - removed mapTextdraw and added GangZone to give the map a better look and to use PickUps and Checkpoints / GPS
    - global timer added
    - fixed gametimer
    - added updateTextdraws to better update Textdraws for specific player after remove or ordered with eventTextdraw.move(int)
    - some minor bugfixes and checks


    Update 0.4c R5:
    - added some Gametextes for better gameplay
    - fixed Textdraw
    - added NoTeamDamage
    - added global min player Amount
    - added preparation countdown
    - fixed timers
    - fixed TTTDeadBoy with Worlds and Interiors
    - fixed distance check and get dropWeapon
    - added global DropGun pickup
    - added more get DropWeapon with move above


    Update 0.4c R4:
    - minor bugfixes
    - added some test commands
    - event maps new enviroment
    - added weapondata to deadBodys
    - added DropWeapons
    - added global gametimer
    - added deadBodyDialog
    - added mapfixes


    Update 0.4c R3:
    - fixed dialog and map enviroment
    - fixed Textdraws
    - other minor bugfixes
    - added some test commands
    - added available maps which can select in an event which does not depends on maps


    ...
    [tab='Credits','']

    • 123marvin123: Shoebill Plugin + sehr guten Support + FCNPC-Wrapper;
    • Maps: de_dust2; Rogue Nations V2;
    • Fynn630: Video!
    • DropWeapon ObjektIDs (PeteShag (http://forum.sa-mp.com/showthread.php?t=217076))
    • Jeffry: DeadBody ObjektIDs
    • und ich, Alf21 (Eventsystem und der Rest ;))

    [/tabmenu]



    Ich würde mich über Kritik / Anmerkungen
    und/oder Verbesserungsvorschläge freuen und auch über Ideen für neue Events/Eventarten.

  • Danke für die Antwort @123marvin123 ! :)


    Testserver: 151.80.76.181:7777


    Habe das gesamte Plugin nun auf Deutsch und Englisch übersetzt, man kann nun mit /events -> Change Language die Sprache einstellen.



    Außerdem wurden die Textdraws neu designed (siehe Bild) und der TTT Traitorshop wurde angefangen zu implementieren.

    (Textdraws im Bild sind älter)



    PS: Danke @123marvin123 für den Support beim LanguagePlugin !