List of RPC calls

The RPC indices can be found through UABEA and checking the PhotonServerSettings MonoBehavior resource.

Signatures for RPC calls can be found in a generated DummyDLL by looking for methods with the PunRPC attribute applied. For example:

// PlayerScript
[PunRPC]
public void AcknowledgeDamageDoneRPC(string status, float damage, int victimID)
{
	// ...
}

The parameters to this function are the parameters sent in the RPC event.

In some cases, these methods may take an additional parameter PhotonMessageInfo parameter. This parameter isn't sent as part of the RPC event:

// PlayerScript
[PunRPC]
private void HealthUpdated(float value, PhotonMessageInfo info)
{
	// ...
}

Full list

0: AcknowledgeDamageDoneRPC(string status, float damage, int victimID)

Class: PlayerScript

status is most likely a stringified version of PlayerHitPlayerStatus.

1: AnotherRPCMethod(?)

Not found in source code.

2: BecomeNewMasterClient()

Class: MasterClientFinder

3: ChangeCrouchState(?)

4: Chat(?)

Class: InRoomChat

5: CmdGetTeamNumber(?)

6: ColorRpc(?)

Class: OnClickRequestOwnership

7: DestroyRpc(?)

Class: OnClickDestroy

8: DisplayVoteData(?)

9: DoJump(?)

Class: JumpAndRunMovement

10: FetchCheaters(?)

11: FetchVoteData(?)

12: FlagOwnerTeamUpdated(?)

13: FlagTakenValueUpdated(?)

14: Flash()

Class: OnClickFlashRpc

15: GetBestSpawnPointForPlayer(int flagIDToSpawnOn)

Class: PlayerScript

16: GotKillAssist(float amount, int killedID)

Class: PlayerScript

17: HealthUpdated(float value)

Class: PlayerScript

18: InstantiateRpc(int viewID)

Class: ManualPhotonViewAllocator

19: JSNow()

Class: PlayerScript

20: KickPlayer(string playerToKick, string hashedpass)

Class: PlayerScript

21: LatencyReceive(?)

Class: MasterClientFinder

22: LatencySend(?)

Class: MasterClientFinder

23: localCreateGrenade(Vector3 position, Vector3 velocity, float forcedDelay, byte grenadeWeaponType)

Class: PlayerScript

24: localHurt(int damagerID, float damage, Vector3 localPosition, byte damagerWeapon, float newHealth)

Class: PlayerScript

25: localReload()

Class: PlayerScript

26: localSpawnThrowingWeapon(Vector3 position, Vector3 velocity, byte weaponType)

Class: PlayerScript

27: MapVotedFor(?)

28: Marco(?)

Not found in source code.

29: MatchOverChanged(bool value)

Class: PlayerScript

30: mpMeleeAnimation()

Class: PlayerScript

31: mpThrowGrenadeAnimation()

Class: PlayerScript

32: MyRPCMethod(?)

Not found in source code.

33: NukeKill()

Class: PlayerScript

34: PickupItemInit(double timeBase, float[] inactivePickupsAndTimes)

Class: PickupItemSyncer

35: PlayerHitPlayer(?)

36: PlayerKickedForPing(short ping)

Class: PlayerScript

37: Polo(?)

38: PunPickup(?)

Class: PickupItem

39: PunPickupSimple()

Class: PickupItemSimple

40: PunRespawn() / PunRespawn(Vector3 pos)

Class: PickupItem

It seems like this method has multiple overloads, and can be called either with or without position parameter.

41: ReliabilityMessageReceived(?)

42: ReliabilityMessageSent(?)

43: RequestForPickupItems()

Class: PickupItemSyncer

44: RequestForPickupTimes()

Class: PickupItemSyncer

45: RequestVipsOnMasterFromSubordinate(?)

46: RestartHardcoreModeRound(?)

47: RestartMatch(?)

48: RpcDie(int killedPlayerID, int killerID, byte killerHealth, byte killerWeapon, bool headshot)

Class: PlayerScript

49: RPCElevatorButtonPressed(?)

50: RpcSendChatMessage(string msgUsername, string msg, short r, short g, sthor b)

Class: PlayerScript

Puts a message in chat in the format similar to {sender name}: <color=#rgb>{msg}</color>.

The msgUsername parameter seems to be completely ignored. Instead, the game uses the name from the sender's PlayerProperties.

If the sender's name is empty, the : section of the chat messages is also removed which allows the sender to place any message in any color in the chat. However, the sender's name can only be empty before the auth token is sent, which means the sender only has a brief window to do this before they are kicked.

The game will occasionally send out an ad through this RPC call: RpcSendChatMessage("[Bullet Force]", "Consider supporting the game by buying something in the shop!", 255i16, 255i16, 0i16). This message is sent by a player, likely the game's host.

51: RpcShoot(int actorID, float damage, Vector3 position, Vector3 direction, byte numberOfBullets, byte spread, double timeShot, int weaponType)

Class: PlayerScript

