Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: sourceserver.info. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Impact

Super Moderator

  • »Impact« ist der Autor dieses Themas

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

1

Donnerstag, 1. März 2012, 06:36

Intelligente Nutzung von Forwards oder Schwachsinn?

Man kennt es vielleicht selbst, man schreibt ab und zu ein Plugin und merkt dass man sich ständig wiederholt.
Man beginnt damit sich eigene Includefiles zu schreiben, oder nutzt zugängliche Pakete der Community.

Nun, was ist aber wenn man viele Plugins auf Basis von Events erstellt oder auf Chatnachrichten reagieren möchte?.
Man erstellt für jedes seiner Plugins einen Commandlistener, RegConsoleCmd oder ähnliches.
Wenn man es grob betrachtet wiederholt man sich auch hier für jedes Plugin erneut, und schreibt die selben Strukturen und Callbacks mehrmals.

Viele von euch kennen vielleicht die wunderbare Smlib.
Diese versucht das erste genannte Problem anzugehen, was ist aber nun mit dem zweiten?

Ich habe angefangen mir ein Basehook - Plugin zu schreiben, dieses 'hookt' oft genutze Dinge wie zB den Playerchat, Rundenevents, Deathevents und alles weitere.
Der Vorteil den ich davon habe ist ersichtlich.

Es folgt der theoretische Beispielcode:

Vorher


PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public OnPluginStart()
{
    AddCommandListener(Listener"say");
    AddCommandListener(Listener"say_team");
    // Blablabla
}



public Action:Listener(client, const String:command[], argc)
{
    decl String:message[192];
    
    GetCmdArgString(messagesizeof(message));
    StripQuotes(message);
    
    // Irgendwas mit der Nachricht machen

    return Plugin_Continue;
}



Nacher


PHP-Quelltext

1
2
3
4
5
6
public Action:Basehook_OnSay(client, const String:message[], maxlen)
{
    // Irgendwas mit der Nachricht machen

    return Plugin_Continue;
}


Bei größeren Scripten mit vielen Events kann das einen enormen Unterschied bedeuten.

Die Nachteile sind dass ich immer 2 Plugins laufen haben muss.
Ob es Performancetechnisch große Auswirkungen hat habe ich bisher noch nicht ausführlich getestet, ich gehe aber davon aus.
Vielleicht weiß ja einer von euch mehr darüber ob obiges Sinn macht, und wenn ja inwiefern.
Es musst ja einen guten Grund haben wieso das nicht jeder so umsetzt.

MfG
Impact

Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von »Impact« (1. März 2012, 07:46)


Ähnliche Themen