#pragma semicolon 1 #define PLUGIN_AUTHOR "jenz" #define PLUGIN_VERSION "1.0" #include #include #include 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; }