52: RpcShowHitmarker()

Class: PlayerScript

53: RpcShowPerkMessage(string msgUsername, string msg)

Example: RpcShowPerkMessage("PlayerName", " used Counter UAV")

Class: PlayerScript

54: SetElevatorsClosed(?)

55: SetMaps(?)

56: SetNextMap(?)

57: SetPing(short p)

Class: PlayerScript

58: SetRank(byte r)

Changes the player's rank in the player list.

Class: PlayerScript

59: SetSpawnPoint(Vector3 s, int spawnedPlayerActorNr)

Class: PlayerScript

60: SetTimeScale(float s)

Supposedly sets the time scale.

When executed as a fresh joined player, this either crashes the lobby or kicks the player (to be checked).

Class: PlayerScript

61: ShowAnnouncement(string text, float time)

Shows a red piece of text on-screen for all players. You do not need to be authenticated for this RPC call, but you need to have instantiated a PlayerBody.

Class: PlayerScript

62: ShowDebugCapsule(Vector3 pos)

Class: PlayerScript

63: SpawnFailed(?)

64: TaggedPlayer(?)

65: TeleportToPosition(Vector3 position)

Class: PlayerScript

66: UpdateAlivePlayers(int _team0Alive, int _team1Alive)

Class: MatchManager

67: UpdateHMFFARounds(int playerID, int roundsWon)

Class: PlayerScript

68: UpdateMPDeaths(int value)

Class: PlayerScript

69: UpdateMPKills(int value)

Class: PlayerScript

70: UpdateMPRounds(int value)

Class: PlayerScript

71: UpdateTeamNumber(byte value)

Class: ManualPhotonViewAllocator

72: UpdateTeamPoints(?)

73: UpdateTimeInMatch(?)

74: UpdateVIPsOnSubordinates(?)

75: UsernameChanged(string value)

Class: PlayerScript

76: WeaponCamoChanged(int value)

Class: PlayerScript

77: WeaponTypeChanged(byte value)

Class: PlayerScript

78: RpcACKill(?)

79: RpcForceKillstreak(KillstreakManager.Killstreak k, bool isOnTheSameTeam)

The first argument is most likely sent as an int, as that's the default type for enums in C#.

public enum Killstreak
{
	None = 0,
	UAV = 1,
	SuperSoldier = 2,
	CounterUAV = 3,
	AdvancedUAV = 4,
	Haste = 5,
	Nuke = 6,
}

Class: PlayerScript

80: RpcDownloadScriptable(?)

81: DecreaseCountDown()

Class: RPCDataSendingMasterClientToMaster

82: IncreaseNumber()

Class: RPCDataSendingMasterClientToMaster

83: SendNewCountDownToClients()

Class: RPCDataSendingMasterClientToMaster

84: SetKD(float kd)

Class: PlayerScript

85: RpcHitVerified(string shotID, bool verified, string info)

Class: PlayerScript

86: RpcVerifyHit(string shotID, int damagerID, int damagedPlayerID, int weaponTypeID, float bulletStartPosX, float bulletStartPosY, float bulletStartPosZ, float bulletHitPosX, float bulletHitPosY, float bulletHitPosZ)

Class: PlayerScript

87: RpcRespawned(Vector3 spawnPoint)

Class: PlayerScript

88: RpcSendMultiplayerAuthToken(string token)

This RPC method has to be called using the response string from API endpoint https://server.blayzegames.com/OnlineAccountSystem/get_multiplayer_auth_code.php.

If this method isn't called, the player gets kicked from the game. If this gets called with an invalid auth token such as for example an unknown token, a token from another player or when a newer token has generated, then the player also gets kicked from the game.

89: RpcRequestEnterVehicle(?)

Class: BFVehicle

90: RpcEnteredVehicle(?)

Class: BFVehicle

91: RpcGetKicked(string reason)

Tells a player they've been kicked. The client does not validate the sender of this packet.

Class: PlayerScript

92: RpcReportHack(int reportID, int hackerID, int hackType)

Class: PlayerScript

93: RpcPlayerHitPlayerHitmarker(int damagerID, int damagedPlayerID, byte weaponType, bool headshot)

Class: PlayerScript

94: AllPlayersInRoomExist(?)

Not found in source code.

95: CheckPlayers(?)

Not found in source code.

96: ReportPlayerHacking(?)

Not found in source code.

97: UpdatePlayerVector3(?)

98: SetKeysValues(?)

99: RpcDamageVehicle(?)

Class: BFVehicle

100: RpcVehicleDestroyed(?)

Class: BFVehicle

101: BFS_SetSpawnPointForPlayer(?)

102: BFS_GetBestSpawnPointForPlayer(?)

103: BFS_PlayerLeftRoom(?)

104: BFS_FireBullet(?)

105: BFS_DamagePlayer(?)

106: RpcSendReceiveCustomMapToServer(?)

Example: RpcSendReceiveCustomMapToServer("53779")

107: RpcCustomMapLikeDislike(?)