1.1 --- a/extensions/tf2/natives.cpp Wed Aug 15 16:05:16 2012 +0100
1.2 +++ b/extensions/tf2/natives.cpp Wed Aug 15 23:29:00 2012 +0100
1.3 @@ -39,11 +39,11 @@
1.4 {
1.5 static ICallWrapper *pWrapper = NULL;
1.6
1.7 - // CTFPlayerShared::MakeBleed(CTFPlayer*, CTFWeaponBase*, float)
1.8 + // CTFPlayerShared::MakeBleed(CTFPlayer*, CTFWeaponBase*, float, int=4)
1.9 if(!pWrapper)
1.10 {
1.11 REGISTER_NATIVE_ADDR("MakeBleed",
1.12 - PassInfo pass[3]; \
1.13 + PassInfo pass[4]; \
1.14 pass[0].flags = PASSFLAG_BYVAL; \
1.15 pass[0].size = sizeof(CBaseEntity *); \
1.16 pass[0].type = PassType_Basic; \
1.17 @@ -53,7 +53,10 @@
1.18 pass[2].flags = PASSFLAG_BYVAL; \
1.19 pass[2].size = sizeof(float); \
1.20 pass[2].type = PassType_Basic; \
1.21 - pWrapper = g_pBinTools->CreateCall(addr, CallConv_ThisCall, NULL, pass, 3))
1.22 + pass[3].flags = PASSFLAG_BYVAL; \
1.23 + pass[3].size = sizeof(int); \
1.24 + pass[3].type = PassType_Basic; \
1.25 + pWrapper = g_pBinTools->CreateCall(addr, CallConv_ThisCall, NULL, pass, 4))
1.26 }
1.27
1.28 CBaseEntity *pEntity;
1.29 @@ -80,6 +83,8 @@
1.30 *(CBaseEntity **)vptr = NULL;
1.31 vptr += sizeof(CBaseEntity *);
1.32 *(float *)vptr = sp_ctof(params[3]);
1.33 + vptr += sizeof(float);
1.34 + *(int *)vptr = 4;
1.35
1.36 pWrapper->Execute(vstk, NULL);
1.37
1.38 @@ -449,12 +454,16 @@
1.39 {
1.40 static ICallWrapper *pWrapper = NULL;
1.41
1.42 - //CTFPlayer::Regenerate()
1.43 + //CTFPlayer::Regenerate( bool=true )
1.44
1.45 if (!pWrapper)
1.46 {
1.47 REGISTER_NATIVE_ADDR("Regenerate",
1.48 - pWrapper = g_pBinTools->CreateCall(addr, CallConv_ThisCall, NULL, NULL, 0));
1.49 + PassInfo pass[1]; \
1.50 + pass[0].flags = PASSFLAG_BYVAL; \
1.51 + pass[0].size = sizeof(bool); \
1.52 + pass[0].type = PassType_Basic; \
1.53 + pWrapper = g_pBinTools->CreateCall(addr, CallConv_ThisCall, NULL, pass, 1))
1.54 }
1.55
1.56 CBaseEntity *pEntity;
1.57 @@ -462,7 +471,15 @@
1.58 {
1.59 return pContext->ThrowNativeError("Client index %d is not valid", params[1]);
1.60 }
1.61 - pWrapper->Execute(&pEntity, NULL);
1.62 +
1.63 + unsigned char vstk[sizeof(void *) + sizeof(bool)];
1.64 + unsigned char *vptr = vstk;
1.65 +
1.66 + *(void **)vptr = (void *)pEntity;
1.67 + vptr += sizeof(void *);
1.68 + *(bool *)vptr = true;
1.69 +
1.70 + pWrapper->Execute(vstk, NULL);
1.71
1.72 return 1;
1.73 }