Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 48612ef

Browse files
Synchronize changes from 1.6 master branch [ci skip]
45d6996 Refactor bulletsync and add checks (#4381)
2 parents e3e077c + 45d6996 commit 48612ef

File tree

16 files changed

+640
-462
lines changed

16 files changed

+640
-462
lines changed

‎Client/mods/deathmatch/logic/CNetAPI.cpp‎

Lines changed: 81 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -128,37 +128,29 @@ bool CNetAPI::ProcessPacket(unsigned char bytePacketID, NetBitStreamInterface& B
128128

129129
case PACKET_ID_PLAYER_BULLETSYNC:
130130
{
131-
// Read out the player ID
132-
ElementID PlayerID;
133-
if (BitStream.Read(PlayerID))
134-
{
135-
// Grab the player
136-
CClientPlayer* pPlayer = m_pPlayerManager->Get(PlayerID);
137-
if (pPlayer)
138-
{
139-
// Read out the bulletsync data
140-
ReadBulletsync(pPlayer, BitStream);
141-
}
142-
}
131+
ElementID id;
132+
if (!BitStream.Read(id))
133+
return true;
134+
135+
auto* player = m_pPlayerManager->Get(id);
136+
if (!player)
137+
return true;
143138

139+
ReadBulletsync(player, BitStream);
144140
return true;
145141
}
146142

147143
case PACKET_ID_WEAPON_BULLETSYNC:
148144
{
149-
// Read out the player ID
150-
ElementID PlayerID;
151-
if (BitStream.Read(PlayerID))
152-
{
153-
// Grab the player
154-
CClientPlayer* pPlayer = m_pPlayerManager->Get(PlayerID);
155-
if (pPlayer)
156-
{
157-
// Read out the bulletsync data
158-
ReadWeaponBulletsync(pPlayer, BitStream);
159-
}
160-
}
145+
ElementID id;
146+
if (!BitStream.Read(id))
147+
return true;
148+
149+
auto* player = m_pPlayerManager->Get(id);
150+
if (!player)
151+
return true;
161152

153+
ReadWeaponBulletsync(player, BitStream);
162154
return true;
163155
}
164156

@@ -2230,152 +2222,119 @@ void CNetAPI::ReadVehiclePartsState(CClientVehicle* pVehicle, NetBitStreamInterf
22302222
static_cast<CDeathmatchVehicle*>(pVehicle)->ResetDamageModelSync();
22312223
}
22322224

2233-
//
2234-
// Read bulletsync packet for a remote player
2235-
//
2236-
void CNetAPI::ReadBulletsync(CClientPlayer* pPlayer, NetBitStreamInterface& BitStream)
2225+
void CNetAPI::ReadBulletsync(CClientPlayer* player, NetBitStreamInterface& stream)
22372226
{
2238-
// Read the bulletsync data
2239-
uchar ucWeapon = 0;
2240-
if (!BitStream.Read(ucWeapon) || !CClientWeaponManager::HasWeaponBulletSync(ucWeapon))
2227+
std::uint8_t weapon = 0;
2228+
if (!stream.Read(weapon) || !CClientWeaponManager::HasWeaponBulletSync(weapon))
22412229
return;
22422230

2243-
eWeaponType weaponType = (eWeaponType)ucWeapon;
2231+
constauto type = static_cast<eWeaponType>(weapon);
22442232

2245-
CVector vecStart, vecEnd;
2246-
if (!BitStream.Read((char*)&vecStart, sizeof(CVector)) || !BitStream.Read((char*)&vecEnd, sizeof(CVector)))
2233+
CVector start;
2234+
CVector end;
2235+
if (!stream.Read(reinterpret_cast<char*>(&start), sizeof(CVector)) ||
2236+
!stream.Read(reinterpret_cast<char*>(&end), sizeof(CVector)) ||
2237+
!start.IsValid() || !end.IsValid())
22472238
return;
22482239

2249-
if (!vecStart.IsValid() || !vecEnd.IsValid())
2240+
std::uint8_t order = 0;
2241+
if (!stream.Read(order))
22502242
return;
22512243

2252-
uchar ucOrderCounter = 0;
2253-
if (!BitStream.Read(ucOrderCounter))
2254-
return;
2244+
float damage = 0.0f;
2245+
std::uint8_t zone = 0;
2246+
CClientPlayer* damaged = nullptr;
22552247

2256-
float fDamage = 0;
2257-
uchar ucHitZone = 0;
2258-
CClientPlayer* pDamagedPlayer = NULL;
2259-
if (BitStream.ReadBit())
2248+
if (stream.ReadBit())
22602249
{
2261-
ElementID DamagedPlayerID = INVALID_ELEMENT_ID;
2262-
if (!BitStream.Read(fDamage) || !BitStream.Read(ucHitZone) || !BitStream.Read(DamagedPlayerID))
2250+
ElementID id = INVALID_ELEMENT_ID;
2251+
if (!stream.Read(damage) || !stream.Read(zone) || !stream.Read(id))
22632252
return;
22642253

2265-
pDamagedPlayer = DynamicCast<CClientPlayer>(CElementIDs::GetElement(DamagedPlayerID));
2254+
damaged = DynamicCast<CClientPlayer>(CElementIDs::GetElement(id));
22662255
}
22672256

2268-
// Duplicate bullet check
2269-
{
2270-
bool bIsDuplicate = false;
2257+
bool duplicate = false;
22712258

2272-
// Check if duplicate by comparing with previously sent vectors
2273-
if (vecStart == pPlayer->m_vecPrevBulletSyncStart && vecEnd == pPlayer->m_vecPrevBulletSyncEnd)
2274-
{
2275-
bIsDuplicate = true;
2276-
}
2277-
pPlayer->m_vecPrevBulletSyncStart = vecStart;
2278-
pPlayer->m_vecPrevBulletSyncEnd = vecEnd;
2259+
if (start == player->m_vecPrevBulletSyncStart && end == player->m_vecPrevBulletSyncEnd)
2260+
duplicate = true;
22792261

2280-
// Verify if duplicate by comparing order counter
2281-
char cDif = ucOrderCounter - pPlayer->m_ucPrevBulletSyncOrderCounter;
2282-
if (cDif > 0)
2283-
bIsDuplicate = false;
2262+
player->m_vecPrevBulletSyncStart = start;
2263+
player->m_vecPrevBulletSyncEnd = end;
22842264

2285-
pPlayer->m_ucPrevBulletSyncOrderCounter = ucOrderCounter;
2265+
if (static_cast<char>(order - player->m_ucPrevBulletSyncOrderCounter) > 0)
2266+
duplicate = false;
22862267

2287-
if (bIsDuplicate)
2288-
return;
2289-
}
2268+
player->m_ucPrevBulletSyncOrderCounter = order;
22902269

2291-
pPlayer->DischargeWeapon(weaponType, vecStart, vecEnd, fDamage, ucHitZone, pDamagedPlayer);
2270+
if (duplicate)
2271+
return;
2272+
2273+
player->DischargeWeapon(type, start, end, damage, zone, damaged);
22922274
}
22932275

2294-
//
2295-
// Read bulletsync packet for a remote player
2296-
//
2297-
void CNetAPI::ReadWeaponBulletsync(CClientPlayer* pPlayer, NetBitStreamInterface& BitStream)
2276+
void CNetAPI::ReadWeaponBulletsync(CClientPlayer* player, NetBitStreamInterface& stream)
22982277
{
2299-
// Read the bulletsync data
2300-
ElementID elementID;
2301-
if (!BitStream.Read(elementID))
2302-
return;
2303-
2304-
CClientWeapon* pWeapon = DynamicCast<CClientWeapon>(CElementIDs::GetElement(elementID));
2305-
if (!pWeapon || !CClientWeaponManager::HasWeaponBulletSync(pWeapon->GetWeaponType()))
2278+
ElementID id;
2279+
if (!stream.Read(id))
23062280
return;
23072281

2308-
CVector vecStart, vecEnd;
2309-
if (!BitStream.Read((char*)&vecStart, sizeof(CVector)) || !BitStream.Read((char*)&vecEnd, sizeof(CVector)))
2282+
auto* weapon = DynamicCast<CClientWeapon>(CElementIDs::GetElement(id));
2283+
if (!weapon || !CClientWeaponManager::HasWeaponBulletSync(weapon->GetWeaponType()))
23102284
return;
23112285

2312-
if (!vecStart.IsValid() || !vecEnd.IsValid())
2286+
CVector start;
2287+
CVector end;
2288+
if (!stream.Read(reinterpret_cast<char*>(&start), sizeof(CVector)) || !stream.Read(reinterpret_cast<char*>(&end), sizeof(CVector)) || !start.IsValid() ||
2289+
!end.IsValid())
23132290
return;
23142291

2315-
uchar ucOrderCounter = 0;
2316-
if (!BitStream.Read(ucOrderCounter))
2292+
uint8_t order = 0;
2293+
if (!stream.Read(order))
23172294
return;
23182295

2319-
pWeapon->FireInstantHit(vecStart, vecEnd, false, true);
2296+
weapon->FireInstantHit(start, end, false, true);
23202297
}
23212298

2322-
//
2323-
// Send bulletsync fire button press packet to remote players
2324-
//
2325-
void CNetAPI::SendBulletSyncFire(eWeaponType weaponType, const CVector& vecStart, const CVector& vecEnd, float fDamage, uchar ucHitZone,
2326-
CClientPlayer* pRemoteDamagedPlayer)
2299+
void CNetAPI::SendBulletSyncFire(eWeaponType weapon, const CVector& start, const CVector& end, float damage, std::uint8_t zone, CClientPlayer* damaged)
23272300
{
2328-
// Send a bulletsync packet
2329-
NetBitStreamInterface* pBitStream = g_pNet->AllocateNetBitStream();
2330-
2331-
// Write the bulletsync data
2332-
pBitStream->Write((char)weaponType);
2301+
auto* stream = g_pNet->AllocateNetBitStream();
23332302

2334-
pBitStream->Write((const char*)&vecStart, sizeof(CVector));
2335-
pBitStream->Write((const char*)&vecEnd, sizeof(CVector));
2303+
stream->Write(static_cast<char>(weapon));
2304+
stream->Write(reinterpret_cast<const char*>(&start), sizeof(CVector));
2305+
stream->Write(reinterpret_cast<const char*>(&end), sizeof(CVector));
2306+
stream->Write(m_ucBulletSyncOrderCounter++);
23362307

2337-
pBitStream->Write(m_ucBulletSyncOrderCounter++);
2338-
2339-
if (fDamage > 0 && pRemoteDamagedPlayer)
2308+
if (damage > 0.0f && damaged)
23402309
{
2341-
pBitStream->WriteBit(true);
2342-
pBitStream->Write(fDamage);
2343-
pBitStream->Write(ucHitZone);
2344-
pBitStream->Write(pRemoteDamagedPlayer->GetID());
2310+
stream->WriteBit(true);
2311+
stream->Write(damage);
2312+
stream->Write(zone);
2313+
stream->Write(damaged->GetID());
23452314
}
23462315
else
23472316
{
2348-
pBitStream->WriteBit(false);
2317+
stream->WriteBit(false);
23492318
}
23502319

2351-
// Send the packet
2352-
g_pNet->SendPacket(PACKET_ID_PLAYER_BULLETSYNC, pBitStream, PACKET_PRIORITY_MEDIUM, PACKET_RELIABILITY_RELIABLE);
2353-
g_pNet->DeallocateNetBitStream(pBitStream);
2320+
g_pNet->SendPacket(PACKET_ID_PLAYER_BULLETSYNC, stream, PACKET_PRIORITY_MEDIUM, PACKET_RELIABILITY_RELIABLE);
2321+
g_pNet->DeallocateNetBitStream(stream);
23542322
}
23552323

2356-
//
2357-
// Send bulletsync fire button press packet to remote players
2358-
//
2359-
void CNetAPI::SendBulletSyncCustomWeaponFire(CClientWeapon* pWeapon, const CVector& vecStart, const CVector& vecEnd)
2324+
void CNetAPI::SendBulletSyncCustomWeaponFire(CClientWeapon* weapon, const CVector& start, const CVector& end)
23602325
{
2361-
// Ignore old bullet sync stuff
2362-
if (pWeapon->IsLocalEntity())
2326+
if (weapon->IsLocalEntity())
23632327
return;
23642328

2365-
// Send a bulletsync packet
2366-
NetBitStreamInterface* pBitStream = g_pNet->AllocateNetBitStream();
2367-
2368-
// Write the bulletsync data
2369-
pBitStream->Write(pWeapon->GetID());
2370-
2371-
pBitStream->Write((const char*)&vecStart, sizeof(CVector));
2372-
pBitStream->Write((const char*)&vecEnd, sizeof(CVector));
2329+
auto* stream = g_pNet->AllocateNetBitStream();
23732330

2374-
pBitStream->Write(m_ucCustomWeaponBulletSyncOrderCounter++);
2331+
stream->Write(weapon->GetID());
2332+
stream->Write(reinterpret_cast<const char*>(&start), sizeof(CVector));
2333+
stream->Write(reinterpret_cast<const char*>(&end), sizeof(CVector));
2334+
stream->Write(m_ucCustomWeaponBulletSyncOrderCounter++);
23752335

2376-
// Send the packet
2377-
g_pNet->SendPacket(PACKET_ID_WEAPON_BULLETSYNC, pBitStream, PACKET_PRIORITY_MEDIUM, PACKET_RELIABILITY_RELIABLE);
2378-
g_pNet->DeallocateNetBitStream(pBitStream);
2336+
g_pNet->SendPacket(PACKET_ID_WEAPON_BULLETSYNC, stream, PACKET_PRIORITY_MEDIUM, PACKET_RELIABILITY_RELIABLE);
2337+
g_pNet->DeallocateNetBitStream(stream);
23792338
}
23802339

23812340
//

‎Client/mods/deathmatch/logic/CNetAPI.h‎

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,8 @@ class CNetAPI
4949

5050
void AddInterpolation(const CVector& vecPosition);
5151
bool GetInterpolation(CVector& vecPosition, unsigned short usLatency);
52-
void SendBulletSyncFire(eWeaponType weaponType, const CVector& vecStart, const CVector& vecEnd, float fDamage, uchar ucHitZone,
53-
CClientPlayer* pRemoteDamagedPlayer);
54-
void SendBulletSyncCustomWeaponFire(CClientWeapon* pWeapon, const CVector& vecStart, const CVector& vecEnd);
52+
void SendBulletSyncFire(eWeaponType weapon, const CVector& start, const CVector& end, float damage, std::uint8_t zone, CClientPlayer* damaged);
53+
void SendBulletSyncCustomWeaponFire(CClientWeapon* weapon, const CVector& start, const CVector& end);
5554
bool IsNetworkTrouble() { return m_bIsNetworkTrouble; }
5655

5756
static bool IsWeaponIDAkimbo(unsigned char ucWeaponID);
@@ -64,8 +63,8 @@ class CNetAPI
6463
void ReadKeysync(CClientPlayer* pPlayer, NetBitStreamInterface& BitStream);
6564
void WriteKeysync(CClientPed* pPed, NetBitStreamInterface& BitStream);
6665

67-
void ReadBulletsync(CClientPlayer* pPlayer, NetBitStreamInterface& BitStream);
68-
void ReadWeaponBulletsync(CClientPlayer* pWeapon, NetBitStreamInterface& BitStream);
66+
void ReadBulletsync(CClientPlayer* player, NetBitStreamInterface& stream);
67+
void ReadWeaponBulletsync(CClientPlayer* player, NetBitStreamInterface& stream);
6968

7069
void ReadPlayerPuresync(CClientPlayer* pPlayer, NetBitStreamInterface& BitStream);
7170
void WritePlayerPuresync(CClientPlayer* pPed, NetBitStreamInterface& BitStream);

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /