/* Includes */
#include <plugin>
#include <adminlib>
#include <events>

/* Global Variables */
new g_Version[] = "0.8";
new g_Registered[MAX_EVENTS];

/* Event Handlers */
public plugin_init() {
    plugin_registerinfo("Registering LogD-Events","A Plugin that parses LogD-Events and sends data to plugins that registered these events",g_Version);
    plugin_registercmd("register_logd_event","register_event",ACCESS_CONSOLE,"");
    return PLUGIN_CONTINUE;
}

/* Command Handlers */
public register_event(HLCommand,HLData,HLUserName,UserIndex) {
    static Data[MAX_DATA_LENGTH];
    static i;
    convert_string(HLData,Data,MAX_DATA_LENGTH);
    i = Data[0];
    if(g_Registered[i] == 0) {
        static j;
        switch(i) {
            case join_game: {
                j = 51;
            }
            case join_team: {
                j = 54;
            }
            case round_start,round_end,round_draw,game_restart,game_commencing: {
                g_Registered[round_start] = 1;
                g_Registered[round_end] = 1;
                g_Registered[round_draw] = 1;
                g_Registered[game_restart] = 1;
                g_Registered[game_commencing] = 1;
                j = 62;
            }
            case round_win: {
                j = 61;
            }
            case injure: {
                j = 58;
                new str[5];
                getstrvar("mp_logdetail",str,5);
                if(strcmp(str,"3")) {
                    setstrvar("mp_logdetail","3");
                    exec("logd_block 58");
                }
            }
            case kill: {
                j = 57;
            }
            case suicide: {
                j = 53;
            }
        }
        snprintf(Data,MAX_DATA_LENGTH,"registered_event%i",j);
        plugin_registercmd(Data,Data,ACCESS_CONSOLE,"");
        snprintf(Data,MAX_DATA_LENGTH,"logd_reg %i admin_command %s",j,Data);
        exec(Data);
    }
    g_Registered[i] = 2;
    return PLUGIN_HANDLED;
}

public registered_event51(HLCommand,HLData,HLUserName,UserIndex) {
    static Data[3];
    convert_string(HLData,Data,3);
    Data[0] = strtonum(Data);
    Data[1] = '^0';
    plugin_exec(g_Function[join_game],Data);
    return PLUGIN_HANDLED;
}

public registered_event54(HLCommand,HLData,HLUserName,UserIndex) {
    static Data[40];
    static Index[3];
    convert_string(HLData,Data,40);
    strsplit(Data," ",Index,3,Data,40);
    if(Data[0] == 'T') {
        Data[1] = 1;
    } else if(Data[0] == 'C') {
        Data[1] = 2;
    } else {
        Data[1] = 0;
    }
    Data[0] = strtonum(Index);
    Data[2] = '^0';
    plugin_exec(g_Function[join_team],Data);
    return PLUGIN_HANDLED;
}

public registered_event62(HLCommand,HLData,HLUserName,UserIndex) {
    static Data[40];
    convert_string(HLData,Data,40);
    switch(Data[6]) {
        case 'o': if(g_Registered[game_commencing] == 2) { //Game commencing
            plugin_exec(g_Function[game_commencing],"");
        }
        case 't': if(g_Registered[game_restart] == 2) { //Restart
            Data[15+strchr(Data[15],'_')] = '^0';
            set_timer("restart_timer",strtonum(Data[15]),0);
        }
        case 'S': if(g_Registered[round_start] == 2) { //Round start
            plugin_exec(g_Function[round_start],"");
        }
        case 'D': if(g_Registered[round_draw] == 2) { //Round draw
            static Scores[2][10];
            strsplit(Data[11]," ",Scores[1],10,Scores[0],10);
            Data[0] = strtonum(Scores[0][2]);
            Data[1] = strtonum(Scores[1][3]);
            Data[2] = '^0';
            plugin_exec(g_Function[round_draw],Data);
        }
        case 'E': if(g_Registered[round_end] == 2) { //Round end
            plugin_exec(g_Function[round_end],"");
        }
    }
    return PLUGIN_HANDLED;
}

public registered_event61(HLCommand,HLData,HLUserName,UserIndex) {
    static Data[40];
    static Scores[2][10];
    convert_string(HLData,Data,40);
    if(Data[0] == 'T') {
        Data[0] = 1;
    } else {
        Data[0] = 2;
    }
    strsplit(Data," ",Data[1],1,Data[3],37,Scores[1],10,Scores[0],10);
    Data[1] = strtonum(Scores[0][2]);
    Data[2] = strtonum(Scores[1][3]);
    plugin_exec(g_Function[round_win],Data);
    return PLUGIN_HANDLED;
}

public registered_event58(HLCommand,HLData,HLUserName,UserIndex) {
    static Data[70];
    static sAttackerIndex[3];
    static sVictimIndex[3];
    static sDamage[2][20];
    convert_string(HLData,Data,70);
    strsplit(Data," ",sAttackerIndex,3,sVictimIndex,3,Data[4],66,sDamage[0],20,sDamage[1],20);
    Data[0] = strtonum(sAttackerIndex);
    Data[1] = strtonum(sVictimIndex);
    Data[2] = strtonum(sDamage[0][7]);
    Data[3] = strtonum(sDamage[1][12]);
    plugin_exec(g_Function[injure],Data);
    return PLUGIN_HANDLED;
}

public registered_event57(HLCommand,HLData,HLUserName,UserIndex) {
    static Data[40];
    static sAttackerIndex[3];
    static sVictimIndex[3];
    convert_string(HLData,Data,40);
    strsplit(Data," ",sAttackerIndex,3,sVictimIndex,3,Data[2],MAX_DATA_LENGTH-2);
    Data[0] = strtonum(sAttackerIndex);
    Data[1] = strtonum(sVictimIndex);
    plugin_exec(g_Function[kill],Data);
    return PLUGIN_HANDLED;
}

public registered_event53(HLCommand,HLData,HLUserName,UserIndex) {
    static Data[30];
    static sVictimIndex[3];
    convert_string(HLData,Data,30);
    strsplit(Data," ",sVictimIndex,3,Data[1],29);
    Data[0] = strtonum(sVictimIndex);
    plugin_exec(g_Function[join_game],Data);
    return PLUGIN_HANDLED;
}

public restart_timer(Timer,Repeat,HLUser,HLParam) {
    plugin_exec(g_Function[game_restart],"");
}