Anti-Team-Flash Plugin Fix Prototyp

Hallo Frischling! Schön, dass du uns besuchst.

Du hast leider nur eingeschränkte Zugriffsrechte und siehst auch nicht alle Inhalte dieser Page. Bitte melde dich an bzw. registriere dich, um alle Funktionen auf unserer Page nutzen zu können.

  • Hallo zusammen,


    ich habe mich mal bisschen in die Materie (SourceMod) eingelesen und das bereits existierende Plugins "Anti Team Flash" entsprechend angepasst.


    Link zum Plugin: https://forums.alliedmods.net/showthread.php?t=139505

    Link zur verwendeten Version: https://forums.alliedmods.net/…hp?p=2730840&postcount=76


    Vorneweg erstmal, ich bin noch lange kein Experte. Ich habe mich jetzt ein paar Stunden eingelesen, mir die Sprache (SourcePawn) grob angeschaut und versucht das Anti Team Flash Plugin zu verstehen.
    Es gibt noch zwei weitere passende Plugins, die ich gefunden habe (eins sogar von 2017), die ich mir aber bis jetzt nicht näher angeschaut habe.


    [CS:S] Anti Flash v1.2 - AlliedModders

    [CS:S/CS:GO] Anti Team Flash - AlliedModders


    Es kann durchaus sein, dass sich irgendwo im Code noch Typos, Leichtsinnsfehler/Syntaxfehler oder vielleicht sogar Logikfehler befinden. Vielleicht habe ich etwas auch falsch initialisiert oder nicht freigegeben. Getestet ist noch gar nichts, hab das jetzt nur mal so runtergetippt. Bin mit der Lösung auch nicht ganz zufrieden (die ganzen Timer...). Erschien mir jetzt auf den ersten Blick aber die einzige Möglichkeit zu sein, das irgendwie umzusetzen. Soweit ich gesehen habe, hat man nur das "player_blind" Event mit dem man arbeiten kann. Kenne DHooks/SDKHooks/SourceHooks nur vom Namen, vielleicht kann man sich mit diesen Plugins (mittlerweile Teil von SourceMod) ja an einer besseren Stelle einhaken.

  • Nun zum Eigentlichen:


    Wie man in der Ursprungsversion des Plugins sehen kann, wird das "Geflashtsein" mehr oder weniger direkt mit der ersten Teamflash gecancelt (FlashAlpha wird von maximal 255 auf 0.5 reduziert; 0 ist Minimun).

    Es spielt keine Rolle, ob der Spieler bereits durch eine Gegnerflash geblendet wurde.


  • Um jetzt zu erreichen, dass ein vorheriges "Geflashtsein" berücksichtigt wird, habe ich folgende Ergänzungen vorgenommen:


    Kurze Erklärung (zusätzlich zu den Kommentaren im Code):


    Wenn ein Spieler durch einen Gegner geflasht wurde, dann merke ich mir die "Systemzeit", wann das passiert ist, für diesen Spieler in einem Array. Zusätzlich wird ein Timer gestartet, der die Zeit des "Geflashtseins" abwartet und ihn dann wieder aus der Liste nimmt (genau genommen die Zeit des Flashens auf 0 setzt). Wenn der Spieler daraufhin, während er noch geflasht ist, eine Teamflash abbekommt, finden wir einen Eintrag (eine Zeit) in diesem Array. Anstatt den Spieler jetzt einfach zu "Entflashen", berechnen wir anhand der bereits abgelaufenen Zeit des "Geflashtseins" die restliche "Geflashtheit" aus. Diese wird dann als Startwert für die nächste Flash (in dem Fall eine Teamflash) weitergegeben. Damit wird die Teamflash nicht gecancelt, sondern nimmt die Eigenschaften der vorherigen Gegnerflash an und führt diese weiter.


    Wenn jetzt aber nach der ersten Gegnerflash, während der Spieler noch geblendet ist, eine zweite Gegnerflash kommt, wird quasi die Flashdauer verlängert. Es muss erneut die gesamte Flashdauer abgewartet werden bis wir den Spieler als nicht geblendet vermerken.


    Dieser Ansatz könnte das Problem stark mildern. Perfekt wird es nehme ich mal an nicht sein, aufgrund von Ping/Pingschwankungen, Timerungenauigkeiten, etc.


    Bedenken habe ich aber noch einige, da ich hier mit vielen Annahmen gearbeitet habe und mich höchstwahrscheinlich in diesen irre. Ich gehe davon aus, dass die Flashdauer einen Maximalwert hat und bei jeder Gegnerflash mit diesem Wert angefangen wird. Das gilt auch für das "Geflashtsein".

    Ich bin mir aber ziemlich sicher, dass dem nicht so ist und bspw. die Flashdauert in irgendeiner Weise addiert wird, wenn man nacheinander mehrere Gegnerflashes abbekommt. Ich denke man ist nach mehreren Flashes, die man direkt ins Gesicht bekommt länger blind als durch eine, die man direkt abbekommt.

    Selbes Spiel beim Geflashtsein, denke das ganze wird dynamisch vom Server/Spiel pro Flash pro Spieler berechnet. Denn eine Flash zu der man etwas Distanz hat, wird einen nicht die volle Dauer flashen und nicht mit voller Stärke treffen.

    Auch gehe ich davon aus, dass die Flashanimation von 100 -> 0 linear verläuft, aber da bin ich mir auch nicht ganz sicher.

    Nur kenne ich diese Formeln nicht, sonst könnte man das miteinfließen lassen. Vielleicht findet man etwas im SourceSDK. Ich hab keine Ahnung.


    Wisst ihr vielleicht etwas dazu? Kann man mit meinem Post etwas anfangen?


    PS: Musste den Post jetzt kürzen bzw. aufteilen, da zu lang...


    PS 2: Ist es nicht möglich etwas farblich in einem Codeblock zu hinterlegen?


    Gruß


    PRESSIVE

  • Dieses Thema enthält 3 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind, bitte registrieren Sie sich oder melden Sie sich an um diese lesen zu können.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!