projects-jenz/track_give_named_item/scripting/track_give_named_item.sp

88 lines
2.6 KiB
SourcePawn
Raw Normal View History

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