#pragma semicolon 1 #define PLUGIN_AUTHOR "jenz" #define PLUGIN_VERSION "1.0" #include #include #include Handle hGiveNamedItem; Handle g_hLimitGiveNamedTimer = null; bool allow_given_named_item; //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() { allow_given_named_item = true; 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; g_hLimitGiveNamedTimer = CreateTimer(0.10, Timer_Permit_given_named_item, _, TIMER_REPEAT); } public Action Timer_Permit_given_named_item(Handle hTimer) { allow_given_named_item = true; return Plugin_Handled; } public void OnPluginEnd() { if (g_hLimitGiveNamedTimer != null) delete g_hLimitGiveNamedTimer; } public MRESReturn track_give_named_item(int pThis, Handle hReturn, Handle hParams) { char pszName[512]; DHookGetParamString(hParams, 1, pszName, sizeof(pszName)); if (!allow_given_named_item && !StrEqual(pszName, "weapon_knife")) { DHookSetReturn(hReturn, 0); return MRES_Supercede; } allow_given_named_item = false; 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; }