Thread: [TF2] - Test
View Single Post
Arkarr
Veteran Member
Join Date: Sep 2012
Location: Just behind my PC screen.
Old 06-06-2017 , 11:59   Re: [TF2] - Test
Reply With Quote #6

You can try this, not tested. My random answer code should be edited to be faster and more efficient.
PHP Code:
#include <sourcemod>
#include <sdktools>
#include <tf2>
#include <tf2_stocks>

#pragma newdecls required

#define PLUGIN_AUTHOR     "Arkarr"
#define PLUGIN_VERSION    "1.00"
#define FIELD_QUESTION    "question"
#define FIELD_ANSWER1    "answer1"
#define FIELD_ANSWER2    "answer2"
#define FIELD_ANSWER3    "answer3"
#define FIELD_ANSWER4    "answer4"
#define FIELD_ANSWER5    "answer5"

Handle ARRAY_Questions;
Handle CVAR_LockedTeam;

bool REDLocked;
bool BLULocked;
bool HasFailed[MAXPLAYERS 1];

char question[100];
char a1[100];
char a2[100];
char a3[100];
char a4[100];
char a5[100];

int questionNumber[MAXPLAYERS 1];

public 
Plugin myinfo 
{
    
name "[TF2] The Test",
    
author PLUGIN_AUTHOR,
    
description "Make player pass a test to unlock a team.",
    
version PLUGIN_VERSION,
    
url "http://www.sourcemod.net"
};

public 
void OnPluginStart()
{
    
RegConsoleCmd("sm_test"CMD_TheTest"Pop the menu with the Test.");
    
    
CVAR_LockedTeam CreateConVar("sm_thetest_lockedteam""RED""Set wich team are locked until a player complete the test. Valid value : RED or RED,BLU or BLU");

    
HookEvent("player_spawn"EVENT_TeamChangeEventHookMode_Post);
}

public 
void OnConfigsExecuted()
{
    
char lockedTeams[45];
    
GetConVarString(CVAR_LockedTeamlockedTeamssizeof(lockedTeams));
    
    
REDLocked = (StrContains(lockedTeams"RED") == -false true);
    
BLULocked = (StrContains(lockedTeams"BLU") == -false true);
    
    
ReadConfigFile();
}

public 
void OnClientConnected(int client)
{
    
HasFailed[client] = true;
    
questionNumber[client] = 0;
}

public 
Action CMD_TheTest(int clientint args)
{
    if(
questionNumber[client] != 0)
    {
        
PrintToChat(client"[SM] Finish the Test firstly.");
    }
    else
    {
        
questionNumber[client] = 0;
        
HasFailed[client] = false;
        
        
DisplayTheTest(client);
    }
        
    return 
Plugin_Handled;
}

public 
void DisplayTheTest(int client)
{
    
int answerAdded 0;
    
int BlankAnswer 0;
    
Handle menu CreateMenu(MenuHandler_Question);
    
Handle questionInfos GetArrayCell(ARRAY_QuestionsquestionNumber[client]);
    
    
GetTrieString(questionInfosFIELD_QUESTIONquestionsizeof(question));
        
    
SetMenuTitle(menuquestion);

    
char answers[10];
    
char answerID[10];
    
    while(
answerAdded != 5)
    {
        
int randomAnswer GetRandomInt(04);
        
IntToString(randomAnsweranswerIDsizeof(answerID));
        while(
StrContains(answersanswerID) != -1)
        {
            
randomAnswer GetRandomInt(04);
            
PrintToServer("%i"answerAdded);
        }
            
        
Format(answerssizeof(answers), "%s%s"answersanswerID);
        
Format(answerIDsizeof(answerID), "answer%s"answerID);
        
GetTrieString(questionInfosanswerIDa1sizeof(a1));
        
        if(!
StrEqual(a1"-"))
        {
            if(
randomAnswer == 1)
                
AddMenuItem(menu"Y"a1);
            else
                
AddMenuItem(menu"N"a1);
        }
        else
        {
            
BlankAnswer++;
        }
        
        
answerAdded++;
    }
        
    while(
BlankAnswer != 0)
    {
        
AddMenuItem(menu"N""-"ITEMDRAW_DISABLED);
        
BlankAnswer--;
    }
    
    
SetMenuExitBackButton(menufalse);
    
DisplayMenu(menuclientMENU_TIME_FOREVER);
}

public 
int MenuHandler_Question(Handle menuMenuAction menuActionint clientint menuItemID)
{
    
char correct[10];
    
GetMenuItem(menumenuItemIDcorrectsizeof(correct));
    
    if(!
StrEqual(correct"Y"))
        
HasFailed[client] = true;
        
    
questionNumber[client]++;
    
    if(
questionNumber[client] < GetArraySize(ARRAY_Questions))
    {
        
DisplayTheTest(client);
    }
    else
    {
        if(
HasFailed[client])
        {
            
PrintToChat(client"Sucess ! You have passed the Test !");
        }
        else
        {
            
PrintToChat(client"Fail ! You didn't passed the Test !");
            
SlapPlayer(client0true);
            
SlapPlayer(client0true);
            
SlapPlayer(client0true);
        }
        
    }
    
    if (
menuAction == MenuAction_End)
        
CloseHandle(menu);
}

public 
Action EVENT_TeamChange(Handle event, const char[] namebool dontBroadcast)
{
    
int client GetClientOfUserId(GetEventInt(event"userid"));
    
TFTeam team TF2_GetClientTeam(client);

    if(
client && !HasFailed[client] && IsClientInGame(client) && !IsFakeClient(client) && (team == TFTeam_Red || team == TFTeam_Blue))
    {
        if(
team == TFTeam_Red && REDLocked)
        {
            
TF2_ChangeClientTeam(clientTFTeam_Blue);
        }
        else if(
team == TFTeam_Blue && BLULocked)
        {
            if(
REDLocked)
                
TF2_ChangeClientTeam(clientTFTeam_Spectator);
            else
                
TF2_ChangeClientTeam(clientTFTeam_Red);
        }
    }
}

stock bool ReadConfigFile()
{
    
ARRAY_Questions CreateArray();
    
    
char path[100];
    
Handle kv CreateKeyValues("Questions");
    
BuildPath(Path_SMpathsizeof(path), "/configs/TheTest.cfg");
    
FileToKeyValues(kvpath);
    
    if (!
KvGotoFirstSubKey(kv))
        return;
    
    do
    {
        
KvGetSectionName(kvquestionsizeof(question));
        
KvGetString(kvFIELD_ANSWER1a1sizeof(a1), "-");
        
KvGetString(kvFIELD_ANSWER2a2sizeof(a2), "-");
        
KvGetString(kvFIELD_ANSWER3a3sizeof(a3), "-");
        
KvGetString(kvFIELD_ANSWER4a4sizeof(a4), "-");
        
KvGetString(kvFIELD_ANSWER5a5sizeof(a5), "-");
        
        
Handle tmpTrie CreateTrie();
        
SetTrieString(tmpTrieFIELD_QUESTIONquestionfalse);
        
SetTrieString(tmpTrieFIELD_ANSWER1a1false);
        
SetTrieString(tmpTrieFIELD_ANSWER2a2false);
        
SetTrieString(tmpTrieFIELD_ANSWER3a3false);
        
SetTrieString(tmpTrieFIELD_ANSWER4a4false);
        
SetTrieString(tmpTrieFIELD_ANSWER5a5false);
        
        
PushArrayCell(ARRAY_QuestionstmpTrie);
    } while (
KvGotoNextKey(kv));
    
    
CloseHandle(kv);

__________________
Want to check my plugins ?
Arkarr is offline