int NczPlayer::aimingAt() { trace_t trace; Ray_t ray; edict_t* edict = GetEdict(); if(!edict) return -1; IPlayerInfo* playerinfo = GetPlayerInfo(); if(!playerinfo) return -1; CBotCmd cmd = playerinfo->GetLastUserCommand(); Vector earPos; CIFaceManager::GetInstance()->GetIclients()->ClientEarPosition(edict, &earPos); Vector eyePos = earPos; QAngle eyeAngles = cmd.viewangles; Vector vEnd; AngleVectors(eyeAngles, &vEnd); vEnd = vEnd * 8192.0f + eyePos; ray.Init(eyePos,vEnd); CIFaceManager::GetInstance()->GetItrace()->TraceRay( ray, (CONTENTS_SOLID | CONTENTS_MOVEABLE | CONTENTS_MONSTER | CONTENTS_DEBRIS | CONTENTS_HITBOX), NULL, &trace ); edict_t* target = CIFaceManager::GetInstance()->GetIents()->BaseEntityToEdict(trace.m_pEnt); if ( target && !Helpers::IndexOfEdict(target) == 0 && !trace.allsolid ) { if(!Helpers::isValidEdict(target)) return -1; #undef GetClassName if(strcmp(target->GetClassName(), "player") == 0) { IPlayerInfo* targetinfo = CIFaceManager::GetInstance()->GetIplayers()->GetPlayerInfo(target); if(targetinfo) { int ta = targetinfo->GetTeamIndex(); int tb = playerinfo->GetTeamIndex(); if( ta != tb ) { if( targetinfo->IsPlayer() && !targetinfo->IsHLTV() && !targetinfo->IsObserver() ) { return Helpers::IndexOfEdict(target); } } } } } return -1; }
cell_t GetSurvivorScore(IPluginContext *pContext, const cell_t *params) { CBaseEntity *pPlayer = gamehelpers->ReferenceToEntity(params[1]); if (!pPlayer) return pContext->ThrowNativeError("Invalid client index %d", params[1]); cell_t client = gamehelpers->ReferenceToIndex(params[1]); IGamePlayer *pGamePlayer = playerhelpers->GetGamePlayer(client); if (!pGamePlayer || !pGamePlayer->IsInGame()) return pContext->ThrowNativeError("Client index %d not in game", params[1]); IPlayerInfo* pInfo = pGamePlayer->GetPlayerInfo(); if(!pInfo || pInfo->IsObserver() || pInfo->GetTeamIndex() != 2) return -1; return Detours::g_scores[client]; }
static cell_t IsClientObserver(IPluginContext *pContext, const cell_t *params) { int client = params[1]; CPlayer *pPlayer = g_Players.GetPlayerByIndex(client); if (!pPlayer) { return pContext->ThrowNativeError("Client index %d is invalid", client); } else if (!pPlayer->IsInGame()) { return pContext->ThrowNativeError("Client %d is not in game", client); } IPlayerInfo *pInfo = pPlayer->GetPlayerInfo(); if (!pInfo) { return pContext->ThrowNativeError("IPlayerInfo not supported by game"); } return pInfo->IsObserver() ? 1 : 0; }