diff --git a/src/CPlayerData.cpp b/src/CPlayerData.cpp index c6658b9..19934b6 100644 --- a/src/CPlayerData.cpp +++ b/src/CPlayerData.cpp @@ -101,6 +101,17 @@ bool CPlayerData::SetPlayerTeamForPlayer(WORD teamplayerid, int team) return true; } +bool CPlayerData::ResetPlayerMarkerForPlayer(WORD resetplayerid) +{ + CPlayer *p = pNetGame->pPlayerPool->pPlayer[resetplayerid]; + + RakNet::BitStream bs; + bs.Write(resetplayerid); + bs.Write(p->dwNickNameColor); + pRakServer->RPC(&RPC_SetPlayerColor, &bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, pRakServer->GetPlayerIDFromIndex(wPlayerID), 0, 0); + return true; +} + int CPlayerData::GetPlayerTeamForPlayer(WORD teamplayerid) { CPlayer *p = pNetGame->pPlayerPool->pPlayer[teamplayerid]; diff --git a/src/CPlayerData.h b/src/CPlayerData.h index 71b165b..088f965 100644 --- a/src/CPlayerData.h +++ b/src/CPlayerData.h @@ -15,6 +15,8 @@ class CPlayerData CPlayerData(WORD playerid); ~CPlayerData(void); + bool ResetPlayerMarkerForPlayer(WORD resetplayerid); + bool SetPlayerTeamForPlayer(WORD teamplayerid, int team); int GetPlayerTeamForPlayer(WORD teamplayerid); inline void ResetPlayerTeam(WORD playerid) { m_iTeams[playerid] = -1; } diff --git a/src/RPCs.cpp b/src/RPCs.cpp index 727261d..58f41e1 100644 --- a/src/RPCs.cpp +++ b/src/RPCs.cpp @@ -24,6 +24,7 @@ int RPC_WorldPlayerRemove = 163; int RPC_ChatBubble = 0x3B; int RPC_SetPlayerSkin = 0x99; int RPC_SetPlayerName = 0x0B; +int RPC_SetPlayerColor = 72; int RPC_SetFightingStyle = 0x59; int RPC_ScrApplyAnimation = 0x56; int RPC_ClientMessage = 0x5D; diff --git a/src/RPCs.h b/src/RPCs.h index ea32b88..e963406 100644 --- a/src/RPCs.h +++ b/src/RPCs.h @@ -52,6 +52,7 @@ extern int RPC_WorldPlayerRemove; extern int RPC_ChatBubble; extern int RPC_SetPlayerSkin; extern int RPC_SetPlayerName; +extern int RPC_SetPlayerColor; extern int RPC_SetFightingStyle; extern int RPC_ScrApplyAnimation; extern int RPC_ClientMessage; diff --git a/src/Scripting.cpp b/src/Scripting.cpp index c4f66d3..56ef9cc 100644 --- a/src/Scripting.cpp +++ b/src/Scripting.cpp @@ -2185,6 +2185,22 @@ static cell AMX_NATIVE_CALL Natives::SetPlayerChatBubbleForPlayer( AMX* amx, cel return 0; } +// native ResetPlayerMarkerForPlayer(playerid, resetplayerid) +static cell AMX_NATIVE_CALL Natives::ResetPlayerMarkerForPlayer(AMX* amx, cell* params) +{ + // If unknown server version + if (!pServer) + return 0; + + CHECK_PARAMS(2, "ResetPlayerMarkerForPlayer"); + + int playerid = static_cast(params[1]); + int resetplayerid = static_cast(params[2]); + + if (!IsPlayerConnectedEx(playerid) || !IsPlayerConnectedEx(resetplayerid)) return 0; + return pPlayerData[playerid]->ResetPlayerMarkerForPlayer(static_cast(resetplayerid)); +} + // native SetPlayerVersion(playerid, version[]; static cell AMX_NATIVE_CALL Natives::SetPlayerVersion( AMX* amx, cell* params ) { diff --git a/src/Scripting.h b/src/Scripting.h index a5d238f..2208d37 100644 --- a/src/Scripting.h +++ b/src/Scripting.h @@ -114,6 +114,7 @@ namespace Natives static cell AMX_NATIVE_CALL AddPlayerForPlayer(AMX *amx, cell *params); // R17 static cell AMX_NATIVE_CALL RemovePlayerForPlayer(AMX *amx, cell *params); // R17 static cell AMX_NATIVE_CALL SetPlayerChatBubbleForPlayer(AMX *amx, cell *params); // R10 + static cell AMX_NATIVE_CALL ResetPlayerMarkerForPlayer(AMX *amx, cell *params); // R17 static cell AMX_NATIVE_CALL SetPlayerVersion(AMX *amx, cell *params); // R9 static cell AMX_NATIVE_CALL IsPlayerSpawned(AMX *amx, cell *params); // R9 static cell AMX_NATIVE_CALL IsPlayerControllable(AMX *amx, cell *params); // R11