From d8b12ee80bfc42b0ed94f4883c93f7e1b8f7f4d0 Mon Sep 17 00:00:00 2001 From: s1lentq Date: Fri, 8 Apr 2016 02:20:45 +0600 Subject: [PATCH] Regamedll API WIP: added some more API functions. Added new cvar, mp_hegrenade_penetration, mp_nadedrops more details in game.cfg. Let inflict damage by grenades to breakable objects. --- dist/game.cfg | 13 +++ regamedll/build.gradle | 3 +- regamedll/dlls/bot/cs_bot.cpp | 7 ++ regamedll/dlls/bot/cs_bot_chatter.cpp | 18 ++- regamedll/dlls/combat.cpp | 88 +++++++++----- regamedll/dlls/game.cpp | 10 +- regamedll/dlls/game.h | 2 + regamedll/dlls/observer.cpp | 2 +- regamedll/dlls/observer.h | 2 +- regamedll/dlls/player.cpp | 107 ++++++++++++++++-- regamedll/dlls/player.h | 16 +-- regamedll/dlls/weapons.cpp | 5 + regamedll/engine/common.h | 1 + regamedll/game_shared/bot/nav_file.cpp | 1 + regamedll/hookers/6153_hooker.cpp | 2 +- regamedll/hookers/hooker_impl.cpp | 1 + regamedll/hookers/hooker_impl.h | 9 +- regamedll/hookers/stl/iosfwd | 2 + regamedll/hookers/stl/vector | 2 +- regamedll/public/regamedll/regamedll_api.h | 65 ++++++++--- .../public/regamedll/regamedll_interfaces.h | 6 + regamedll/regamedll/dlls.h | 2 + regamedll/regamedll/regamedll_api_impl.cpp | 24 +++- regamedll/regamedll/regamedll_api_impl.h | 89 +++++++++------ .../regamedll/regamedll_interfaces_impl.cpp | 2 +- .../regamedll/regamedll_interfaces_impl.h | 18 +-- 26 files changed, 382 insertions(+), 115 deletions(-) diff --git a/dist/game.cfg b/dist/game.cfg index c394139d..6e293e1e 100644 --- a/dist/game.cfg +++ b/dist/game.cfg @@ -30,3 +30,16 @@ mp_maxmoney 16000 // Example setting: "ae" - blocks round time and bomb round end checks // Default value: "0" mp_round_infinite 0 + +// Disable grenade damage through walls +// 0 - disabled +// 1 - enabled +// Default value: "0" +mp_hegrenade_penetration 0 + +// Drop a grenade after player death +// 0 - disabled +// 1 - enabled (only the first slot grenades) +// 2 - drop a everyone +// Default value: "0" +mp_nadedrops 0 diff --git a/regamedll/build.gradle b/regamedll/build.gradle index 945132b7..4718ecad 100644 --- a/regamedll/build.gradle +++ b/regamedll/build.gradle @@ -143,7 +143,8 @@ void setupToolchain(NativeBinarySpec b) '_vsnprintf': 'vsnprintf', '_write' : 'write', '_close' : 'close', - '_vsnwprintf' : 'vswprintf' + '_vsnwprintf' : 'vswprintf', + '_access' : 'access' ]) cfg.linkerOptions.args '-no-opt-class-analysis' diff --git a/regamedll/dlls/bot/cs_bot.cpp b/regamedll/dlls/bot/cs_bot.cpp index efa9da12..c1cb25fb 100644 --- a/regamedll/dlls/bot/cs_bot.cpp +++ b/regamedll/dlls/bot/cs_bot.cpp @@ -1,5 +1,12 @@ #include "precompiled.h" +#ifdef REGAMEDLL_ADD +// Give 3rd-party to get the virtual table of the object. +// Example: AMXModX module: Hamsandwich +// RegisterHam(Ham_Spawn, "bot", "CCSBot__Spawn", 1); +LINK_ENTITY_TO_CLASS(bot, CCSBot, CAPI_CSBot); +#endif + // Return the number of bots following the given player int GetBotFollowCount(CBasePlayer *leader) { diff --git a/regamedll/dlls/bot/cs_bot_chatter.cpp b/regamedll/dlls/bot/cs_bot_chatter.cpp index 0cb35a0e..0ba5efde 100644 --- a/regamedll/dlls/bot/cs_bot_chatter.cpp +++ b/regamedll/dlls/bot/cs_bot_chatter.cpp @@ -419,6 +419,14 @@ bool BotPhraseManager::Initialize(const char *filename, int bankIndex) char baseDir[RadioPathLen] = ""; char compositeFilename[RadioPathLen]; +#ifdef REGAMEDLL_ADD + char soundDir[MAX_PATH]; + char filePath[MAX_PATH]; + + GET_GAME_DIR(soundDir); + Q_strcat(soundDir, "\\sound\\"); +#endif + // Parse the BotChatter.db into BotPhrase collections while (true) { @@ -567,8 +575,8 @@ bool BotPhraseManager::Initialize(const char *filename, int bankIndex) FREE_FILE(phraseDataFile); return false; } - token = MP_COM_GetToken(); + token = MP_COM_GetToken(); GameEventType event = NameToGameEvent(token); if (event <= EVENT_START_RADIO_1 || event >= EVENT_END_RADIO) { @@ -578,7 +586,6 @@ bool BotPhraseManager::Initialize(const char *filename, int bankIndex) } radioEvent = event; - continue; } @@ -593,6 +600,13 @@ bool BotPhraseManager::Initialize(const char *filename, int bankIndex) if (!Q_stricmp(token, "End")) break; +#ifdef REGAMEDLL_ADD + Q_snprintf(filePath, sizeof(filePath), "%s%s%s", soundDir, baseDir, token); + + if (Q_access(filePath, 0) != 0) + continue; +#endif + // found a phrase - add it to the collection BotSpeakable *speak = new BotSpeakable; if (baseDir[0]) diff --git a/regamedll/dlls/combat.cpp b/regamedll/dlls/combat.cpp index 3155011e..021fb9bd 100644 --- a/regamedll/dlls/combat.cpp +++ b/regamedll/dlls/combat.cpp @@ -903,6 +903,31 @@ float CBaseMonster::DamageForce(float damage) return force; } +void EXT_FUNC PlayerBlind(CBasePlayer *pPlayer, entvars_t *pevInflictor, entvars_t *pevAttacker, float fadeTime, float fadeHold, int alpha, Vector &color) +{ + UTIL_ScreenFade(pPlayer, color, fadeTime, fadeHold, alpha, 0); + + for (int i = 1; i <= gpGlobals->maxClients; ++i) + { + CBasePlayer *pObserver = static_cast(UTIL_PlayerByIndex(i)); + + if (!pObserver || !pObserver->IsObservingPlayer(pPlayer)) + continue; + + if (!fadetoblack.value) + { + UTIL_ScreenFade(pObserver, color, fadeTime, fadeHold, alpha, 0); + } + } + + pPlayer->Blind(fadeTime * 0.33, fadeHold, fadeTime, alpha); + + if (TheBots != NULL) + { + TheBots->OnEvent(EVENT_PLAYER_BLINDED_BY_FLASHBANG, pPlayer); + } +} + void RadiusFlash(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int iClassIgnore, int bitsDamageType) { CBaseEntity *pEntity = NULL; @@ -948,12 +973,16 @@ void RadiusFlash(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, vecSpot = pPlayer->BodyTarget(vecSrc); UTIL_TraceLine(vecSrc, vecSpot, dont_ignore_monsters, ENT(pevInflictor), &tr); + g_ReGameHookchains.m_RadiusFlash_TraceLine.callChain(NULL, pPlayer, pevInflictor, pevAttacker, vecSrc, vecSpot, &tr); + if (tr.flFraction != 1.0f && tr.pHit != pPlayer->pev->pContainingEntity) continue; +#ifndef REGAMEDLL_FIXES UTIL_TraceLine(vecSpot, vecSrc, dont_ignore_monsters, tr.pHit, &tr2); if (tr2.flFraction >= 1.0) +#endif { if (tr.fStartSolid) { @@ -1000,27 +1029,8 @@ void RadiusFlash(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, } } - UTIL_ScreenFade(pPlayer, Vector(255, 255, 255), fadeTime, fadeHold, alpha, 0); - - for (int i = 1; i <= gpGlobals->maxClients; ++i) - { - CBasePlayer *pObserver = static_cast(UTIL_PlayerByIndex(i)); - - if (!pObserver || !pObserver->IsObservingPlayer(pPlayer)) - continue; - - if (!fadetoblack.value) - { - UTIL_ScreenFade(pObserver, Vector(255, 255, 255), fadeTime, fadeHold, alpha, 0); - } - } - - pPlayer->Blind(fadeTime * 0.33, fadeHold, fadeTime, alpha); - - if (TheBots != NULL) - { - TheBots->OnEvent(EVENT_PLAYER_BLINDED_BY_FLASHBANG, pPlayer); - } + Vector color(255, 255, 255); + g_ReGameHookchains.m_PlayerBlind.callChain(PlayerBlind, pPlayer, pevInflictor, pevAttacker, fadeTime, fadeHold, alpha, color); } } } @@ -1030,8 +1040,6 @@ float GetAmountOfPlayerVisible(Vector vecSrc, CBaseEntity *entity) float retval = 0.0f; TraceResult tr; Vector spot; - Vector2D dir; - Vector2D perp; const float topOfHead = 25.0f; const float standFeet = 34.0f; @@ -1070,11 +1078,10 @@ float GetAmountOfPlayerVisible(Vector vecSrc, CBaseEntity *entity) if (tr.flFraction == 1.0f) retval += 0.2f; - dir = (entity->pev->origin - vecSrc).Make2D(); + Vector2D dir = (entity->pev->origin - vecSrc).Make2D(); dir.NormalizeInPlace(); - perp.x = -dir.y * edgeOffset; - perp.y = dir.x * edgeOffset; + Vector2D perp(-dir.y * edgeOffset, dir.x * edgeOffset); spot = entity->pev->origin + Vector(perp.x, perp.y, 0); @@ -1138,7 +1145,16 @@ void RadiusDamage(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker damageRatio = GetAmountOfPlayerVisible(vecSrc, pEntity); } - float length = (vecSrc - pEntity->pev->origin).Length(); + damageRatio = GetAmountOfPlayerVisible(vecSrc, pEntity); + + float length; +#ifdef REGAMEDLL_ADD + // allow to damage breakable objects + if (FClassnameIs(pEntity->pev, "func_breakable")) + length = (vecSrc - pEntity->Center()).Length(); + else +#endif + length = (vecSrc - pEntity->pev->origin).Length(); if (useLOS) { @@ -1151,12 +1167,28 @@ void RadiusDamage(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker flAdjustedDamage = (flRadius - length) * (flRadius - length) * 1.25 / (flRadius * flRadius) * (damageRatio * flDamage) * 1.5; } else + { flAdjustedDamage = flDamage - length * falloff; +#ifdef REGAMEDLL_ADD + // disable grenade damage through walls? + if (hegrenade_penetration.string[0] == '1' && (bitsDamageType & DMG_EXPLOSION)) + { + UTIL_TraceLine(vecSrc, pEntity->pev->origin, ignore_monsters, NULL, &tr); + + if (tr.flFraction != 1.0f) + flAdjustedDamage = 0.0f; + } +#endif + } if (flAdjustedDamage < 0) flAdjustedDamage = 0; - pEntity->TakeDamage(pevInflictor, pevAttacker, flAdjustedDamage, bitsDamageType); +#ifdef REGAMEDLL_FIXES + if (flAdjustedDamage > 0) +#endif + pEntity->TakeDamage(pevInflictor, pevAttacker, flAdjustedDamage, bitsDamageType); + } } } diff --git a/regamedll/dlls/game.cpp b/regamedll/dlls/game.cpp index 7fdd0992..5bc5eb03 100644 --- a/regamedll/dlls/game.cpp +++ b/regamedll/dlls/game.cpp @@ -95,9 +95,11 @@ cvar_t sk_scientist_heal3 = { "sk_scientist_heal3", "0", 0, 0.0f, NULL }; #ifdef REGAMEDLL_ADD -cvar_t game_version = { "game_version", APP_VERSION_STRD, FCVAR_SERVER, 0.0f, NULL }; -cvar_t maxmoney = { "mp_maxmoney", "16000", FCVAR_SERVER, 0.0f, NULL }; -cvar_t round_infinite = { "mp_round_infinite", "0", FCVAR_SERVER, 0.0f, NULL }; +cvar_t game_version = { "game_version", APP_VERSION_STRD, FCVAR_SERVER, 0.0f, nullptr }; +cvar_t maxmoney = { "mp_maxmoney", "16000", FCVAR_SERVER, 0.0f, nullptr }; +cvar_t round_infinite = { "mp_round_infinite", "0", FCVAR_SERVER, 0.0f, nullptr }; +cvar_t hegrenade_penetration = { "mp_hegrenade_penetration", "0", 0, 0.0f, nullptr }; +cvar_t nadedrops = { "mp_nadedrops", "0", 0, 0.0f, nullptr }; void GameDLL_Version_f() { @@ -222,6 +224,8 @@ void EXT_FUNC GameDLLInit() CVAR_REGISTER(&game_version); CVAR_REGISTER(&maxmoney); CVAR_REGISTER(&round_infinite); + CVAR_REGISTER(&hegrenade_penetration); + CVAR_REGISTER(&nadedrops); // print version CONSOLE_ECHO("ReGameDLL build: " __TIME__ " " __DATE__ " (" APP_VERSION_STRD ")\n"); diff --git a/regamedll/dlls/game.h b/regamedll/dlls/game.h index 85fe908a..be8f75e7 100644 --- a/regamedll/dlls/game.h +++ b/regamedll/dlls/game.h @@ -135,6 +135,8 @@ extern cvar_t sk_scientist_heal3; extern cvar_t maxmoney; extern cvar_t round_infinite; +extern cvar_t hegrenade_penetration; +extern cvar_t nadedrops; #endif diff --git a/regamedll/dlls/observer.cpp b/regamedll/dlls/observer.cpp index a788abb0..e3af8e70 100644 --- a/regamedll/dlls/observer.cpp +++ b/regamedll/dlls/observer.cpp @@ -2,7 +2,7 @@ LINK_HOOK_CHAIN(int, GetForceCamera, (CBasePlayer *pObserver), pObserver); -int GetForceCamera_internal(CBasePlayer *pObserver) +int __API_HOOK(GetForceCamera)(CBasePlayer *pObserver) { int retVal; diff --git a/regamedll/dlls/observer.h b/regamedll/dlls/observer.h index ef0b63f4..cab1d045 100644 --- a/regamedll/dlls/observer.h +++ b/regamedll/dlls/observer.h @@ -37,7 +37,7 @@ #define CAMERA_MODE_SPEC_ONLY_FRIST_PERSON 2 int GetForceCamera(CBasePlayer *pObserver); -int GetForceCamera_internal(CBasePlayer *pObserver); +int GetForceCamera_(CBasePlayer *pObserver); void UpdateClientEffects(CBasePlayer *pObserver, int oldMode); #endif // OBSERVER_H diff --git a/regamedll/dlls/player.cpp b/regamedll/dlls/player.cpp index da81edf8..ad77ff58 100644 --- a/regamedll/dlls/player.cpp +++ b/regamedll/dlls/player.cpp @@ -706,7 +706,7 @@ bool CBasePlayer::IsHittingShield(Vector &vecDirection, TraceResult *ptr) LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, TraceAttack, (entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType), pevAttacker, flDamage, vecDir, ptr, bitsDamageType); -void CBasePlayer::__API_VHOOK(TraceAttack)(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) +void CBasePlayer::__API_VHOOK(TraceAttack)(entvars_t *pevAttacker, float flDamage, VectorRef vecDir, TraceResult *ptr, int bitsDamageType) { bool bShouldBleed = true; bool bShouldSpark = false; @@ -1348,7 +1348,7 @@ void packPlayerItem(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo) pWeaponBox->pev->angles.x = 0; pWeaponBox->pev->angles.z = 0; - pWeaponBox->pev->velocity = pPlayer->pev->velocity * 0.75; + pWeaponBox->pev->velocity = pPlayer->pev->velocity * 0.75f; pWeaponBox->SetThink(&CWeaponBox::Kill); pWeaponBox->pev->nextthink = gpGlobals->time + 300.0f; @@ -1362,6 +1362,55 @@ void packPlayerItem(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo) } } +#ifdef REGAMEDLL_ADD +void packPlayerNade(CBasePlayer *pPlayer, CBasePlayerItem *pItem, bool packAmmo) +{ + if (pItem == NULL) + return; + + const char *modelName = GetCSModelName(pItem->m_iId); + if (modelName != NULL) + { + float flOffset = 0.0f; + switch (pItem->m_iId) + { + case WEAPON_HEGRENADE: + flOffset = 14.0f; + break; + case WEAPON_FLASHBANG: + flOffset = 0.0f; + break; + case WEAPON_SMOKEGRENADE: + flOffset = -14.0f; + break; + } + + Vector vecAngles = pPlayer->pev->angles; + Vector dir(Q_cos(vecAngles.y) * flOffset, Q_sin(vecAngles.y) * flOffset, 0.0f); + + vecAngles.x = 0.0f; + vecAngles.y += 45.0f; + + CWeaponBox *pWeaponBox = (CWeaponBox *)CBaseEntity::Create("weaponbox", pPlayer->pev->origin + dir, vecAngles, ENT(pPlayer->pev)); + + pWeaponBox->pev->angles.x = 0; + pWeaponBox->pev->angles.z = 0; + + pWeaponBox->pev->velocity = pPlayer->pev->velocity * 0.75f; + + pWeaponBox->SetThink(&CWeaponBox::Kill); + pWeaponBox->pev->nextthink = gpGlobals->time + 300.0f; + pWeaponBox->PackWeapon(pItem); + + if (packAmmo) + { + pWeaponBox->PackAmmo(MAKE_STRING(IMPL_CLASS(CBasePlayerItem, ItemInfoArray)[pItem->m_iId].pszAmmo1), pPlayer->m_rgAmmo[pItem->PrimaryAmmoIndex()]); + } + SET_MODEL(ENT(pWeaponBox->pev), modelName); + } +} +#endif + void CBasePlayer::PackDeadPlayerItems() { bool bPackGun = (g_pGameRules->DeadPlayerWeapons(this) != GR_PLR_DROP_GUN_NO); @@ -1379,7 +1428,7 @@ void CBasePlayer::PackDeadPlayerItems() int nBestWeight = 0; CBasePlayerItem *pBestItem = NULL; - for (int n = 0; n < MAX_ITEM_TYPES; n++) + for (int n = 0; n < MAX_ITEM_TYPES; ++n) { CBasePlayerItem *pPlayerItem = m_rgpPlayerItems[ n ]; @@ -1398,19 +1447,47 @@ void CBasePlayer::PackDeadPlayerItems() } } // drop a grenade after death - else if (pPlayerItem->iItemSlot() == GRENADE_SLOT && g_bIsCzeroGame) - packPlayerItem(this, pPlayerItem, true); + else if (pPlayerItem->iItemSlot() == GRENADE_SLOT) + { + if (g_bIsCzeroGame) + packPlayerItem(this, pPlayerItem, true); +#ifdef REGAMEDLL_ADD + else + { + switch ((int)nadedrops.value) + { + case 1: + packPlayerItem(this, pPlayerItem, true); + break; + case 2: + { + CBasePlayerItem *pNade = pPlayerItem; + while (pNade != nullptr) + { + CBasePlayerItem *pTemp = pNade->m_pNext; + packPlayerNade(this, pNade, true); + pNade = pTemp; + } + break; + } + } + } +#endif + } pPlayerItem = pPlayerItem->m_pNext; } } + packPlayerItem(this, pBestItem, bPackAmmo); } RemoveAllItems(TRUE); } -void CBasePlayer::GiveDefaultItems() +LINK_HOOK_CLASS_VOID_CHAIN2(CBasePlayer, GiveDefaultItems); + +void CBasePlayer::__API_HOOK(GiveDefaultItems)() { RemoveAllItems(FALSE); m_bHasPrimary = false; @@ -2113,7 +2190,9 @@ BOOL CBasePlayer::IsBombGuy() return m_bHasC4; } -void CBasePlayer::SetAnimation(PLAYER_ANIM playerAnim) +LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, SetAnimation, (PLAYER_ANIM playerAnim), playerAnim); + +void CBasePlayer::__API_HOOK(SetAnimation)(PLAYER_ANIM playerAnim) { int animDesired; float speed; @@ -2870,7 +2949,9 @@ void CWShield::__MAKE_VHOOK(Touch)(CBaseEntity *pOther) } } -void CBasePlayer::GiveShield(bool bDeploy) +LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, GiveShield, (bool bDeploy), bDeploy); + +void CBasePlayer::__API_HOOK(GiveShield)(bool bDeploy) { m_bOwnsShield = true; m_bHasPrimary = true; @@ -2983,7 +3064,9 @@ NOXREF void CBasePlayer::ThrowPrimary() DropShield(); } -void CBasePlayer::AddAccount(int amount, bool bTrackChange) +LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, AddAccount, (int amount, bool bTrackChange), amount, bTrackChange); + +void CBasePlayer::__API_HOOK(AddAccount)(int amount, bool bTrackChange) { m_iAccount += amount; @@ -5714,7 +5797,9 @@ void CBloodSplat::Spray() pev->nextthink = gpGlobals->time + 0.1f; } -void CBasePlayer::GiveNamedItem(const char *pszName) +LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, GiveNamedItem, (const char *pszName), pszName); + +void CBasePlayer::__API_HOOK(GiveNamedItem)(const char *pszName) { string_t istr = MAKE_STRING(pszName); edict_t *pent = CREATE_NAMED_ENTITY(istr); @@ -6764,7 +6849,7 @@ void CBasePlayer::__API_VHOOK(UpdateClientData)() m_tmNextRadarUpdate = gpGlobals->time + 1.0f; #ifdef REGAMEDLL_ADD - if (friendlyfire.string[0] == '2') + if (CSGameRules()->IsFriendlyFireAttack()) vecOrigin = g_vecZero; #endif diff --git a/regamedll/dlls/player.h b/regamedll/dlls/player.h index 8512f1a1..fa3ff887 100644 --- a/regamedll/dlls/player.h +++ b/regamedll/dlls/player.h @@ -371,12 +371,14 @@ public: virtual void Blind(float flUntilTime, float flHoldTime, float flFadeTime, int iAlpha); virtual void OnTouchingWeapon(CWeaponBox *pWeapon) { } -#ifdef REGAMEDLL_API +#if defined(REGAMEDLL_API) || defined(HOOK_GAMEDLL) void Spawn_(); void Precache_(); int ObjectCaps_(); int Classify_(); - void TraceAttack_(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType); + int Save_(CSave &save); + int Restore_(CRestore &restore); + void TraceAttack_(entvars_t *pevAttacker, float flDamage, VectorRef vecDir, TraceResult *ptr, int bitsDamageType); int TakeDamage_(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType); int TakeHealth_(float flHealth, int bitsDamageType); void Killed_(entvars_t *pevAttacker, int iGib); @@ -394,11 +396,6 @@ public: void ImpulseCommands_(); void RoundRespawn_(); void Blind_(float flUntilTime, float flHoldTime, float flFadeTime, int iAlpha); -#endif // REGAMEDLL_API - -#ifdef HOOK_GAMEDLL - int Save_(CSave &save); - int Restore_(CRestore &restore); const char *TeamID_(); BOOL FBecomeProne_(); int Illumination_(); @@ -424,6 +421,7 @@ public: void ThrowWeapon(char *pszItemName); void ThrowPrimary(); void AddAccount(int amount, bool bTrackChange = true); + void AddAccount_(int amount, bool bTrackChange = true); void Disappear(); void MakeVIP(); bool CanPlayerBuy(bool display = false); @@ -437,6 +435,7 @@ public: void RenewItems(); void PackDeadPlayerItems(); void GiveDefaultItems(); + void GiveDefaultItems_(); void RemoveAllItems(BOOL removeSuit); void SetBombIcon(BOOL bFlash = FALSE); void SetProgressBarTime(int time); @@ -463,6 +462,7 @@ public: void UpdatePlayerSound(); void DeathSound(); void SetAnimation(PLAYER_ANIM playerAnim); + void SetAnimation_(PLAYER_ANIM playerAnim); void SetWeaponAnimType(const char *szExtention) { Q_strcpy(m_szAnimExtention, szExtention); } void CheatImpulseCommands(int iImpulse); void StartDeathCam(); @@ -479,6 +479,7 @@ public: void ItemPreFrame(); void ItemPostFrame(); void GiveNamedItem(const char *pszName); + void GiveNamedItem_(const char *pszName); void EnableControl(BOOL fControl); bool HintMessage(const char *pMessage, BOOL bDisplayIfPlayerDead = FALSE, BOOL bOverride = FALSE); void SendAmmoUpdate(); @@ -526,6 +527,7 @@ public: void RemoveShield(); void DropShield(bool bDeploy = true); void GiveShield(bool bDeploy = true); + void GiveShield_(bool bDeploy = true); bool IsHittingShield(Vector &vecDirection, TraceResult *ptr); bool SelectSpawnSpot(const char *pEntClassName, CBaseEntity* &pSpot); bool IsReloading() diff --git a/regamedll/dlls/weapons.cpp b/regamedll/dlls/weapons.cpp index 67ad7062..6002c893 100644 --- a/regamedll/dlls/weapons.cpp +++ b/regamedll/dlls/weapons.cpp @@ -1816,6 +1816,11 @@ void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther) { if (!FStringNull(m_rgiszAmmo[n])) { +#ifdef REGAMEDLL_FIXES + if (m_rgAmmo[n] < MaxAmmoCarry(m_rgiszAmmo[n])) + continue; +#endif + // there's some ammo of this type. pPlayer->GiveAmmo(m_rgAmmo[n], (char *)STRING(m_rgiszAmmo[n]), MaxAmmoCarry(m_rgiszAmmo[n])); diff --git a/regamedll/engine/common.h b/regamedll/engine/common.h index 8254c3f1..87b93457 100644 --- a/regamedll/engine/common.h +++ b/regamedll/engine/common.h @@ -91,6 +91,7 @@ typedef struct incomingtransfer_s #define Q_alloca alloca #define Q_free free +#define Q_access _access #define Q_close _close #define Q_write _write #define Q_memset memset diff --git a/regamedll/game_shared/bot/nav_file.cpp b/regamedll/game_shared/bot/nav_file.cpp index 6b7849e7..8d58cda0 100644 --- a/regamedll/game_shared/bot/nav_file.cpp +++ b/regamedll/game_shared/bot/nav_file.cpp @@ -429,6 +429,7 @@ void CNavArea::Load(SteamFile *file, unsigned int version) file->Read(&pos, sizeof(float)); } } + return; } diff --git a/regamedll/hookers/6153_hooker.cpp b/regamedll/hookers/6153_hooker.cpp index 224a6120..c20e0736 100644 --- a/regamedll/hookers/6153_hooker.cpp +++ b/regamedll/hookers/6153_hooker.cpp @@ -6093,7 +6093,7 @@ AddressRef g_DataRefs[] = { 0x01E23470, "cv_tutor_hint_interval_time", (size_t)&pcv_tutor_hint_interval_time }, { 0x01E11EE4, "cv_hostage_debug", (size_t)&pcv_hostage_debug }, { 0x01E11EF8, "cv_hostage_stop", (size_t)&pcv_hostage_stop }, - //{ 0x0, "_ZL14placeDirectory", (size_t)&pplaceDirectory }, // DONT USE - NOXREF + //{ 0x01E2A228, "_ZL14placeDirectory", (size_t)&pplaceDirectory }, // DONT USE - NOXREF { 0x01E2A0E4, "TheNavLadderList", (size_t)&pTheNavLadderList }, { 0x01E2A0F0, "TheHidingSpotList", (size_t)&pTheHidingSpotList }, { 0x01E14C5C, "sPlayerModelFiles", (size_t)&psPlayerModelFiles }, diff --git a/regamedll/hookers/hooker_impl.cpp b/regamedll/hookers/hooker_impl.cpp index ed062cd4..4bd28a38 100644 --- a/regamedll/hookers/hooker_impl.cpp +++ b/regamedll/hookers/hooker_impl.cpp @@ -1288,6 +1288,7 @@ void CGunTarget::Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE use void CBasePlayer::Spawn() { Spawn_(); } void CBasePlayer::Precache() { Precache_(); } int CBasePlayer::Save(CSave &save) { return Save_(save); } +int CBasePlayer::ObjectCaps() { return ObjectCaps_(); } int CBasePlayer::Restore(CRestore &restore) { return Restore_(restore); } int CBasePlayer::Classify() { return Classify_(); } void CBasePlayer::TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) { TraceAttack_(pevAttacker, flDamage, vecDir, ptr, bitsDamageType); } diff --git a/regamedll/hookers/hooker_impl.h b/regamedll/hookers/hooker_impl.h index 9bc24287..bbc364c3 100644 --- a/regamedll/hookers/hooker_impl.h +++ b/regamedll/hookers/hooker_impl.h @@ -63,6 +63,8 @@ class CGraph; class CRestore; class CSaveRestoreBuffer; +typedef Vector VectorRef; + #define __API_HOOK(fname)\ fname @@ -78,9 +80,10 @@ class CSaveRestoreBuffer; #define IMPL_CLASS(baseClass,var)\ (*baseClass::p##var) -#define LINK_CLASS_HOOK_VOID_CHAIN(...) -#define LINK_CLASS_HOOK_CHAIN(...) -#define LINK_CLASS_HOOK_API_CHAIN(...) +#define LINK_HOOK_CLASS_VOID_CHAIN(...) +#define LINK_HOOK_CLASS_VOID_CHAIN2(...) +#define LINK_HOOK_CLASS_CHAIN(...) +#define LINK_HOOK_CLASS_CHAIN2(...) #define LINK_HOOK_VOID_CHAIN(...) #define LINK_HOOK_CHAIN(...) diff --git a/regamedll/hookers/stl/iosfwd b/regamedll/hookers/stl/iosfwd index 9f8c6dab..3264779b 100644 --- a/regamedll/hookers/stl/iosfwd +++ b/regamedll/hookers/stl/iosfwd @@ -5,6 +5,8 @@ #include #include +#pragma warning(disable : 4348) + #ifdef _MSC_VER #pragma pack(push, 8) #endif // _MSC_VER diff --git a/regamedll/hookers/stl/vector b/regamedll/hookers/stl/vector index 1f33a64e..27547162 100644 --- a/regamedll/hookers/stl/vector +++ b/regamedll/hookers/stl/vector @@ -74,7 +74,7 @@ public: return (*this); } void reserve(size_type _N) {if (capacity() < _N) - {iterator_ _S = allocator.allocate(_N, (void *)0); + {iterator _S = allocator.allocate(_N, (void *)0); _Ucopy(_First, _Last, _S); __Destroy(_First, _Last); allocator.deallocate(_First, _End - _First); diff --git a/regamedll/public/regamedll/regamedll_api.h b/regamedll/public/regamedll/regamedll_api.h index 29bd27d9..129eec30 100644 --- a/regamedll/public/regamedll/regamedll_api.h +++ b/regamedll/public/regamedll/regamedll_api.h @@ -51,8 +51,8 @@ typedef IHookChain IReGameHook_CBasePlayer_Classify; typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_Classify; // CBasePlayer::TraceAttack hook -typedef IVoidHookChain IReGameHook_CBasePlayer_TraceAttack; -typedef IVoidHookChainRegistryClass IReGameHookRegistry_CBasePlayer_TraceAttack; +typedef IVoidHookChain IReGameHook_CBasePlayer_TraceAttack; +typedef IVoidHookChainRegistryClass IReGameHookRegistry_CBasePlayer_TraceAttack; // CBasePlayer::TakeDamage hook typedef IHookChain IReGameHook_CBasePlayer_TakeDamage; @@ -123,20 +123,50 @@ typedef IVoidHookChain IReGameHook_CBasePlayer_Blind; typedef IVoidHookChainRegistryClass IReGameHookRegistry_CBasePlayer_Blind; - - - - - - -// Observer_IsValidTarget hook +// CBasePlayer::Observer_IsValidTarget hook typedef IHookChain IReGameHook_CBasePlayer_Observer_IsValidTarget; typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_Observer_IsValidTarget; +// CBasePlayer::SetAnimation hook +typedef IVoidHookChain IReGameHook_CBasePlayer_SetAnimation; +typedef IVoidHookChainRegistryClass IReGameHookRegistry_CBasePlayer_SetAnimation; + +// CBasePlayer::GiveDefaultItems hook +typedef IVoidHookChain<> IReGameHook_CBasePlayer_GiveDefaultItems; +typedef IVoidHookChainRegistryClass IReGameHookRegistry_CBasePlayer_GiveDefaultItems; + +// CBasePlayer::GiveNamedItem hook +typedef IVoidHookChain IReGameHook_CBasePlayer_GiveNamedItem; +typedef IVoidHookChainRegistryClass IReGameHookRegistry_CBasePlayer_GiveNamedItem; + +// CBasePlayer::AddAccount hook +typedef IVoidHookChain IReGameHook_CBasePlayer_AddAccount; +typedef IVoidHookChainRegistryClass IReGameHookRegistry_CBasePlayer_AddAccount; + +// CBasePlayer::GiveShield hook +typedef IVoidHookChain IReGameHook_CBasePlayer_GiveShield; +typedef IVoidHookChainRegistryClass IReGameHookRegistry_CBasePlayer_GiveShield; + + + + + + + + + // GetForceCamera hook typedef IHookChain IReGameHook_GetForceCamera; typedef IHookChainRegistry IReGameHookRegistry_GetForceCamera; +// PlayerBlind hook +typedef IVoidHookChain IReGameHook_PlayerBlind; +typedef IVoidHookChainRegistry IReGameHookRegistry_PlayerBlind; + +// RadiusFlash_TraceLine hook +typedef IVoidHookChain IReGameHook_RadiusFlash_TraceLine; +typedef IVoidHookChainRegistry IReGameHookRegistry_RadiusFlash_TraceLine; + class IReGameHookchains { public: virtual ~IReGameHookchains() {} @@ -164,13 +194,18 @@ public: virtual IReGameHookRegistry_CBasePlayer_RoundRespawn* CBasePlayer_RoundRespawn() = 0; virtual IReGameHookRegistry_CBasePlayer_Blind* CBasePlayer_Blind() = 0; - - - - - virtual IReGameHookRegistry_CBasePlayer_Observer_IsValidTarget* CBasePlayer_Observer_IsValidTarget() = 0; + virtual IReGameHookRegistry_CBasePlayer_SetAnimation* CBasePlayer_SetAnimation() = 0; + virtual IReGameHookRegistry_CBasePlayer_GiveDefaultItems* CBasePlayer_GiveDefaultItems() = 0; + virtual IReGameHookRegistry_CBasePlayer_GiveNamedItem* CBasePlayer_GiveNamedItem() = 0; + virtual IReGameHookRegistry_CBasePlayer_AddAccount* CBasePlayer_AddAccount() = 0; + virtual IReGameHookRegistry_CBasePlayer_GiveShield* CBasePlayer_GiveShield() = 0; + + + virtual IReGameHookRegistry_GetForceCamera* GetForceCamera() = 0; + virtual IReGameHookRegistry_PlayerBlind* PlayerBlind() = 0; + virtual IReGameHookRegistry_RadiusFlash_TraceLine* RadiusFlash_TraceLine() = 0; }; @@ -181,6 +216,8 @@ struct ReGameFuncs_t { class ICSPlayer *(*INDEX_TO_CSPLAYER)(int iPlayerIndex); class ICSEntity *(*INDEX_TO_CSENTITY)(int iEntityIndex); struct edict_s *(*CREATE_NAMED_ENTITY2)(string_t iClass); + + void (*CopyString)(char *dest, const char *source); }; class IReGameApi { diff --git a/regamedll/public/regamedll/regamedll_interfaces.h b/regamedll/public/regamedll/regamedll_interfaces.h index f3a5c087..d8909389 100644 --- a/regamedll/public/regamedll/regamedll_interfaces.h +++ b/regamedll/public/regamedll/regamedll_interfaces.h @@ -293,6 +293,12 @@ public: virtual void OnTouchingWeapon(CCSWeaponBox *pWeapon) = 0; public: virtual bool IsConnected() const = 0; + + virtual void SetAnimation(PLAYER_ANIM playerAnim) = 0; + virtual void AddAccount(int amount, bool bTrackChange = true) = 0; + virtual void GiveNamedItem(const char *pszName) = 0; + virtual void GiveDefaultItems() = 0; + virtual void GiveShield(bool bDeploy = true) = 0; }; class IAPI_Bot: public virtual ICSPlayer { diff --git a/regamedll/regamedll/dlls.h b/regamedll/regamedll/dlls.h index e9610a14..338c4d5e 100644 --- a/regamedll/regamedll/dlls.h +++ b/regamedll/regamedll/dlls.h @@ -32,6 +32,8 @@ // declared virtual function's and globals for hooks #ifdef HOOK_GAMEDLL #include "hooker_impl.h" +#else +typedef Vector& VectorRef; #endif // HOOK_GAMEDLL #include "h_export.h" diff --git a/regamedll/regamedll/regamedll_api_impl.cpp b/regamedll/regamedll/regamedll_api_impl.cpp index 144c84c6..c468a26e 100644 --- a/regamedll/regamedll/regamedll_api_impl.cpp +++ b/regamedll/regamedll/regamedll_api_impl.cpp @@ -37,6 +37,8 @@ ReGameFuncs_t g_ReGameApiFuncs = { &INDEX_TO_CSPLAYER, &INDEX_TO_CSENTITY, &CREATE_NAMED_ENTITY, + + &Regamedll_CopyString_api, }; IReGameHookRegistry_CBasePlayer_Spawn* CReGameHookchains::CBasePlayer_Spawn() { return &m_CBasePlayer_Spawn; } @@ -62,10 +64,17 @@ IReGameHookRegistry_CBasePlayer_ImpulseCommands* CReGameHookchains::CBasePlayer_ IReGameHookRegistry_CBasePlayer_RoundRespawn* CReGameHookchains::CBasePlayer_RoundRespawn() { return &m_CBasePlayer_RoundRespawn; } IReGameHookRegistry_CBasePlayer_Blind* CReGameHookchains::CBasePlayer_Blind() { return &m_CBasePlayer_Blind; } - - IReGameHookRegistry_CBasePlayer_Observer_IsValidTarget* CReGameHookchains::CBasePlayer_Observer_IsValidTarget() { return &m_CBasePlayer_Observer_IsValidTarget; } +IReGameHookRegistry_CBasePlayer_SetAnimation* CReGameHookchains::CBasePlayer_SetAnimation() { return &m_CBasePlayer_SetAnimation; } +IReGameHookRegistry_CBasePlayer_GiveDefaultItems* CReGameHookchains::CBasePlayer_GiveDefaultItems() { return &m_CBasePlayer_GiveDefaultItems; } +IReGameHookRegistry_CBasePlayer_GiveNamedItem* CReGameHookchains::CBasePlayer_GiveNamedItem() { return &m_CBasePlayer_GiveNamedItem; } +IReGameHookRegistry_CBasePlayer_AddAccount* CReGameHookchains::CBasePlayer_AddAccount() { return &m_CBasePlayer_AddAccount; } +IReGameHookRegistry_CBasePlayer_GiveShield* CReGameHookchains::CBasePlayer_GiveShield() { return &m_CBasePlayer_GiveShield; } + + IReGameHookRegistry_GetForceCamera* CReGameHookchains::GetForceCamera() { return &m_GetForceCamera; } +IReGameHookRegistry_PlayerBlind* CReGameHookchains::PlayerBlind() { return &m_PlayerBlind; } +IReGameHookRegistry_RadiusFlash_TraceLine* CReGameHookchains::RadiusFlash_TraceLine() { return &m_RadiusFlash_TraceLine; } int CReGameApi::GetMajorVersion() { @@ -92,4 +101,15 @@ IReGameData *CReGameApi::GetGameData() return &g_ReGameData; } +void EXT_FUNC Regamedll_CopyString_api(char *dest, const char *source) +{ + size_t len = Q_strlen(source); + if (dest == nullptr || Q_strlen(dest) != len) { + delete [] dest; + dest = new char [len + 1]; + } + + Q_strcpy(dest, source); +} + EXPOSE_SINGLE_INTERFACE(CReGameApi, IReGameApi, VRE_GAMEDLL_API_VERSION); diff --git a/regamedll/regamedll/regamedll_api_impl.h b/regamedll/regamedll/regamedll_api_impl.h index c2be495d..7207e0cb 100644 --- a/regamedll/regamedll/regamedll_api_impl.h +++ b/regamedll/regamedll/regamedll_api_impl.h @@ -48,20 +48,13 @@ typedef IHookChainClassImpl CRegameHook_CBasePlayer_Classify; typedef IHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_Classify; // CBasePlayer::TraceAttack hook -typedef IVoidHookChainClassImpl CRegameHook_CBasePlayer_TraceAttack; -typedef IVoidHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_TraceAttack; +typedef IVoidHookChainClassImpl CRegameHook_CBasePlayer_TraceAttack; +typedef IVoidHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_TraceAttack; // CBasePlayer::TakeDamage hook typedef IHookChainClassImpl CRegameHook_CBasePlayer_TakeDamage; typedef IHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_TakeDamage; - - - - - - - // CBasePlayer::TakeHealth hook typedef IHookChainClassImpl CRegameHook_CBasePlayer_TakeHealth; typedef IHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_TakeHealth; @@ -127,19 +120,45 @@ typedef IVoidHookChainClassImpl CRegameHo typedef IVoidHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_Blind; - - - - - -// CBasePlayer::Observer_IsValidTarget +// CBasePlayer::Observer_IsValidTarget hook typedef IHookChainClassImpl CReGameHook_CBasePlayer_Observer_IsValidTarget; typedef IHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_Observer_IsValidTarget; -// GetForceCamera +// CBasePlayer::SetAnimation hook +typedef IVoidHookChainClassImpl CRegameHook_CBasePlayer_SetAnimation; +typedef IVoidHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_SetAnimation; + +// CBasePlayer::GiveDefaultItems hook +typedef IVoidHookChainClassImpl CRegameHook_CBasePlayer_GiveDefaultItems; +typedef IVoidHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_GiveDefaultItems; + +// CBasePlayer::GiveNamedItem hook +typedef IVoidHookChainClassImpl CRegameHook_CBasePlayer_GiveNamedItem; +typedef IVoidHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_GiveNamedItem; + +// CBasePlayer::AddAccount hook +typedef IVoidHookChainClassImpl CRegameHook_CBasePlayer_AddAccount; +typedef IVoidHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_AddAccount; + +// CBasePlayer::AddAccount hook +typedef IVoidHookChainClassImpl CRegameHook_CBasePlayer_GiveShield; +typedef IVoidHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_GiveShield; + + + + +// GetForceCamera hook typedef IHookChainImpl CReGameHook_GetForceCamera; typedef IHookChainRegistryImpl CReGameHookRegistry_GetForceCamera; +// PlayerBlind hook +typedef IVoidHookChainImpl CReGameHook_PlayerBlind; +typedef IVoidHookChainRegistryImpl CReGameHookRegistry_PlayerBlind; + +// RadiusFlash_TraceLine hook +typedef IVoidHookChainImpl CReGameHook_RadiusFlash_TraceLine; +typedef IVoidHookChainRegistryImpl CReGameHookRegistry_RadiusFlash_TraceLine; + class CReGameHookchains: public IReGameHookchains { public: // CBasePlayer virtual @@ -166,16 +185,17 @@ public: CReGameHookRegistry_CBasePlayer_RoundRespawn m_CBasePlayer_RoundRespawn; CReGameHookRegistry_CBasePlayer_Blind m_CBasePlayer_Blind; - - - - - - - - CReGameHookRegistry_CBasePlayer_Observer_IsValidTarget m_CBasePlayer_Observer_IsValidTarget; + CReGameHookRegistry_CBasePlayer_SetAnimation m_CBasePlayer_SetAnimation; + CReGameHookRegistry_CBasePlayer_GiveDefaultItems m_CBasePlayer_GiveDefaultItems; + CReGameHookRegistry_CBasePlayer_GiveNamedItem m_CBasePlayer_GiveNamedItem; + CReGameHookRegistry_CBasePlayer_AddAccount m_CBasePlayer_AddAccount; + CReGameHookRegistry_CBasePlayer_GiveShield m_CBasePlayer_GiveShield; + + CReGameHookRegistry_GetForceCamera m_GetForceCamera; + CReGameHookRegistry_PlayerBlind m_PlayerBlind; + CReGameHookRegistry_RadiusFlash_TraceLine m_RadiusFlash_TraceLine; public: virtual IReGameHookRegistry_CBasePlayer_Spawn* CBasePlayer_Spawn(); @@ -201,16 +221,19 @@ public: virtual IReGameHookRegistry_CBasePlayer_RoundRespawn* CBasePlayer_RoundRespawn(); virtual IReGameHookRegistry_CBasePlayer_Blind* CBasePlayer_Blind(); - - - - - - - - virtual IReGameHookRegistry_CBasePlayer_Observer_IsValidTarget* CBasePlayer_Observer_IsValidTarget(); + virtual IReGameHookRegistry_CBasePlayer_SetAnimation* CBasePlayer_SetAnimation(); + virtual IReGameHookRegistry_CBasePlayer_GiveDefaultItems* CBasePlayer_GiveDefaultItems(); + virtual IReGameHookRegistry_CBasePlayer_GiveNamedItem* CBasePlayer_GiveNamedItem(); + virtual IReGameHookRegistry_CBasePlayer_AddAccount* CBasePlayer_AddAccount(); + virtual IReGameHookRegistry_CBasePlayer_GiveShield* CBasePlayer_GiveShield(); + + + + virtual IReGameHookRegistry_GetForceCamera* GetForceCamera(); + virtual IReGameHookRegistry_PlayerBlind* PlayerBlind(); + virtual IReGameHookRegistry_RadiusFlash_TraceLine* RadiusFlash_TraceLine(); }; @@ -227,3 +250,5 @@ public: virtual IReGameHookchains *GetHookchains(); virtual IReGameData* GetGameData(); }; + +extern void Regamedll_CopyString_api(char *dest, const char *source); diff --git a/regamedll/regamedll/regamedll_interfaces_impl.cpp b/regamedll/regamedll/regamedll_interfaces_impl.cpp index 43f13925..a7f1ba59 100644 --- a/regamedll/regamedll/regamedll_interfaces_impl.cpp +++ b/regamedll/regamedll/regamedll_interfaces_impl.cpp @@ -92,7 +92,7 @@ void Regamedll_MonitorEntities() ++nCount; } - + CONSOLE_ECHO(__FUNCTION__":: nCount: (%d) (%d)\n", nCount, gpGlobals->maxEntities); } diff --git a/regamedll/regamedll/regamedll_interfaces_impl.h b/regamedll/regamedll/regamedll_interfaces_impl.h index ebe1b5b9..a2c0b92d 100644 --- a/regamedll/regamedll/regamedll_interfaces_impl.h +++ b/regamedll/regamedll/regamedll_interfaces_impl.h @@ -45,10 +45,9 @@ extern ICSEntity *INDEX_TO_CSENTITY(int iEntityIndex); #define __API_VHOOK(fname)\ fname##_ -#define __API_HOOK __API_VHOOK - #ifndef HOOK_GAMEDLL +#define __API_HOOK __API_VHOOK #define __MAKE_VHOOK(fname)\ fname @@ -72,13 +71,14 @@ extern ICSEntity *INDEX_TO_CSENTITY(int iEntityIndex); #define LINK_HOOK_VOID_CHAIN(functionName, args, ...)\ void functionName args {\ - g_ReGameHookchains.m_##functionName.callChain(functionName##_internal, __VA_ARGS__);\ + g_ReGameHookchains.m_##functionName.callChain(functionName##_, __VA_ARGS__);\ } #define LINK_HOOK_CHAIN(ret, functionName, args, ...)\ ret functionName args {\ - return g_ReGameHookchains.m_##functionName.callChain(functionName##_internal, __VA_ARGS__);\ + return g_ReGameHookchains.m_##functionName.callChain(functionName##_, __VA_ARGS__);\ } + #endif // Implementation interfaces @@ -198,8 +198,6 @@ public: virtual ICSPlayerItem *GetWeaponPtr() { ((CBasePlayerItem *)m_pEntity)->GetWeaponPtr(); } virtual float GetMaxSpeed() { ((CBasePlayerItem *)m_pEntity)->GetMaxSpeed(); } virtual int iItemSlot() { ((CBasePlayerItem *)m_pEntity)->iItemSlot(); } -public: - virtual CBasePlayerItem *GetEntity() const { return (CBasePlayerItem *)m_pEntity; } }; class CCSToggle: public CCSAnimating { @@ -311,7 +309,13 @@ public: virtual void OnTouchingWeapon(CCSWeaponBox *pWeapon) { ((CBasePlayer *)m_pEntity)->OnTouchingWeapon((CWeaponBox *)pWeapon->m_pEntity); } public: virtual bool IsConnected() const { return m_pEntity->has_disconnected == false; } - virtual CBasePlayer *GetEntity() const { return (CBasePlayer *)m_pEntity; } + + virtual void SetAnimation(PLAYER_ANIM playerAnim) { ((CBasePlayer *)m_pEntity)->SetAnimation(playerAnim); } + virtual void AddAccount(int amount, bool bTrackChange = true) { ((CBasePlayer *)m_pEntity)->AddAccount(amount, bTrackChange); } + virtual void GiveNamedItem(const char *pszName) { ((CBasePlayer *)m_pEntity)->GiveNamedItem(pszName); } + virtual void GiveDefaultItems() { ((CBasePlayer *)m_pEntity)->GiveDefaultItems(); } + virtual void GiveShield(bool bDeploy = true) { ((CBasePlayer *)m_pEntity)->GiveShield(bDeploy); } + }; class CAPI_Bot: public CCSPlayer {