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:
|
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(message, sizeof(message));
StripQuotes(message);
// Irgendwas mit der Nachricht machen
return Plugin_Continue;
}
|
|
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