#pragma semicolon 1
#define PLUGIN_AUTHOR "jenz"
#define PLUGIN_VERSION "1.0"
#include <sourcemod>
#include <sdktools>
#include <dhooks>

Handle hGiveNamedItem;

//the trololo guy is actively checking all plugins running. he should not be aware that we got somehwere.

public Plugin myinfo =
{
    name = "it does what it does", 
    author = PLUGIN_AUTHOR,
    description = "yeah",
    version = PLUGIN_VERSION,
    url = "www.unloze.com"
};

public void OnPluginStart()
{
    Handle conf = LoadGameConfigFile("track_give_named_item.css");
    if (conf == INVALID_HANDLE)
        SetFailState("Failed to load gamedata track_give_named_item.css");

    hGiveNamedItem = DHookCreateDetour(Address_Null, CallConv_THISCALL, ReturnType_CBaseEntity, ThisPointer_CBaseEntity);
    if (!hGiveNamedItem)
        SetFailState("Failed to setup detour for CCSPlayer::GiveNamedItem");

    if (!DHookSetFromConf(hGiveNamedItem, conf, SDKConf_Signature, "CCSPlayer::GiveNamedItem"))
        SetFailState("Failed to load CCSPlayer::GiveNamedItem signature from gamedata");

    //function CCSPlayer::GiveNamedItem has two params.
    DHookAddParam(hGiveNamedItem, HookParamType_CharPtr);
    DHookAddParam(hGiveNamedItem, HookParamType_Int);

    if (!DHookEnableDetour(hGiveNamedItem, false, track_give_named_item))
        SetFailState("Failed to detour CCSPlayer::GiveNamedItem");

    delete conf;
}

public MRESReturn track_give_named_item(int pThis, Handle hReturn, Handle hParams)
{
    char pszName[512];
    DHookGetParamString(hParams, 1, pszName, sizeof(pszName));

    int iSubType = DHookGetParam(hParams, 2);

    LogToFile("addons/sourcemod/logs/GiveNamedItemDebug.txt", "pszName: %s iSubType: %i", pszName, iSubType);
    if (IsValidClient(pThis))
    {
        LogToFile("addons/sourcemod/logs/GiveNamedItemDebug.txt", "Client: %L\n\n", pThis);
    }
    return MRES_Ignored;
}

stock bool IsValidClient(int client)
{
    if (client > 0 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client))
        return true;
    return false;
}
