Beispiel #1
0
BOOL _stdcall IsFriendlyFire(PED_TYPE *pPlayer,DWORD *pdwEnt, int iWeapon, float fUnk, int PedPiece, BYTE byteUnk)
{
	CPlayerPool *pPlayerPool;
	CRemotePlayer *pRemotePlayer;
	CLocalPlayer *pLocalPlayer;
	BYTE byteRemotePlayerID;
	BYTE byteLocalPlayerTeam;

	if(pPlayer == GamePool_FindPlayerPed()) {
		if(pNetGame && pNetGame->m_byteFriendlyFire) {
			
			pPlayerPool = pNetGame->GetPlayerPool();
			pLocalPlayer = pPlayerPool->GetLocalPlayer();
			byteLocalPlayerTeam = pLocalPlayer->GetTeam();

			if(pLocalPlayer->IsWasted() || (byteLocalPlayerTeam == NO_TEAM)) return FALSE;

			byteRemotePlayerID = pPlayerPool->FindRemotePlayerIDFromGtaPtr((PED_TYPE *)pdwEnt);

			if(byteRemotePlayerID != INVALID_PLAYER_ID) {
				pRemotePlayer = pPlayerPool->GetAt(byteRemotePlayerID);
				if(pRemotePlayer->GetTeam() == byteLocalPlayerTeam) {
					return TRUE;
				} else {
					return FALSE;
				}
			}

			// didn't find pdwEnt in the player pool.
			// this is where we could check for a vehicle.
		}
	}

	return FALSE;	
}
Beispiel #2
0
void CVehicle::Destroy()
{
    CPlayerPool* pPlayerPool = pNetGame->GetPlayerPool();
    int x=0;
    while(x<=MAX_PLAYERS) {
        CPlayer* p = pPlayerPool->GetAt((BYTE)x);
        if(p->IsActive()) {
            this->DespawnForPlayer((BYTE)x);
        }
        x++;
    }
    m_bDestroyed = true;
}
Beispiel #3
0
void CNetGame::Packet_StatsUpdate(Packet *p)
{
	RakNet::BitStream bsStats(p->data, p->length, false);
	CPlayerPool *pPlayerPool = GetPlayerPool();
	BYTE bytePlayerID = (BYTE)p->playerIndex;
	int iMoney;
	WORD wAmmo;
	BYTE bytePacketID;

	bsStats.Read(bytePacketID);
	bsStats.Read(iMoney);
	bsStats.Read(wAmmo);

	if(pPlayerPool) {
		if(pPlayerPool->GetSlotState(bytePlayerID)) {
			pPlayerPool->SetPlayerMoney(bytePlayerID,iMoney);
			pPlayerPool->SetPlayerAmmo(bytePlayerID, (DWORD)wAmmo);
			pPlayerPool->GetAt(bytePlayerID)->SetCurrentWeaponAmmo((DWORD)wAmmo);
		}
	}	
}
Beispiel #4
0
void CNetGame::Packet_WeaponsUpdate(Packet *p)
{
	RakNet::BitStream bsData(p->data, p->length, false);
	CPlayerPool *pPlayerPool = GetPlayerPool();
	BYTE bytePlayerID = (BYTE)p->playerIndex;

	BYTE byteLength = (p->length - 1) / 4; // Should be number of changed weapons
	
	//printf("Original: %d New: %d", p->length, byteLength);
	
	BYTE byteIndex;
	BYTE byteWeapon;
	WORD wordAmmo;
	
	if (pPlayerPool)
	{
		//printf("1");
		if (pPlayerPool->GetSlotState(bytePlayerID))
		{
			//printf("2");
			CPlayer* pPlayer = pPlayerPool->GetAt(bytePlayerID);
			bsData.Read(byteIndex); // Dump the first byte, we don't need it
			while (byteLength)
			{
				//printf("3");
				bsData.Read(byteIndex);
				bsData.Read(byteWeapon);
				bsData.Read(wordAmmo);
				//printf("\n%u %u %i", byteIndex, byteWeapon, wordAmmo);
				if (byteIndex < (BYTE)13)
				{
					//printf("\n%d %d %d", byteIndex, byteWeapon, wordAmmo);
					pPlayer->m_dwSlotAmmo[byteIndex] = (DWORD)wordAmmo;
					pPlayer->m_byteSlotWeapon[byteIndex] = byteWeapon;
				}
				byteLength--;
			}
		}
	}
}
Beispiel #5
0
void TheGameLoop()
{
	// If the game is not inited then do it now.
	if(!bGameInited && FileCheckSum())
	{
		if(tSettings.bPlayOnline)
		{			
			pNetGame = new CNetGame(tSettings.szConnectHost,atoi(tSettings.szConnectPort),
				tSettings.szNickName,tSettings.szConnectPass);
		}

		pGame->ToggleFrameLimiterState(TRUE);
		bGameInited = TRUE;

		return;
	}

	// The NetGame processing has been moved
	// to the Direct3DDevice::Present hook.
	// This is to solve alt-tab issues.

   // BEGIN: HEALTH BAR AND PLAYER NAME STUFF 
    if(!pGame->IsMenuActive() && bShowNameTags) {

      if(!bbfont) 
      { 
         bbfont = new CBBFont(pD3DDevice, "vcmpfnt"); 
         bbfont->Initialise(); 
      } 

      if (!HealthBarOldStateBlock) 
      { 
         pD3DDevice->BeginStateBlock(); 
         pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); 
         pD3DDevice->SetRenderState(D3DRS_FOGENABLE, FALSE); 
         pD3DDevice->SetRenderState(D3DRS_ZENABLE, 1); 
         pD3DDevice->SetRenderState(D3DRS_FILLMODE, 3); 
         pD3DDevice->SetRenderState(D3DRS_CULLMODE, 1); 
         pD3DDevice->SetRenderState(D3DRS_WRAP0, 0); 
         pD3DDevice->SetRenderState(D3DRS_CLIPPING, 1); 
         pD3DDevice->SetRenderState(D3DRS_VERTEXBLEND, 0); 
         pD3DDevice->SetRenderState(D3DRS_CLIPPLANEENABLE, 1); 
         pD3DDevice->SetRenderState(D3DRS_INDEXEDVERTEXBLENDENABLE, 0); 
         pD3DDevice->SetRenderState(D3DRS_COLORWRITEENABLE, 15); 
         pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, 1); 
         pD3DDevice->SetRenderState(D3DRS_SRCBLEND, 5); 
         pD3DDevice->SetRenderState(D3DRS_DESTBLEND, 6); 
         pD3DDevice->SetRenderState(D3DRS_BLENDOP, 1); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, 4); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, 2); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, 0); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, 4); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, 2); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, 0); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, 0); 
         pD3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, 1); 
         pD3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, 1); 
         pD3DDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); 
         pD3DDevice->SetVertexShader(D3DFVF_XYZ|D3DFVF_DIFFUSE); 
         pD3DDevice->SetStreamSource(0, NULL, 0); 
         pD3DDevice->EndStateBlock(&HealthBarOldStateBlock); 
      } 

      if (!HealthBarNewStateBlock) 
      { 
         pD3DDevice->BeginStateBlock(); 
         pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); 
         pD3DDevice->SetRenderState(D3DRS_FOGENABLE, FALSE); 
         pD3DDevice->SetRenderState(D3DRS_ZENABLE, 1); 
         pD3DDevice->SetRenderState(D3DRS_FILLMODE, 3); 
         pD3DDevice->SetRenderState(D3DRS_CULLMODE, 1); 
         pD3DDevice->SetRenderState(D3DRS_WRAP0, 0); 
         pD3DDevice->SetRenderState(D3DRS_CLIPPING, 1); 
         pD3DDevice->SetRenderState(D3DRS_VERTEXBLEND, 0); 
         pD3DDevice->SetRenderState(D3DRS_CLIPPLANEENABLE, 1); 
         pD3DDevice->SetRenderState(D3DRS_INDEXEDVERTEXBLENDENABLE, 0); 
         pD3DDevice->SetRenderState(D3DRS_COLORWRITEENABLE, 15); 
         pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, 1); 
         pD3DDevice->SetRenderState(D3DRS_SRCBLEND, 5); 
         pD3DDevice->SetRenderState(D3DRS_DESTBLEND, 6); 
         pD3DDevice->SetRenderState(D3DRS_BLENDOP, 1); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, 4); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, 2); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, 0); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, 1); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, 2); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, 0); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0); 
         pD3DDevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, 0); 
         pD3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, 1); 
         pD3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, 1); 
         pD3DDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); 
         pD3DDevice->SetVertexShader(D3DFVF_XYZ|D3DFVF_DIFFUSE); 
         pD3DDevice->EndStateBlock(&HealthBarNewStateBlock); 
      } 

      pD3DDevice->CaptureStateBlock(HealthBarOldStateBlock); 
      pD3DDevice->ApplyStateBlock(HealthBarNewStateBlock); 

      D3DXMATRIX matTransposed; 
      D3DXMatrixTranspose(&matTransposed, (D3DXMATRIX*)&matView); 
      matTransposed._14 = matTransposed._24 = matTransposed._34 = 0.0f; 

      if(pNetGame) 
      { 
         CPlayerPool* pPlayerPool = pNetGame->GetPlayerPool(); 
         for(int x=0; x < MAX_PLAYERS; x++) 
         { 
            if(pPlayerPool->GetSlotState(x) == TRUE) // player is in use 
            { 
               CRemotePlayer* Player = pPlayerPool->GetAt(x); 

               if( Player->IsActive() && 
                  (Player->GetDistanceFromLocalPlayer() <= 80.0f) ) // Active and within reasonable distance 
               { 
                  CPlayerPed* PlayerPed = Player->GetPlayerPed(); 
                   
                  if(PlayerPed->IsOnScreen()) 
                  { // They're onscreen 
                     MATRIX4X4 matPlayer; 
                     PlayerPed->GetMatrix(&matPlayer); 
                     matTransposed._41 = matPlayer.vPos.X; 
                     matTransposed._42 = matPlayer.vPos.Y; 
                     matTransposed._43 = matPlayer.vPos.Z + 1.0f; 
                     pD3DDevice->SetTransform(D3DTS_WORLD, &matTransposed); 

                     float Health = Player->GetReportedHealth(); 
                     if (Health > 100.0f) Health = 100.0f; 

                     HealthBarBGVertices[0].x = HealthBarBGVertices[1].x = (0.0058f * Health) - 0.29f; 
                     pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, HealthBarBDRVertices, sizeof(HealthBarVertices_s)); 
                     pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, HealthBarVertices,    sizeof(HealthBarVertices_s)); 
                     pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, HealthBarBGVertices,  sizeof(HealthBarVertices_s)); 
                      
                     if(bbfont) { 
                        bbfont->Begin(); 
                        //bbfont->Draw(pPlayerPool->GetPlayerName(x), 0.285f, 0xFF000000);
						bbfont->Draw(pPlayerPool->GetPlayerName(x), 0.300f, Player->GetTeamColorAsARGB()); 
                        bbfont->End(); 
                     } 
                  } 
               } 
            } 
         } 
      } 

	  pD3DDevice->ApplyStateBlock(HealthBarOldStateBlock); 
	  // END:   HEALTH BAR AND PLAYER NAME STUFF 
	}

	if(!pGame->IsMenuActive())
	{
		if((pNetGame) && GetAsyncKeyState(VK_F5)) {
			pGame->DisplayHud(FALSE);
			pScoreBoard->Draw();
		}
		else if((pNetGame) && GetAsyncKeyState(VK_F6)) {
			pGame->DisplayHud(FALSE);
			pNetStats->Draw();
		} 
		else
		{
			pGame->DisplayHud(TRUE);
			if(pChatWindow) pChatWindow->Draw();
			if(pCmdWindow) pCmdWindow->Draw();
		}
	}
}