From 5160deda40f0ce4c45de0198db3d2c3eb1161154 Mon Sep 17 00:00:00 2001 From: ricardoofnl Date: Thu, 3 Sep 2026 02:43:11 +0700 Subject: [PATCH] [saco] Implement/match `ScrAddGangZone` and `ScrFlashGangZone`; the gang zone pool is fetched after the bitstream --- saco/net/scriptrpc.cpp | 43 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/saco/net/scriptrpc.cpp b/saco/net/scriptrpc.cpp index 460d62d..2529bcf 100644 --- a/saco/net/scriptrpc.cpp +++ b/saco/net/scriptrpc.cpp @@ -85,7 +85,29 @@ void ScrUnk85(RPCParameters *rpcParams) {} void ScrUnk86(RPCParameters *rpcParams) {} void ScrUnk87(RPCParameters *rpcParams) {} void ScrUnk69(RPCParameters *rpcParams) {} -void ScrAddGangZone(RPCParameters *rpcParams) {} +void ScrAddGangZone(RPCParameters *rpcParams) +{ + PCHAR Data = reinterpret_cast(rpcParams->input); + int iBitLength = rpcParams->numberOfBitsOfData; + PlayerID sender = rpcParams->sender; + + WORD wZone; + float fMinX, fMinY, fMaxX, fMaxY; + DWORD dwColor; + + RakNet::BitStream bsData(Data,(iBitLength/8)+1,false); + + CGangZonePool *pGangZonePool = pNetGame->GetGangZonePool(); + if(pGangZonePool) { + bsData.Read(wZone); + bsData.Read(fMinX); + bsData.Read(fMinY); + bsData.Read(fMaxX); + bsData.Read(fMaxY); + bsData.Read(dwColor); + pGangZonePool->New(wZone, fMinX, fMinY, fMaxX, fMaxY, dwColor); + } +} void ScrRemoveGangZone(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast(rpcParams->input); @@ -102,7 +124,24 @@ void ScrRemoveGangZone(RPCParameters *rpcParams) pGangZonePool->Delete(wZone); } } -void ScrFlashGangZone(RPCParameters *rpcParams) {} +void ScrFlashGangZone(RPCParameters *rpcParams) +{ + PCHAR Data = reinterpret_cast(rpcParams->input); + int iBitLength = rpcParams->numberOfBitsOfData; + PlayerID sender = rpcParams->sender; + + WORD wZone; + DWORD dwColor; + + RakNet::BitStream bsData(Data,(iBitLength/8)+1,false); + + CGangZonePool *pGangZonePool = pNetGame->GetGangZonePool(); + if(pGangZonePool) { + bsData.Read(wZone); + bsData.Read(dwColor); + pGangZonePool->Flash(wZone, dwColor); + } +} void ScrStopFlashGangZone(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast(rpcParams->input);