Initial commit
This commit is contained in:
91
scripting/include/advanced_motd.inc
Normal file
91
scripting/include/advanced_motd.inc
Normal file
@@ -0,0 +1,91 @@
|
||||
#if defined _advmotd_enabled
|
||||
#endinput
|
||||
#endif
|
||||
#define _advmotd_enabled
|
||||
|
||||
enum MOTDFailureReason {
|
||||
MOTDFailure_Unknown, // Failure reason unknown
|
||||
MOTDFailure_Disabled, // Client has explicitly disabled HTML MOTDs
|
||||
MOTDFailure_Matchmaking, // HTML MOTD is disabled by Quickplay/matchmaking (TF2 only)
|
||||
MOTDFailure_QueryFailed // cl_disablehtmlmotd convar query failed
|
||||
};
|
||||
|
||||
typedef MOTDFailure = function void (int client, MOTDFailureReason reason);
|
||||
|
||||
/**
|
||||
* Displays an MOTD panel to a client with advanced options
|
||||
*
|
||||
* @param client Client index the panel should be shown to
|
||||
* @param title Title of the MOTD panel (not displayed on all games)
|
||||
* @param msg Content of the MOTD panel; could be a URL, plain text, or a stringtable index
|
||||
* @param type Type of MOTD this is, one of MOTDPANEL_TYPE_TEXT, MOTDPANEL_TYPE_INDEX, MOTDPANEL_TYPE_URL, MOTDPANEL_TYPE_FILE
|
||||
* @param visible Whether the panel should be shown to the client
|
||||
* @param big true if this should be a big MOTD panel (TF2 only)
|
||||
* @param verify true if we should check if the client can actually receive HTML MOTDs before sending it, false otherwise
|
||||
* @param callback A callback to be called if we determine that the client can't receive HTML MOTDs
|
||||
* @noreturn
|
||||
*/
|
||||
stock void AdvMOTD_ShowMOTDPanel(int client, const char[] title, const char[] msg, int type=MOTDPANEL_TYPE_INDEX, bool visible=true, bool big=false, bool verify=false, MOTDFailure callback=INVALID_FUNCTION) {
|
||||
char connectmethod[32];
|
||||
if(verify && GetClientInfo(client, "cl_connectmethod", connectmethod, sizeof(connectmethod))) {
|
||||
if(StrContains(connectmethod, "quickplay", false) != -1 || StrContains(connectmethod, "matchmaking", false) != -1) {
|
||||
if(callback != INVALID_FUNCTION) {
|
||||
Call_StartFunction(null, callback);
|
||||
Call_PushCell(client);
|
||||
Call_PushCell(MOTDFailure_Matchmaking);
|
||||
Call_Finish();
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
KeyValues kv = new KeyValues("data");
|
||||
kv.SetString("title", title);
|
||||
kv.SetNum("type", type);
|
||||
kv.SetString("msg", msg);
|
||||
if(big) {
|
||||
kv.SetNum("customsvr", 1);
|
||||
}
|
||||
|
||||
if(verify) {
|
||||
DataPack pack = new DataPack();
|
||||
pack.WriteCell(kv);
|
||||
pack.WriteCell(visible);
|
||||
|
||||
if(callback != INVALID_FUNCTION) {
|
||||
Handle fwd = CreateForward(ET_Ignore, Param_Cell, Param_Cell);
|
||||
AddToForward(fwd, null, callback);
|
||||
pack.WriteCell(fwd);
|
||||
} else {
|
||||
pack.WriteCell(0);
|
||||
}
|
||||
|
||||
QueryClientConVar(client, "cl_disablehtmlmotd", AdvMOTD_OnQueryFinished, pack);
|
||||
} else {
|
||||
ShowVGUIPanel(client, "info", kv, visible);
|
||||
CloseHandle(kv);
|
||||
}
|
||||
}
|
||||
|
||||
public void AdvMOTD_OnQueryFinished(QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue, DataPack pack) {
|
||||
pack.Reset();
|
||||
KeyValues kv = pack.ReadCell();
|
||||
bool visible = pack.ReadCell();
|
||||
Handle fwd = pack.ReadCell();
|
||||
delete pack;
|
||||
|
||||
if(result != ConVarQuery_Okay || StringToInt(cvarValue)) {
|
||||
delete kv;
|
||||
|
||||
if(fwd) {
|
||||
Call_StartForward(fwd);
|
||||
Call_PushCell(client);
|
||||
Call_PushCell((result != ConVarQuery_Okay) ? MOTDFailure_QueryFailed : MOTDFailure_Disabled);
|
||||
delete fwd;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
ShowVGUIPanel(client, "info", kv, visible);
|
||||
delete kv;
|
||||
}
|
Reference in New Issue
Block a user