static void NotifyOtherPlayersOfDeath(ZRoutedRpc __instance, ZRoutedRpc.RoutedRPCData rpcData)
        {
            // Late bind to instance
            if (_getPeer == null)
            {
                _getPeer = (Func <long, ZNetPeer>)Delegate.CreateDelegate(typeof(Func <long, ZNetPeer>), __instance, _getPeerInfo);
            }

            if (ZNet.instance == null || !ZNet.instance.IsServer())
            {
                return;
            }
            if (rpcData.m_methodHash != _onDeathHash)
            {
                return;
            }

            ZNetPeer peer = _getPeer(rpcData.m_senderPeerID);

            if (peer == null)
            {
                return;
            }

            ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody,
                                                "ShowMessage",
                                                2, "Player " + peer.m_playerName + " has died.");
        }
Exemplo n.º 2
0
    // Token: 0x060008B3 RID: 2227 RVA: 0x000422E4 File Offset: 0x000404E4
    public void HandleRoutedRPC(ZRoutedRpc.RoutedRPCData rpcData)
    {
        RoutedMethodBase routedMethodBase;

        if (this.m_functions.TryGetValue(rpcData.m_methodHash, out routedMethodBase))
        {
            routedMethodBase.Invoke(rpcData.m_senderPeerID, rpcData.m_parameters);
            return;
        }
        ZLog.LogWarning("Failed to find rpc method " + rpcData.m_methodHash);
    }
Exemplo n.º 3
0
 // Token: 0x060008FD RID: 2301 RVA: 0x00043010 File Offset: 0x00041210
 private void RPC_RoutedRPC(ZRpc rpc, ZPackage pkg)
 {
     ZRoutedRpc.RoutedRPCData routedRPCData = new ZRoutedRpc.RoutedRPCData();
     routedRPCData.Deserialize(pkg);
     if (routedRPCData.m_targetPeerID == this.m_id || routedRPCData.m_targetPeerID == 0L)
     {
         this.HandleRoutedRPC(routedRPCData);
     }
     if (this.m_server && routedRPCData.m_targetPeerID != this.m_id)
     {
         this.RouteRPC(routedRPCData);
     }
 }
Exemplo n.º 4
0
    // Token: 0x060008FC RID: 2300 RVA: 0x00042ED8 File Offset: 0x000410D8
    private void RouteRPC(ZRoutedRpc.RoutedRPCData rpcData)
    {
        ZPackage zpackage = new ZPackage();

        rpcData.Serialize(zpackage);
        if (this.m_server)
        {
            if (rpcData.m_targetPeerID != 0L)
            {
                ZNetPeer peer = this.GetPeer(rpcData.m_targetPeerID);
                if (peer != null && peer.IsReady())
                {
                    peer.m_rpc.Invoke("RoutedRPC", new object[]
                    {
                        zpackage
                    });
                    return;
                }
                return;
            }
            else
            {
                using (List <ZNetPeer> .Enumerator enumerator = this.m_peers.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        ZNetPeer znetPeer = enumerator.Current;
                        if (rpcData.m_senderPeerID != znetPeer.m_uid && znetPeer.IsReady())
                        {
                            znetPeer.m_rpc.Invoke("RoutedRPC", new object[]
                            {
                                zpackage
                            });
                        }
                    }
                    return;
                }
            }
        }
        foreach (ZNetPeer znetPeer2 in this.m_peers)
        {
            if (znetPeer2.IsReady())
            {
                znetPeer2.m_rpc.Invoke("RoutedRPC", new object[]
                {
                    zpackage
                });
            }
        }
    }
Exemplo n.º 5
0
    // Token: 0x060008FB RID: 2299 RVA: 0x00042E44 File Offset: 0x00041044
    public void InvokeRoutedRPC(long targetPeerID, ZDOID targetZDO, string methodName, params object[] parameters)
    {
        ZRoutedRpc.RoutedRPCData routedRPCData  = new ZRoutedRpc.RoutedRPCData();
        ZRoutedRpc.RoutedRPCData routedRPCData2 = routedRPCData;
        long id       = this.m_id;
        int  rpcMsgID = this.m_rpcMsgID;

        this.m_rpcMsgID              = rpcMsgID + 1;
        routedRPCData2.m_msgID       = id + (long)rpcMsgID;
        routedRPCData.m_senderPeerID = this.m_id;
        routedRPCData.m_targetPeerID = targetPeerID;
        routedRPCData.m_targetZDO    = targetZDO;
        routedRPCData.m_methodHash   = methodName.GetStableHashCode();
        ZRpc.Serialize(parameters, ref routedRPCData.m_parameters);
        routedRPCData.m_parameters.SetPos(0);
        if (targetPeerID == this.m_id || targetPeerID == 0L)
        {
            this.HandleRoutedRPC(routedRPCData);
        }
        if (targetPeerID != this.m_id)
        {
            this.RouteRPC(routedRPCData);
        }
    }
