Das Prinzip ist einfach:
Du erstellst eine globale Variable vom Typ Boolean (global bedeutet, dass du sie außerhalb jedes Callbacks und jeder sonstigen Funktion definierst.
Es gibt nur zwei boolesche Werte: true und false; die Variable kann dementsprechend auch nur diese beiden Werte aufnehmen (oder eben ihre Stellvertreter 1 und 0).
new bool:globalChatState = false; //Hier kannst du auch definieren, ob der Chat standardmäßig beim Serverstart aktiviert ist. false = deaktiviert, true = aktiviert
Nun gehst du in's Callback OnPlayerText().
Ein Callback ist im Prinzip nichts Anderes als eine normale Funktion, die zu einer bestimmten Aktion aufgerufen wird. Dementsprechend returnen diese Callbacks auch i.d.R. Werte.
Eine 0 würde bedeuten, dass der Callback ohne weitere Aktion des Chats beendet wird; es wird also keine Nachricht gesendet. Eine 1 ist das Gegenteil.
Mit dem Wissen im Hinterkopf funktioniert das Ganze dann nun einfach:
if(!globalChatState){ //Das == false kannst du dir sparen, kommt auf's Selbe hinaus, denn das Ausrufezeichen ist stellvertretend für ein false. Wenn du es weglassen würdest, würde der Teil hier unten ausgeführt, wenn der Ausdruck true ist.
//Wenn Chat deaktiviert ist
SendClientMessage(playerid, -1, "Der Chat wurde deaktiviert.");
return 0; // Die Nachricht wird noch ausgegeben und danach wird eine 0 returnt, damit der Callback
}
Du musst dann halt nur noch einen Befehl machen, mit dem Admins den Chat aktivieren / deaktivieren können. Dazu einfach den Wert der globalen Variable ändern.
//E: Du kannst natürlich den Chat für Admins weiterhin offenlassen. Dazu einfach in der if Abfrage noch eine Adminabfrage machen.
//E: Noch etwas an der Erklärung geändert