Cstrike: Add CS_OnGetItemPrice forward to get/alter an item price on purchase
This commit is contained in:
parent
cf2f753660
commit
60cdbeb219
|
@ -23,6 +23,7 @@ void CtrlDetours_Natives(bool set);
|
||||||
int ForwardInternalCommand = -1;
|
int ForwardInternalCommand = -1;
|
||||||
int ForwardOnBuy = -1;
|
int ForwardOnBuy = -1;
|
||||||
int ForwardOnBuyAttempt = -1;
|
int ForwardOnBuyAttempt = -1;
|
||||||
|
int ForwardOnGetItemPrice = -1;
|
||||||
|
|
||||||
int *UseBotArgs;
|
int *UseBotArgs;
|
||||||
const char **BotArgs;
|
const char **BotArgs;
|
||||||
|
@ -258,6 +259,18 @@ DETOUR_DECL_MEMBER2(AddAccount, void, int, amount, bool, bTrackChange) // void C
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if (ForwardOnGetItemPrice != -1)
|
||||||
|
{
|
||||||
|
int client = G_HL_TypeConversion.cbase_to_id(this);
|
||||||
|
|
||||||
|
cell price[1]; *price = -amount;
|
||||||
|
cell preparedCell = MF_PrepareCellArrayA(price, sizeof(price), true);
|
||||||
|
|
||||||
|
if (MF_IsPlayerAlive(client) && MF_ExecuteForward(ForwardOnGetItemPrice, client, CurrentItemId, preparedCell) > 0)
|
||||||
|
{
|
||||||
|
amount = -*price;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DETOUR_MEMBER_CALL(AddAccount)(amount, bTrackChange);
|
DETOUR_MEMBER_CALL(AddAccount)(amount, bTrackChange);
|
||||||
|
|
|
@ -34,6 +34,7 @@ extern IGameConfig *CommonConfig;
|
||||||
extern int ForwardInternalCommand;
|
extern int ForwardInternalCommand;
|
||||||
extern int ForwardOnBuy;
|
extern int ForwardOnBuy;
|
||||||
extern int ForwardOnBuyAttempt;
|
extern int ForwardOnBuyAttempt;
|
||||||
|
extern int ForwardOnGetItemPrice;
|
||||||
|
|
||||||
typedef edict_t* (*CreateNamedEntityFunc)(string_t iszClassname);
|
typedef edict_t* (*CreateNamedEntityFunc)(string_t iszClassname);
|
||||||
typedef void* (*UTIL_FindEntityByStringFunc)(void* pStartEntity, const char *szKeyword, const char *szValue);
|
typedef void* (*UTIL_FindEntityByStringFunc)(void* pStartEntity, const char *szKeyword, const char *szValue);
|
||||||
|
|
|
@ -65,16 +65,18 @@ void OnPluginsLoaded()
|
||||||
ForwardInternalCommand = MF_RegisterForward("CS_InternalCommand", ET_STOP, FP_CELL, FP_STRING, FP_DONE);
|
ForwardInternalCommand = MF_RegisterForward("CS_InternalCommand", ET_STOP, FP_CELL, FP_STRING, FP_DONE);
|
||||||
ForwardOnBuy = MF_RegisterForward("CS_OnBuy" , ET_STOP, FP_CELL, FP_CELL, FP_DONE);
|
ForwardOnBuy = MF_RegisterForward("CS_OnBuy" , ET_STOP, FP_CELL, FP_CELL, FP_DONE);
|
||||||
ForwardOnBuyAttempt = MF_RegisterForward("CS_OnBuyAttempt" , ET_STOP, FP_CELL, FP_CELL, FP_DONE);
|
ForwardOnBuyAttempt = MF_RegisterForward("CS_OnBuyAttempt" , ET_STOP, FP_CELL, FP_CELL, FP_DONE);
|
||||||
|
ForwardOnGetItemPrice = MF_RegisterForward("CS_OnGetItemPrice" , ET_STOP, FP_CELL, FP_CELL, FP_ARRAY, FP_DONE);
|
||||||
|
|
||||||
// Checking whether such public forwards are used in plugins.
|
// Checking whether such public forwards are used in plugins.
|
||||||
// Resetting variable to -1 to avoid running unnecessary code in ClientCommand.
|
// Resetting variable to -1 to avoid running unnecessary code in ClientCommand.
|
||||||
if (!UTIL_CheckForPublic("CS_InternalCommand")) { ForwardInternalCommand = -1; }
|
if (!UTIL_CheckForPublic("CS_InternalCommand")) { ForwardInternalCommand = -1; }
|
||||||
if (!UTIL_CheckForPublic("CS_OnBuy")) { ForwardOnBuy = -1; }
|
if (!UTIL_CheckForPublic("CS_OnBuy")) { ForwardOnBuy = -1; }
|
||||||
if (!UTIL_CheckForPublic("CS_OnBuyAttempt")) { ForwardOnBuyAttempt = -1; }
|
if (!UTIL_CheckForPublic("CS_OnBuyAttempt")) { ForwardOnBuyAttempt = -1; }
|
||||||
|
if (!UTIL_CheckForPublic("CS_OnGetItemPrice")) { ForwardOnGetItemPrice = -1; }
|
||||||
|
|
||||||
// And enable/disable detours when necessary.
|
// And enable/disable detours when necessary.
|
||||||
ToggleDetour_ClientCommands(ForwardInternalCommand != -1 || ForwardOnBuy != -1 || ForwardOnBuyAttempt != -1);
|
ToggleDetour_ClientCommands(ForwardInternalCommand != -1 || ForwardOnBuy != -1 || ForwardOnBuyAttempt != -1 || ForwardOnGetItemPrice != -1);
|
||||||
ToggleDetour_BuyCommands(ForwardOnBuy != -1);
|
ToggleDetour_BuyCommands(ForwardOnBuy != -1 || ForwardOnGetItemPrice != -1);
|
||||||
|
|
||||||
// Search pev/vtable offset automatically.
|
// Search pev/vtable offset automatically.
|
||||||
TypeConversion.init();
|
TypeConversion.init();
|
||||||
|
|
|
@ -1104,4 +1104,20 @@ forward CS_OnBuyAttempt(index, item);
|
||||||
* @return PLUGIN_CONTINUE to let the buy continue
|
* @return PLUGIN_CONTINUE to let the buy continue
|
||||||
* PLUGIN_HANDLED to block the buy
|
* PLUGIN_HANDLED to block the buy
|
||||||
*/
|
*/
|
||||||
forward CS_OnBuy(index, item);
|
forward CS_OnBuy(index, item, &price);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a client purchased an item and game is about to apply item's price.
|
||||||
|
*
|
||||||
|
* @note This is called right after the user received the item and before the
|
||||||
|
* money is deducted from their cash reserves.
|
||||||
|
* @note For a list of possible item ids see the CSI_* constants.
|
||||||
|
*
|
||||||
|
* @param index Client index
|
||||||
|
* @param item Item id
|
||||||
|
* @param price Item price or buffer to store a newly price to
|
||||||
|
*
|
||||||
|
* @return PLUGIN_CONTINUE to use the default price
|
||||||
|
* PLUGIN_HANDLED or higher to use a newly-set price
|
||||||
|
*/
|
||||||
|
forward CS_OnGetItemPrice(index, item, &price);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user