Exemplo n.º 6
0
 // Token: 0x060008FE RID: 2302 RVA: 0x00043064 File Offset: 0x00041264
 private void HandleRoutedRPC(ZRoutedRpc.RoutedRPCData data)
 {
     if (data.m_targetZDO.IsNone())
     {
         RoutedMethodBase routedMethodBase;
         if (this.m_functions.TryGetValue(data.m_methodHash, out routedMethodBase))
         {
             routedMethodBase.Invoke(data.m_senderPeerID, data.m_parameters);
             return;
         }
     }
     else
     {
         ZDO zdo = ZDOMan.instance.GetZDO(data.m_targetZDO);
         if (zdo != null)
         {
             ZNetView znetView = ZNetScene.instance.FindInstance(zdo);
             if (znetView != null)
             {
                 znetView.HandleRoutedRPC(data);
             }
         }
     }
 }
Exemplo n.º 7
0
 public static bool Prefix(ref ZRoutedRpc __instance, ref ZRoutedRpc.RoutedRPCData rpcData)
 {
     if (VPlusChatFilter.isEnabled.Value)
     {
         if (rpcData.m_methodHash == "ChatMessage".GetStableHashCode())
         {
             ZPackage payload = rpcData.m_parameters;
             VPlusChatFilter.chatFilterLogger.LogDebug("ChatMessage Sent");
             payload.SetPos(0);
             VPlusChatFilter.chatFilterLogger.LogDebug("Size of package is " + payload.Size());
             VPlusChatFilter.chatFilterLogger.LogDebug("Read byte test : " + payload.ReadInt());
             payload.SetPos(0);
             Vector3 headPoint = payload.ReadVector3();
             VPlusChatFilter.chatFilterLogger.LogDebug("Read head : " + headPoint.ToString());
             int messageType = payload.ReadInt();
             VPlusChatFilter.chatFilterLogger.LogDebug("Read type : " + messageType);
             string playerName = payload.ReadString();
             VPlusChatFilter.chatFilterLogger.LogDebug("Read name : " + playerName);
             string message = payload.ReadString();
             VPlusChatFilter.chatFilterLogger.LogDebug("Read message : " + message);
             var profanities = FamilyFriendlyfier.filter.DetectAllProfanities(message, true);
             if (profanities.Count > 0)
             {
                 foreach (string bannable in profanities)
                 {
                     VPlusChatFilter.chatFilterLogger.LogInfo("Bad word from " + playerName + " : " + bannable);
                 }
                 message = FamilyFriendlyfier.filter.CensorString(message, VPlusChatFilter.replaceKey.Value[0]);
             }
             VPlusChatFilter.chatFilterLogger.LogDebug("New message : " + message);
             ZPackage newpayload = new ZPackage();
             ZRpc.Serialize(new object[] { headPoint, messageType, playerName, message }, ref newpayload);
             rpcData.m_parameters = newpayload;
         }
         else if (rpcData.m_methodHash == "Say".GetStableHashCode())
         {
             ZPackage payload = rpcData.m_parameters;
             VPlusChatFilter.chatFilterLogger.LogDebug("Say Sent");
             payload.SetPos(0);
             VPlusChatFilter.chatFilterLogger.LogDebug("Size of package is " + payload.Size());
             VPlusChatFilter.chatFilterLogger.LogDebug("Read byte test : " + payload.ReadInt());
             payload.SetPos(0);
             int messageType = payload.ReadInt();
             VPlusChatFilter.chatFilterLogger.LogDebug("Read type : " + messageType);
             string playerName = payload.ReadString();
             VPlusChatFilter.chatFilterLogger.LogDebug("Read name : " + playerName);
             string message = payload.ReadString();
             VPlusChatFilter.chatFilterLogger.LogDebug("Read message : " + message);
             var profanities = FamilyFriendlyfier.filter.DetectAllProfanities(message, true);
             if (profanities.Count > 0)
             {
                 foreach (string bannable in profanities)
                 {
                     VPlusChatFilter.chatFilterLogger.LogInfo("Bad word from " + playerName + " : " + bannable);
                 }
                 message = FamilyFriendlyfier.filter.CensorString(message, VPlusChatFilter.replaceKey.Value[0]);
             }
             VPlusChatFilter.chatFilterLogger.LogDebug("New message : " + message);
             ZPackage newpayload = new ZPackage();
             ZRpc.Serialize(new object[] { messageType, playerName, message }, ref newpayload);
             rpcData.m_parameters = newpayload;
         }
         ZPackage zpackage = new ZPackage();
         rpcData.Serialize(zpackage);
         if (__instance.m_server)
         {
             if (rpcData.m_targetPeerID != 0L)
             {
                 ZNetPeer peer = __instance.GetPeer(rpcData.m_targetPeerID);
                 if (peer != null && peer.IsReady())
                 {
                     peer.m_rpc.Invoke("RoutedRPC", new object[] { zpackage });
                     return(false);
                 }
                 return(false);
             }
             else
             {
                 using (List <ZNetPeer> .Enumerator enumerator = __instance.m_peers.GetEnumerator())
                 {
                     while (enumerator.MoveNext())
                     {
                         ZNetPeer znetPeer = enumerator.Current;
                         if (rpcData.m_senderPeerID != znetPeer.m_uid && znetPeer.IsReady())
                         {
                             znetPeer.m_rpc.Invoke("RoutedRPC", new object[] { zpackage });
                         }
                     }
                     return(false);
                 }
             }
         }
         foreach (ZNetPeer znetPeer2 in __instance.m_peers)
         {
             if (znetPeer2.IsReady())
             {
                 znetPeer2.m_rpc.Invoke("RoutedRPC", new object[] { zpackage });
             }
         }
     }
     return(true);
 }