Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef float BoneMatrix_t[MAXSTUDIOBONES][3][4];
- void VectorTransforms(Vector in1, float in2[3][4], float *out)
- {
- out[0] = in1.Dot(in2[0]) + in2[0][3];
- out[1] = in1.Dot(in2[1]) + in2[1][3];
- out[2] = in1.Dot(in2[2]) + in2[2][3];
- }
- void CWorld::GetOrigin(cl_entity_s *ent)
- {
- //Skeleton
- if (g_Utils.IsPlayer(ent))
- {
- Vector pos, vCubePoints[8], vCubePointsTrans[8], vBBMin, vBBMax;
- model_t *pModel = g_Studio.SetupPlayerModel(ent->index);
- if (pModel == NULL)
- return;
- studiohdr_t* pStudioHeader = (studiohdr_t*)g_Studio.Mod_Extradata(pModel);
- mstudiobbox_t* pHitbox = (mstudiobbox_t*)((byte*)pStudioHeader + pStudioHeader->hitboxindex);
- BoneMatrix_t* pBoneMatrix = (BoneMatrix_t*)g_Studio.StudioGetBoneTransform();
- //get 8 points for hitbox head
- vCubePoints[0] = (pHitbox[11].bbmin);
- vCubePoints[1] = Vector(pHitbox[11].bbmin.x, pHitbox[11].bbmax.y, pHitbox[11].bbmin.z);
- vCubePoints[2] = Vector(pHitbox[11].bbmax.x, pHitbox[11].bbmax.y, pHitbox[11].bbmin.z);
- vCubePoints[3] = Vector(pHitbox[11].bbmax.x, pHitbox[11].bbmin.y, pHitbox[11].bbmin.z);
- vCubePoints[4] = (pHitbox[11].bbmax);
- vCubePoints[5] = Vector(pHitbox[11].bbmin.x, pHitbox[11].bbmax.y, pHitbox[11].bbmax.z);
- vCubePoints[6] = Vector(pHitbox[11].bbmin.x, pHitbox[11].bbmin.y, pHitbox[11].bbmax.z);
- vCubePoints[7] = Vector(pHitbox[11].bbmax.x, pHitbox[11].bbmin.y, pHitbox[11].bbmax.z);
- //hitbox head
- for (unsigned int i = 0; i < 8; i++)
- {
- VectorTransforms(vCubePoints[i], (*pBoneMatrix)[pHitbox[11].bone], vCubePointsTrans[i]);
- g_PlayerExtraInfoList[ent->index].vHitboxSkeletonHead[i] = vCubePointsTrans[i] + g_Player[ent->index].vVelocity * 0.0;
- }
- //bone body
- for (unsigned int i = 0; i < /*pStudioHeader->numbones*/53; i++)//numbones returning wrong value
- {
- pos[0] = (*pBoneMatrix)[i][0][3];
- pos[1] = (*pBoneMatrix)[i][1][3];
- pos[2] = (*pBoneMatrix)[i][2][3];
- g_PlayerExtraInfoList[ent->index].vBoneSkeleton[i] = pos + g_Player[ent->index].vVelocity * 0.0;
- }
- }
- //Aimbot
- if (g_Utils.IsPlayer(ent) && ent->index != g_Local.iIndex)
- {
- Vector pos, vBBMin, vBBMax, vTransform, vCubePointsTrans[8], vCubePoints[8], vMultiPoint;
- model_t *pModel = g_Studio.SetupPlayerModel(ent->index);
- if (pModel == NULL)
- return;
- studiohdr_t *pStudioHeader = (studiohdr_t*)g_Studio.Mod_Extradata(pModel);
- BoneMatrix_t* pBoneMatrix = (BoneMatrix_t*)g_Studio.StudioGetBoneTransform();
- mstudiobbox_t *pHitbox = (mstudiobbox_t*)((byte*)pStudioHeader + pStudioHeader->hitboxindex);
- //get hitbox
- for (unsigned int i = 0; i < /*pStudioHeader->numhitboxes*/21; i++)
- {
- VectorTransforms(pHitbox[i].bbmin, (*pBoneMatrix)[pHitbox[i].bone], vBBMin);
- VectorTransforms(pHitbox[i].bbmax, (*pBoneMatrix)[pHitbox[i].bone], vBBMax);
- g_PlayerExtraInfoList[ent->index].vHitbox[i] = (vBBMax + vBBMin) * 0.5f + g_Player[ent->index].vVelocity * 0.0;
- g_PlayerExtraInfoList[ent->index].fHitboxFOV[i] = g_Local.vForward.AngleBetween(g_PlayerExtraInfoList[ent->index].vHitbox[i] - g_Local.vEye);
- //get 8 point of hitbox
- vCubePoints[0] = (pHitbox[i].bbmin);
- vCubePoints[1] = Vector(pHitbox[i].bbmin.x, pHitbox[i].bbmax.y, pHitbox[i].bbmin.z);
- vCubePoints[2] = Vector(pHitbox[i].bbmax.x, pHitbox[i].bbmax.y, pHitbox[i].bbmin.z);
- vCubePoints[3] = Vector(pHitbox[i].bbmax.x, pHitbox[i].bbmin.y, pHitbox[i].bbmin.z);
- vCubePoints[4] = (pHitbox[i].bbmax);
- vCubePoints[5] = Vector(pHitbox[i].bbmin.x, pHitbox[i].bbmax.y, pHitbox[i].bbmax.z);
- vCubePoints[6] = Vector(pHitbox[i].bbmin.x, pHitbox[i].bbmin.y, pHitbox[i].bbmax.z);
- vCubePoints[7] = Vector(pHitbox[i].bbmax.x, pHitbox[i].bbmin.y, pHitbox[i].bbmax.z);
- for (unsigned int x = 0; x < 8; x++)
- {
- VectorTransforms(vCubePoints[x], (*pBoneMatrix)[pHitbox[i].bone], vCubePointsTrans[x]);
- g_PlayerExtraInfoList[ent->index].vHitboxMulti[i][x] = vCubePointsTrans[x] + g_Player[ent->index].vVelocity * 0.0;
- }
- }
- //get bone
- for (unsigned int i = 0; i < /*pStudioHeader->numbones*/53; i++)//numbones returning wrong value
- {
- pos[0] = (*pBoneMatrix)[i][0][3];
- pos[1] = (*pBoneMatrix)[i][1][3];
- pos[2] = (*pBoneMatrix)[i][2][3];
- g_PlayerExtraInfoList[ent->index].vBone[i] = pos + g_Player[ent->index].vVelocity * 0.0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement