#include #include #include #include public Plugin myinfo = { name = "Racetimer Rank", author = "jenz", description = "Give racetimer points as a level clan tag to players", version = "1.0", url = "" }; public void OnPluginStart() { for(int client = 1; client <= MaxClients; client++) { if(IsClientInGame(client)) { OnClientPostAdminFilter(client); } } } public void OnClientPostAdminFilter(int client) { if(!IsClientAuthorized(client) || IsClientSourceTV(client)) return; if (IsFakeClient(client)) { char tag[64]; Format(tag, sizeof(tag), "[LVL 1]"); CS_SetClientClanTag(client, tag); return; } if (!HasClanTag(client)) { check_client_racetimer_rank(client); } } public bool HasClanTag(int client) { char sClanID[32]; GetClientInfo(client, "cl_clanid", sClanID, sizeof(sClanID)); return strlen(sClanID) > 1; //without a tag the len is 1. } public void check_client_racetimer_rank(int client) { char sSID[64]; char sRequest[256]; GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID)); FormatEx(sRequest, sizeof(sRequest), "https://racebackend.unloze.com/racetimer_endpoints-1.0/api/timers/player/%s", sSID); Handle hRequest = SteamWorks_CreateHTTPRequest(k_EHTTPMethodGET, sRequest); if (!hRequest || !SteamWorks_SetHTTPCallbacks(hRequest, OnTransferComplete) || !SteamWorks_SetHTTPRequestContextValue(hRequest, GetClientSerial(client)) || !SteamWorks_SendHTTPRequest(hRequest)) { delete hRequest; } } public int OnTransferComplete(Handle hRequest, bool bFailure, bool bSuccessful, EHTTPStatusCode eStatusCode, int iSerial) { int client = GetClientFromSerial(iSerial); if (!client) //Player disconnected. { delete hRequest; return 0; } if (bFailure || !bSuccessful || eStatusCode != k_EHTTPStatusCode200OK) { delete hRequest; LogError("Request-Error: %d", eStatusCode); return 0; } SteamWorks_GetHTTPResponseBodyCallback(hRequest, OnTransferResponse, iSerial); return 0; } public int OnTransferResponse(char[] sData, int iSerial) { int client = GetClientFromSerial(iSerial); if (!client) //Player disconnected. { return 0; } JSON_Object obj = json_decode(sData); //https://github.com/clugg/sm-json int I_player_points = obj.GetInt("PlayerPoints") //if no endpoint for steamID default value is -1 if (I_player_points < 1000) { I_player_points = 1000; //setting level 1 } char tag[64]; Format(tag, sizeof(tag), "[LVL %i]", I_player_points/1000); CS_SetClientClanTag(client, tag); json_cleanup_and_delete(obj); return 0; }