Senior Member
|
10-19-2011
, 23:27
Verify system and and question.
|
#1
|
Taking advice from Scone, I make a new thread to ask some question.
The code is here
PHP Code:
/* Plugin Template generated by Pawn Studio */
#pragma semicolon 1 #include <sourcemod> #include <halflife> #include <steamtools> #define RED 0 #define BLU 1 #define TEAM_OFFSET 2
new bool:teamReadyState[2] = { false, false }; new bool:recordOnRestart = false; new bool:recording = false; new Handle:hDatabase = INVALID_HANDLE; new String:forum_name[256]; new String:forum_id[64]; public Plugin:myinfo = { name = "Xtremezone.VN Verify System (For Competitve)", author = "duydangle, with help from zazxxx and Scone", description = "Integrate users between Xenforo and Source Servers", version = "1.0.3", url = "Xtremezone.VN" }
public OnPluginStart() { // Team status updates HookEvent("tournament_stateupdate", TeamStateEvent);
// Game restart HookEvent("teamplay_restart_round", GameRestartEvent);
// Win conditions met (maxrounds, timelimit) HookEvent("teamplay_game_over", GameOverEvent);
// Win conditions met (windifference) HookEvent("tf_game_over", GameOverEvent);
// Hook into mp_tournament_restart RegServerCmd("mp_tournament_restart", TournamentRestartHook);
decl String:error[255]; hDatabase = SQL_Connect("forum", true, error, sizeof(error));
if (hDatabase == INVALID_HANDLE) LogError("Database failure: %s", error); else LogMessage("Connect to database completed"); }
public OnClientPutInServer(client) { CreateTimer(5.0, Welcome, client); }
public Action:Welcome(Handle:timer, any:client) { decl String:authstring[64]; GetClientAuthString(client, authstring, sizeof(authstring)); PrintToChatAll("%N (%s) - %s da tham gia vao server", client, forum_name, authstring); PrintToConsole(client, "Welcome to Xtremezone.VN Server"); }
public OnClientAuthorized(client) { if (IsFakeClient(client)) return; decl String:steamID[64]; Steam_GetCSteamIDForClient(client, steamID, sizeof(steamID)); decl String:query[256]; Format(query, sizeof(query), "SELECT user_id FROM xf_user_external_auth WHERE provider_key='%s' AND provider='steam'", steamID); SQL_TQuery(hDatabase, Callback_Verify_One, query, GetClientUserId(client)); }
public Callback_Verify_One(Handle:owner, Handle:hQuery, const String:error[], any:userid) { if(hQuery == INVALID_HANDLE) { LogError("Query failed! %s", error); return; }
new client = GetClientOfUserId(userid);
if(client == 0) { // User already left CloseHandle(hQuery); return; }
if(!SQL_FetchRow(hQuery)) { CloseHandle(hQuery); KickClient(client, "Hay dang ki nick forum, confirm email va dang nhap forum bang tai khoang Steam truoc khi vao server"); return; } SQL_FetchString(hQuery,0,forum_id,sizeof(forum_id)); CloseHandle(hQuery); decl String:query[256]; Format(query, sizeof(query), "SELECT user_state FROM xf_user WHERE user_id='%s'", forum_id); SQL_TQuery(hDatabase, Callback_Verify_Two, query, GetClientUserId(client)); }
public Callback_Verify_Two(Handle:owner, Handle:hQuery, const String:error[], any:userid) { if(hQuery == INVALID_HANDLE) { LogError("Query failed! %s", error); return; } new client = GetClientOfUserId(userid); if(client == 0) { // User already left CloseHandle(hQuery); return; } if(!SQL_FetchRow(hQuery)) { CloseHandle(hQuery); return; } decl String:status[16]; SQL_FetchString(hQuery, 0, status, sizeof(status));
if(!StrEqual(status, "valid")) { CloseHandle(hQuery); KickClient(client, "Ban chua xac nhan tai khoan, hoac tai khoan forum cua ban da bi disabled"); return; } CloseHandle(hQuery); decl String:query[256]; Format(query, sizeof(query), "SELECT username FROM xf_user WHERE user_id='%s'", forum_id); SQL_TQuery(hDatabase, Callback_Verify_Three, query, GetClientUserId(client)); } public Callback_Verify_Three(Handle:owner, Handle:hQuery, const String:error[], any:userid) { if(hQuery == INVALID_HANDLE) { LogError("Query failed! %s", error); return; } new client = GetClientOfUserId(userid); if(client == 0) { // User already left CloseHandle(hQuery); return; } if(!SQL_FetchRow(hQuery)) { CloseHandle(hQuery); return; } SQL_FetchString(hQuery, 0, forum_name, sizeof(forum_name)); } public TeamStateEvent(Handle:event, const String:name[], bool:dontBroadcast) { new team = GetClientTeam(GetEventInt(event, "userid")) - TEAM_OFFSET; new bool:nameChange = GetEventBool(event, "namechange"); new bool:readyState = GetEventBool(event, "readystate");
if (!nameChange) { teamReadyState[team] = readyState;
// If both teams are ready wait for round restart to start recording if (teamReadyState[RED] && teamReadyState[BLU]) { recordOnRestart = true; } else { recordOnRestart = false; } } }
public GameRestartEvent(Handle:event, const String:name[], bool:dontBroadcast) { // Start recording only if both team are in ready state if (recordOnRestart) { StartRecording(); recordOnRestart = false; teamReadyState[RED] = false; teamReadyState[BLU] = false; decl String:t_name[64], String:t_steamid[24]; PrintToChatAll("Danh sach nguoi choi:"); for (new i = 1; i <= MaxClients+1; i++) { if(IsClientInGame(i) && !IsFakeClient(i)) { GetClientName(i, t_name, sizeof(t_name)); GetClientAuthString(i, t_steamid, sizeof(t_steamid)); PrintToChatAll("%s (%s) - %s",t_name, forum_name, t_steamid); } } PrintToChatAll("Good Luck, Have fun!"); } }
public GameOverEvent(Handle:event, const String:name[], bool:dontBroadcast) { StopRecording(); }
public Action:TournamentRestartHook(args) { // If mp_tournament_restart is called, stop recording if (recording) { StopRecording(); }
return Plugin_Continue; }
public OnMapStart() { ResetVariables();
// Check every 30secs if there are still players on the server CreateTimer(30.0, CheckPlayers, 0, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); }
public OnMapEnd() { }
// Stop recording if there are no players on the server - thanks jasonfrog! public Action:CheckPlayers(Handle:timer) { if (recording) { for (new i = 1; i <= MaxClients; i++) { if (IsClientConnected(i) && !IsFakeClient(i)) { return; } }
StopRecording(); } }
//------------------------------------------------------------------------------ // Private functions //------------------------------------------------------------------------------
ResetVariables() { teamReadyState[RED] = false; teamReadyState[BLU] = false; recordOnRestart = false; recording = false; }
StartRecording() { if (recording) { PrintToChatAll("Already recording"); return; }
// Format the demo filename new String:timestamp[16]; new String:map[32]; new String:filename[64]; new String:command[128];
FormatTime(timestamp, sizeof(timestamp), "%Y%m%d-%H%M"); GetCurrentMap(map, sizeof(map)); Format(filename, sizeof(filename), "%s-%s.dem", timestamp, map); Format(command, sizeof(command), "tv_record %s", filename);
// Start recording ServerCommand(command);
PrintToChatAll("Recording started"); recording = true; }
StopRecording() { if (recording) { // Stop recording ServerCommand("tv_stoprecord");
PrintToChatAll("Recording stopped");
recording = false; } }
The original idea is checking the player joining server is registered or not. I am using xenforo board, the users' data are stored in xf_user table, the steam community ids are stored in xf_user_external_auth.
The original part is done, thanks to Scone.
Now I am planning to develop the plugin for using in Competitive Mode. The Competitive Code I use a lot from http://forums.alliedmods.net/showthread.php?p=830122. A demo will be recorded when the match happen.
When the match happens, I want to print all player: players' name, their username on the forum, and their Steamid. I put that in the part
PHP Code:
// Start recording only if both team are in ready state if (recordOnRestart) { StartRecording(); recordOnRestart = false; teamReadyState[RED] = false; teamReadyState[BLU] = false; decl String:t_name[64], String:t_steamid[24]; PrintToChatAll("Danh sach nguoi choi:"); for (new i = 1; i <= MaxClients+1; i++) { if(IsClientInGame(i) && !IsFakeClient(i)) { GetClientName(i, t_name, sizeof(t_name)); GetClientAuthString(i, t_steamid, sizeof(t_steamid)); PrintToChatAll("%s (%s) - %s",t_name, forum_name, t_steamid); } } PrintToChatAll("Good Luck, Have fun!"); }
But then error happens, the players' username on the forum are not printed. Please help, thanks.
|
|