Esempio n. 1
0
 // Token: 0x06000DBC RID: 3516 RVA: 0x00062418 File Offset: 0x00060618
 public void Deserialize(ref ZPackage pkg)
 {
     this.m_damage.m_damage    = pkg.ReadSingle();
     this.m_damage.m_blunt     = pkg.ReadSingle();
     this.m_damage.m_slash     = pkg.ReadSingle();
     this.m_damage.m_pierce    = pkg.ReadSingle();
     this.m_damage.m_chop      = pkg.ReadSingle();
     this.m_damage.m_pickaxe   = pkg.ReadSingle();
     this.m_damage.m_fire      = pkg.ReadSingle();
     this.m_damage.m_frost     = pkg.ReadSingle();
     this.m_damage.m_lightning = pkg.ReadSingle();
     this.m_damage.m_poison    = pkg.ReadSingle();
     this.m_damage.m_spirit    = pkg.ReadSingle();
     this.m_toolTier           = pkg.ReadInt();
     this.m_pushForce          = pkg.ReadSingle();
     this.m_backstabBonus      = pkg.ReadSingle();
     this.m_staggerMultiplier  = pkg.ReadSingle();
     this.m_dodgeable          = pkg.ReadBool();
     this.m_blockable          = pkg.ReadBool();
     this.m_point        = pkg.ReadVector3();
     this.m_dir          = pkg.ReadVector3();
     this.m_statusEffect = pkg.ReadString();
     this.m_attacker     = pkg.ReadZDOID();
     this.m_skill        = (Skills.SkillType)pkg.ReadInt();
 }
Esempio n. 2
0
        private void extractAndUpdate(ZPackage pkg, ref GameObject obj, ref Vector3 tempRelPos, bool hasTempRelPos)
        {
            // Extract package data
            var position = pkg.ReadVector3();
            var rotation = pkg.ReadQuaternion();
            var velocity = pkg.ReadVector3();

            // Update position based on last written position, velocity, and elapsed time since last data revision
            position += velocity * deltaTimeCounter;

            if (!hasTempRelPos)
            {
                tempRelPos = position;
            }

            if (Vector3.Distance(tempRelPos, position) > MIN_CHANGE)
            {
                tempRelPos = Vector3.Lerp(tempRelPos, position, 0.2f);
                position   = tempRelPos;
            }

            // Update the object position with new calculated position
            updatePosition(obj, position);

            // Update the rotation
            updateRotation(obj, rotation);
        }
Esempio n. 3
0
        /// <summary>
        ///     Create a <see cref="Portal" /> list from a <see cref="ZPackage" />
        /// </summary>
        /// <param name="zpkg"></param>
        /// <returns></returns>
        public static PortalList FromZPackage(ZPackage zpkg)
        {
            Logger.LogDebug("Deserializing portal list from ZPackage");

            var ret = new PortalList();

            var numConnectedPortals = zpkg.ReadInt();

            while (numConnectedPortals > 0)
            {
                var portalPosition = zpkg.ReadVector3();
                var portalName     = zpkg.ReadString();

                Logger.LogDebug($"{portalName}@{portalPosition}");
                ret.Add(new Portal(portalPosition, portalName, true));

                numConnectedPortals--;
            }

            var numUnconnectedPortals = zpkg.ReadInt();

            while (numUnconnectedPortals > 0)
            {
                var portalPosition = zpkg.ReadVector3();
                var portalName     = zpkg.ReadString();

                Logger.LogDebug($"{portalName}@{portalPosition}");
                ret.Add(new Portal(portalPosition, portalName, false));

                numUnconnectedPortals--;
            }

            return(ret);
        }
        public static WorldPlayer Load(ZPackage pkg)
        {
            var worldPlayer = new WorldPlayer();

            int num = pkg.ReadInt();

            if (!ValheimVersion.IsPlayerVersionCompatible(num))
            {
                return(null);
            }
            if (num >= 28)
            {
                worldPlayer.PlayerStats_kills  = pkg.ReadInt();
                worldPlayer.PlayerStats_deaths = pkg.ReadInt();
                worldPlayer.PlayerStats_crafts = pkg.ReadInt();
                worldPlayer.PlayerStats_builds = pkg.ReadInt();
            }
            worldPlayer.WorldPlayerData.Clear();
            int num2 = pkg.ReadInt();

            for (int i = 0; i < num2; i++)
            {
                long key             = pkg.ReadLong();
                var  worldPlayerData = new WorldPlayerData();
                worldPlayerData.m_haveCustomSpawnPoint = pkg.ReadBool();
                worldPlayerData.m_spawnPoint           = pkg.ReadVector3();
                worldPlayerData.m_haveLogoutPoint      = pkg.ReadBool();
                worldPlayerData.m_logoutPoint          = pkg.ReadVector3();
                if (num >= 30)
                {
                    worldPlayerData.m_haveDeathPoint = pkg.ReadBool();
                    worldPlayerData.m_deathPoint     = pkg.ReadVector3();
                }
                worldPlayerData.m_homePoint = pkg.ReadVector3();
                if (num >= 29 && pkg.ReadBool())
                {
                    worldPlayerData.m_mapData = pkg.ReadByteArray();
                }
                worldPlayer.WorldPlayerData.Add(key, worldPlayerData);
            }
            worldPlayer.PlayerName = pkg.ReadString();
            worldPlayer.PlayerId   = pkg.ReadLong();
            worldPlayer.StartSeed  = pkg.ReadString();
            if (pkg.ReadBool())
            {
                var byteArray = pkg.ReadByteArray();

                var playerPkg = new ZPackage(byteArray);

                worldPlayer.Player = PlayerReaderWriter.Load(playerPkg);
            }
            else
            {
                worldPlayer.Player = null;
            }
            return(worldPlayer);
        }
Esempio n. 5
0
 private bool LoadPlayerFromDisk()
 {
     try
     {
         ZPackage zpackage = this.LoadPlayerDataFromDisk();
         if (zpackage == null)
         {
             ZLog.LogWarning((object)"No player data");
             return(false);
         }
         int version = zpackage.ReadInt();
         if (!Version.IsPlayerVersionCompatible(version))
         {
             ZLog.Log((object)"Player data is not compatible, ignoring");
             return(false);
         }
         if (version >= 28)
         {
             this.m_playerStats.m_kills  = zpackage.ReadInt();
             this.m_playerStats.m_deaths = zpackage.ReadInt();
             this.m_playerStats.m_crafts = zpackage.ReadInt();
             this.m_playerStats.m_builds = zpackage.ReadInt();
         }
         this.m_worldData.Clear();
         int num = zpackage.ReadInt();
         for (int index = 0; index < num; ++index)
         {
             long key = zpackage.ReadLong();
             PlayerProfile.WorldPlayerData worldPlayerData = new PlayerProfile.WorldPlayerData();
             worldPlayerData.m_haveCustomSpawnPoint = zpackage.ReadBool();
             worldPlayerData.m_spawnPoint           = zpackage.ReadVector3();
             worldPlayerData.m_haveLogoutPoint      = zpackage.ReadBool();
             worldPlayerData.m_logoutPoint          = zpackage.ReadVector3();
             if (version >= 30)
             {
                 worldPlayerData.m_haveDeathPoint = zpackage.ReadBool();
                 worldPlayerData.m_deathPoint     = zpackage.ReadVector3();
             }
             worldPlayerData.m_homePoint = zpackage.ReadVector3();
             if (version >= 29 && zpackage.ReadBool())
             {
                 worldPlayerData.m_mapData = zpackage.ReadByteArray();
             }
             this.m_worldData.Add(key, worldPlayerData);
         }
         this.m_playerName = zpackage.ReadString();
         this.m_playerID   = zpackage.ReadLong();
         this.m_startSeed  = zpackage.ReadString();
         this.m_playerData = !zpackage.ReadBool() ? (byte[])null : zpackage.ReadByteArray();
     }
     catch (Exception ex)
     {
         ZLog.LogWarning((object)("Exception while loading player profile:" + this.m_filename + " , " + ex.ToString()));
     }
     return(true);
 }
Esempio n. 6
0
        /// <summary>
        /// Sync Pin with clients via the server
        /// </summary>
        public static void RPC_VPlusMapPinSync(long sender, ZPackage mapPinPkg)
        {
            if (ZNet.m_isServer) //Server
            {
                if (sender == ZRoutedRpc.instance.GetServerPeerID())
                {
                    return;
                }

                if (mapPinPkg == null)
                {
                    return;
                }

                foreach (ZNetPeer peer in ZRoutedRpc.instance.m_peers)
                {
                    if (peer.m_uid != sender)
                    {
                        ZRoutedRpc.instance.InvokeRoutedRPC(peer.m_uid, "VPlusMapPinSync", new object[] { mapPinPkg });
                    }
                }

                ZLog.Log($"Sent map pin to all clients");
                //VPlusAck.SendAck(sender);
            }
            else //Client
            {
                if (sender != ZRoutedRpc.instance.GetServerPeerID())
                {
                    return;                                                  //Only bother if it's from the server.
                }
                if (mapPinPkg == null)
                {
                    ZLog.LogWarning("Warning: Got empty map pin package from server.");
                    return;
                }
                long   pinSender  = mapPinPkg.ReadLong();
                string senderName = mapPinPkg.ReadString();
                if (senderName != Player.m_localPlayer.GetPlayerName() && pinSender != ZRoutedRpc.instance.m_id)
                {
                    ZLog.Log("Checking sent pin");
                    Vector3 pinPos    = mapPinPkg.ReadVector3();
                    int     pinType   = mapPinPkg.ReadInt();
                    string  pinName   = mapPinPkg.ReadString();
                    bool    keepQuiet = mapPinPkg.ReadBool();
                    if (!Minimap.instance.HaveSimilarPin(pinPos, (Minimap.PinType)pinType, pinName, true))
                    {
                        Minimap.PinData addedPin = Minimap.instance.AddPin(pinPos, (Minimap.PinType)pinType, pinName, true, false);
                        if (!keepQuiet)
                        {
                            MessageHud.instance.ShowMessage(MessageHud.MessageType.Center, $"Received map pin {pinName} from {senderName}!",
                                                            0, Minimap.instance.GetSprite((Minimap.PinType)pinType));
                        }
                        ZLog.Log($"I got pin named {pinName} from {senderName}!");
                    }
                }
                //Send Ack
                //VPlusAck.SendAck(sender);
            }
        }
Esempio n. 7
0
        public static void SetMapData(ZPackage mapData)
        {
            ServerPins.Clear();

            var version = mapData.ReadInt();
            var mapSize = mapData.ReadInt();

            var explored = new bool[mapSize * mapSize];

            for (var i = 0; i < mapSize * mapSize; i++)
            {
                explored[i] = mapData.ReadBool();
            }

            var pinCount = mapData.ReadInt();

            for (var i = 0; i < pinCount; i++)
            {
                var pin = new PinData
                {
                    Name    = mapData.ReadString(),
                    Pos     = mapData.ReadVector3(),
                    Type    = (Minimap.PinType)mapData.ReadInt(),
                    Checked = mapData.ReadBool()
                };
                ServerPins.Add(pin);
            }

            Explored = explored;
        }
Esempio n. 8
0
    // Token: 0x060004DD RID: 1245 RVA: 0x00028508 File Offset: 0x00026708
    private void RPC_DamageText(long sender, ZPackage pkg)
    {
        Camera mainCamera = Utils.GetMainCamera();

        if (!mainCamera)
        {
            return;
        }
        if (Hud.IsUserHidden())
        {
            return;
        }
        DamageText.TextType type   = (DamageText.TextType)pkg.ReadInt();
        Vector3             vector = pkg.ReadVector3();
        float dmg  = pkg.ReadSingle();
        bool  flag = pkg.ReadBool();
        float num  = Vector3.Distance(mainCamera.transform.position, vector);

        if (num > this.m_maxTextDistance)
        {
            return;
        }
        bool mySelf = flag && sender == ZNet.instance.GetUID();

        this.AddInworldText(type, vector, num, dmg, mySelf);
    }
Esempio n. 9
0
        public static PinData UnpackPin(ZPackage z)
        {
            var pin = new PinData
            {
                Name    = z.ReadString(),
                Pos     = z.ReadVector3(),
                Type    = (Minimap.PinType)z.ReadInt(),
                Checked = z.ReadBool()
            };

            return(pin);
        }
        public static void Deserialize(this PlayerProfile profile, ZPackage data)
        {
            Debug.Assert(data.ReadInt() <= Version.m_playerVersion);
            profile.m_playerStats.m_kills  = data.ReadInt();
            profile.m_playerStats.m_deaths = data.ReadInt();
            profile.m_playerStats.m_crafts = data.ReadInt();
            profile.m_playerStats.m_builds = data.ReadInt();
            profile.m_worldData.Clear();
            int num = data.ReadInt();

            for (int i = 0; i < num; i++)
            {
                long key = data.ReadLong();
                PlayerProfile.WorldPlayerData worldPlayerData = (PlayerProfile.WorldPlayerData)Activator.CreateInstance(typeof(PlayerProfile.WorldPlayerData), true);
                worldPlayerData.m_haveCustomSpawnPoint = data.ReadBool();
                worldPlayerData.m_spawnPoint           = data.ReadVector3();
                worldPlayerData.m_haveLogoutPoint      = data.ReadBool();
                worldPlayerData.m_logoutPoint          = data.ReadVector3();
                worldPlayerData.m_haveDeathPoint       = data.ReadBool();
                worldPlayerData.m_deathPoint           = data.ReadVector3();
                worldPlayerData.m_homePoint            = data.ReadVector3();
                if (data.ReadBool())
                {
                    worldPlayerData.m_mapData = data.ReadByteArray();
                }
                profile.m_worldData.Add(key, worldPlayerData);
            }
            profile.m_playerName = data.ReadString();
            profile.m_playerID   = data.ReadLong();
            if (profile.m_playerID == 0L)
            {
                profile.m_playerID = Utils.GenerateUID();
            }
            profile.m_startSeed = data.ReadString();
            if (data.ReadBool())
            {
                profile.m_playerData = data.ReadByteArray();
            }
        }
Esempio n. 11
0
        public bool CreateMergedWorldWithPins(out string error)
        {
            try
            {
                error = string.Empty;
                foreach (var pp in _profiles)
                {
                    ZPackage zPackage = new ZPackage(pp.m_worldData[_worldId].m_mapData);
                    _mapData.m_mapVersion = zPackage.ReadInt();
                    int textureSize = zPackage.ReadInt();

                    if (_mapData.m_textureSize != textureSize)
                    {
                        return(false);
                    }

                    for (int i = 0; i < (_mapData.m_textureSize * _mapData.m_textureSize); i++)
                    {
                        _mapData.m_mergedWorld[i] = (byte)(_mapData.m_mergedWorld[i] | Convert.ToByte(zPackage.ReadBool()));
                    }

                    if (_mapData.m_mapVersion >= 2)
                    {
                        int pinCount = zPackage.ReadInt();
                        for (int j = 0; j < pinCount; j++)
                        {
                            string  name      = zPackage.ReadString();
                            Vector3 pos       = zPackage.ReadVector3();
                            PinType type      = (PinType)zPackage.ReadInt();
                            bool    isChecked = _mapData.m_mapVersion >= 3 && zPackage.ReadBool();

                            _mapData.AddPin(name, pos, type, isChecked);
                            _mapData.AddProfilePin(pp.GetPlayerId(), name, pos, type, isChecked);
                        }
                    }
                    if (_mapData.m_mapVersion >= 4)
                    {
                        _mapData.m_isReferencePositionPublic = zPackage.ReadBool();
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                error = ex.Message;
                return(false);
            }
        }
Esempio n. 12
0
        public static List <PinData> UnpackPins(ZPackage z)
        {
            var pins = new List <PinData>();

            var pinCount = z.ReadInt();

            for (var i = 0; i < pinCount; i++)
            {
                var pin = new PinData
                {
                    Name    = z.ReadString(),
                    Pos     = z.ReadVector3(),
                    Type    = (Minimap.PinType)z.ReadInt(),
                    Checked = z.ReadBool()
                };
                pins.Add(pin);
            }

            return(pins);
        }
Esempio n. 13
0
    public void Deserialize(ZPackage pkg)
    {
        this.m_persistent  = pkg.ReadBool();
        this.m_distant     = pkg.ReadBool();
        this.m_timeCreated = pkg.ReadLong();
        this.m_pgwVersion  = pkg.ReadInt();
        this.m_type        = (ZDO.ObjectType)pkg.ReadSByte();
        this.m_prefab      = pkg.ReadInt();
        this.m_rotation    = pkg.ReadQuaternion();
        int num1 = pkg.ReadInt();

        if ((num1 & 1) != 0)
        {
            this.InitFloats();
            int num2 = (int)pkg.ReadByte();
            for (int index = 0; index < num2; ++index)
            {
                this.m_floats[pkg.ReadInt()] = pkg.ReadSingle();
            }
        }
        else
        {
            this.ReleaseFloats();
        }
        if ((num1 & 2) != 0)
        {
            this.InitVec3();
            int num2 = (int)pkg.ReadByte();
            for (int index = 0; index < num2; ++index)
            {
                this.m_vec3[pkg.ReadInt()] = pkg.ReadVector3();
            }
        }
        else
        {
            this.ReleaseVec3();
        }
        if ((num1 & 4) != 0)
        {
            this.InitQuats();
            int num2 = (int)pkg.ReadByte();
            for (int index = 0; index < num2; ++index)
            {
                this.m_quats[pkg.ReadInt()] = pkg.ReadQuaternion();
            }
        }
        else
        {
            this.ReleaseQuats();
        }
        if ((num1 & 8) != 0)
        {
            this.InitInts();
            int num2 = (int)pkg.ReadByte();
            for (int index = 0; index < num2; ++index)
            {
                this.m_ints[pkg.ReadInt()] = pkg.ReadInt();
            }
        }
        else
        {
            this.ReleaseInts();
        }
        if ((num1 & 64) != 0)
        {
            this.InitLongs();
            int num2 = (int)pkg.ReadByte();
            for (int index = 0; index < num2; ++index)
            {
                this.m_longs[pkg.ReadInt()] = pkg.ReadLong();
            }
        }
        else
        {
            this.ReleaseLongs();
        }
        if ((num1 & 16) != 0)
        {
            this.InitStrings();
            int num2 = (int)pkg.ReadByte();
            for (int index = 0; index < num2; ++index)
            {
                this.m_strings[pkg.ReadInt()] = pkg.ReadString();
            }
        }
        else
        {
            this.ReleaseStrings();
        }
    }
Esempio n. 14
0
            static void Prefix(RoutedRPCData data)
            {
                var targetName = "";
                ZDO targetZDO;

                if (!data.m_targetZDO.IsNone())
                {
                    try
                    {
                        targetZDO  = ZDOMan.instance.GetZDO(data.m_targetZDO);
                        targetName = targetZDO.m_type.ToString();
                    }
                    catch { }
                }


                ZNetPeer peer    = ZNet.instance.GetPeer(data.m_senderPeerID);
                var      steamid = "";

                try {
                    steamid = peer.m_rpc.GetSocket().GetHostName();
                } catch {}

                if (data?.m_methodHash == "Say".GetStableHashCode())
                {
                    // private void RPC_Say(long sender, int ctype, string user, string text)

                    try
                    {
                        var      zdoData     = ZDOMan.instance.GetZDO(peer.m_characterID);
                        var      pos         = zdoData.GetPosition();
                        ZPackage package     = new ZPackage(data.m_parameters.GetArray());
                        int      messageType = package.ReadInt();
                        string   userName    = package.ReadString();
                        string   message     = package.ReadString();
                        message = (message == null ? "" : message).Trim();

                        if (message.StartsWith("/pin"))
                        {
                            var messageParts = message.Split(' ');
                            var pinType      = "dot";
                            var startIdx     = 1;
                            if (messageParts.Length > 1 && ALLOWED_PINS.Contains(messageParts[1]))
                            {
                                pinType  = messageParts[1];
                                startIdx = 2;
                            }
                            var pinText = "";
                            if (startIdx < messageParts.Length)
                            {
                                pinText = String.Join(" ", messageParts, startIdx, messageParts.Length - startIdx);
                            }
                            if (pinText.Length > 40)
                            {
                                pinText = pinText.Substring(0, 40);
                            }
                            var safePinsText = Regex.Replace(pinText, @"[^a-zA-Z0-9 ]", "");
                            var uuId         = Guid.NewGuid();
                            var pinId        = uuId.ToString();
                            mapDataServer.AddPin(steamid, pinId, pinType, userName, pos, safePinsText);

                            var usersPins = mapDataServer.pins.FindAll(pin => pin.StartsWith(steamid));

                            var numOverflowPins = usersPins.Count - WebMapConfig.MAX_PINS_PER_USER;
                            for (var t = numOverflowPins; t > 0; t--)
                            {
                                var pinIdx = mapDataServer.pins.FindIndex(pin => pin.StartsWith(steamid));
                                // mapDataServer.RemovePin(pinIdx);
                                harmonyLog.LogInfo($"To many pins, deleting oldest one (ONLY DEBUG; WILL NOT DO)");
                            }

                            SavePins();
                        }
                        else if (message.StartsWith("/undoPin"))
                        {
                            var pinIdx = mapDataServer.pins.FindLastIndex(pin => pin.StartsWith(steamid));
                            if (pinIdx > -1)
                            {
                                mapDataServer.RemovePin(pinIdx);
                                SavePins();
                            }
                        }
                        else if (message.StartsWith("/deletePin"))
                        {
                            var messageParts = message.Split(' ');
                            var pinText      = "";
                            if (messageParts.Length > 1)
                            {
                                pinText = String.Join(" ", messageParts, 1, messageParts.Length - 1);
                            }

                            var pinIdx = mapDataServer.pins.FindLastIndex(pin => {
                                var pinParts = pin.Split(',');
                                return(pinParts[0] == steamid && pinParts[pinParts.Length - 1] == pinText);
                            });

                            if (pinIdx > -1)
                            {
                                mapDataServer.RemovePin(pinIdx);
                                SavePins();
                            }
                        }
                        else if (!message.StartsWith("/"))
                        {
                            mapDataServer.Broadcast($"say\n{messageType}\n{userName}\n{message}");
                            harmonyLog.LogInfo($"say\n{messageType}\n{userName}\n{message} / target={targetName}");
                        }
                    }
                    catch
                    {
                        harmonyLog.LogError($"Say() exception");
                    }
                }
                else if (data?.m_methodHash == "ChatMessage".GetStableHashCode())
                {
                    // private void RPC_ChatMessage(long sender, Vector3 position, int type, string name, string text)
                    try
                    {
                        ZPackage package     = new ZPackage(data.m_parameters.GetArray());
                        Vector3  pos         = package.ReadVector3();
                        int      messageType = package.ReadInt();
                        string   userName    = package.ReadString();
                        string   message     = package.ReadString();
                        message = (message == null ? "" : message).Trim();

                        if (messageType == (int)Talker.Type.Ping)
                        {
                            mapDataServer.BroadcastPing(data.m_senderPeerID, userName, pos);
                        }
                        else
                        {
                            mapDataServer.Broadcast($"chat\n{messageType}\n{userName}\n{pos}\n{message}");
                            harmonyLog.LogInfo($"ChatMessage() chat\n{messageType}\n{userName}\n{pos}\n{message} / target={targetName}");
                        }
                    }
                    catch
                    {
                        harmonyLog.LogError($"ChatMessage() exception");
                    }
                }
                else if (data?.m_methodHash == "OnDeath".GetStableHashCode())
                {
                    // private void RPC_OnDeath(long sender)
                    try
                    {
                        var      zdoData = ZDOMan.instance.GetZDO(peer.m_characterID);
                        var      pos     = zdoData.GetPosition();
                        ZPackage package = new ZPackage(data.m_parameters.GetArray());

                        mapDataServer.Broadcast($"ondeath\n{peer.m_playerName}");
                        harmonyLog.LogInfo($"RPC_OnDeath() -- {peer.m_playerName} / target={targetName}");
                    }
                    catch
                    {
                        harmonyLog.LogError($"RPC_OnDeath() exception");
                    }
                }
                else if (data?.m_methodHash == "Message".GetStableHashCode())
                {
                    // private void RPC_Message(long sender, int type, string msg, int amount)
                    try
                    {
                        var      zdoData = ZDOMan.instance.GetZDO(peer.m_characterID);
                        var      pos     = zdoData.GetPosition();
                        ZPackage package = new ZPackage(data.m_parameters.GetArray());

                        int    messageType = package.ReadInt();
                        string msg         = package.ReadString();
                        int    amount      = package.ReadInt();

                        mapDataServer.Broadcast($"message\n{peer.m_playerName}\n{messageType}\n{msg}\n{amount}");
                        harmonyLog.LogInfo($"RPC_Message() -- {peer.m_playerName} / {msg} - {amount} / target={targetName}");
                    }
                    catch
                    {
                        harmonyLog.LogError($"RPC_Message() exception");
                    }
                }

                else if (data?.m_methodHash == "DamageText".GetStableHashCode())
                {
                    try
                    {
                        var      zdoData = ZDOMan.instance.GetZDO(peer.m_characterID);
                        var      pos     = zdoData.GetPosition();
                        ZPackage package = new ZPackage(data.m_parameters.GetArray());

                        //float v = package.Read();
                        //bool alerted = package.ReadBool();
                        var pkg = package.ReadPackage();

                        DamageText.TextType type   = (DamageText.TextType)pkg.ReadInt();
                        Vector3             vector = pkg.ReadVector3();
                        float dmg  = pkg.ReadSingle();
                        bool  flag = pkg.ReadBool();

                        harmonyLog.LogInfo($"RPC_DamageText() -- {peer.m_playerName} / type={type} / pos={vector} / dmg={dmg} / flag={flag} / target={targetName}");
                    }
                    catch
                    {
                        harmonyLog.LogError($"RPC_DamageText() exception");
                    }
                }
                else if (data?.m_methodHash == "Damage".GetStableHashCode())
                {
                    try
                    {
                        var      zdoData = ZDOMan.instance.GetZDO(peer.m_characterID);
                        var      pos     = zdoData.GetPosition();
                        ZPackage package = new ZPackage(data.m_parameters.GetArray());

                        harmonyLog.LogInfo($"RPC_Damage() -- {peer.m_playerName} / target={targetName}");
                    }
                    catch
                    {
                        harmonyLog.LogError($"RPC_Damage() exception");
                    }
                }
                else if (data?.m_methodHash == "DestroyZDO".GetStableHashCode())
                {
                    try
                    {
                        // supress
                        //ZPackage pkg = new ZPackage(data.m_parameters.GetArray());
                        //var pkg2 = pkg.ReadPackage();
                        //var numberofitems = pkg2.ReadInt();
                        //for (int i = 0; i < numberofitems; i++)
                        //{
                        //    ZDOID uid = pkg.ReadZDOID();

                        //}
                        //harmonyLog.LogInfo($"DestroyZDO() -- {peer.m_playerName} / numberofitems={numberofitems} / target={targetName}");
                    }
                    catch (Exception e)
                    {
                        harmonyLog.LogError($"DestroyZDO() exception " + e);
                    }
                }
                else if (data?.m_methodHash == "SetEvent".GetStableHashCode())
                {
                    try
                    {
                        //   var zdoData = ZDOMan.instance.GetZDO(peer.m_characterID);
                        //   var pos = zdoData.GetPosition();

                        ZPackage pkg = new ZPackage(data.m_parameters.GetArray());

                        var eventName = pkg.ReadString();
                        var time      = pkg.ReadSingle();
                        var eventPos  = pkg.ReadVector3();


                        if (!eventName.IsNullOrEmpty())
                        {
                            harmonyLog.LogInfo($"SetEvent() -- eventName={eventName} / time={time} / eventPos={eventPos} / target={targetName}");
                        }
                    }
                    catch (Exception e)
                    {
                        harmonyLog.LogError($"SetEvent() exception " + e);
                    }
                }
                else
                {
                    // Debug


                    //var methods = new List<string>() { "Jump", "OnJump", "SetMoveDir", "AddDPS", "AddFire", "BlockAttack", "UseStamina", "OnTargeted", "SetHealth", "SetCrouch",
                    //    "SetLookDir","SetRun", "Stagger", "Grow", "Shake", "CreateFragments", "RemotePrint","Pickup","Move","Die","Destroy","Awake","Loot","AddOre","EmptyProcessed",
                    //    "Interact","Hit","Create","Start","UseItem","UpdateTeleport","UseDoor","DropItem","AddNoise","Alert","Pick","Forward","Stop","OnHit","AddStatusEffect",
                    //    "Heal","AddFuel","OnNearProjectileHit","SleepStop","SleepStart","Ping", "Pong","DiscoverLocationRespons", "DiscoverClosestLocation",
                    //    "DestroyZDO","RequestZDO","SpawnObject","SetGlobalKey","GlobalKeys","LocationIcons","SetOwner","Extract","ResetCloth","SetTamed","RequestOpen","OpenRespons",
                    //    "RequestTakeAll", "TakeAllRespons","RequestOpen","SetSlotVisual","RemoveDoneItem","AddItem","Tap","Pickup","RequestPickup","Nibble","Step","SetPicked",
                    //    "ApplyOperation"


                    //};
                    //bool found = false;
                    //foreach (string method in methods)
                    //{
                    //    if (data?.m_methodHash == method.GetStableHashCode())
                    //    {
                    //        found = true;
                    //        harmonyLog.LogInfo($" -> DEBUG: {method}() ");
                    //    }

                    //}

                    //if (!found)
                    //{
                    //    // Unknown RPC message
                    //    harmonyLog.LogInfo($"<unknown rpc message> hash={data.m_methodHash}");
                    //}
                }
            }
Esempio n. 15
0
        public bool LoadPlayerFromDisk(out string error)
        {
            error = string.Empty;
            ZPackage zPackage = LoadPlayerDataFromDisk();
            //backup
            DirectoryInfo dir = Directory.CreateDirectory("backup");

            File.WriteAllBytes($"{dir.FullName}/{m_filename}", zPackage.GetArray());

            if (zPackage == null)
            {
                error = "No player data";
                return(false);
            }

            m_version = zPackage.ReadInt();
            if (!VersionInfo.IsPlayerVersionCompatible(m_version))
            {
                error = "Player data is not compatible, ignoring";
                return(false);
            }

            if (m_version >= 28)
            {
                m_playerStats.m_kills  = zPackage.ReadInt();
                m_playerStats.m_deaths = zPackage.ReadInt();
                m_playerStats.m_crafts = zPackage.ReadInt();
                m_playerStats.m_builds = zPackage.ReadInt();
            }

            int num2 = zPackage.ReadInt();

            for (int i = 0; i < num2; i++)
            {
                long            key             = zPackage.ReadLong();
                WorldPlayerData worldPlayerData = new WorldPlayerData();

                worldPlayerData.m_haveCustomSpawnPoint = zPackage.ReadBool();
                worldPlayerData.m_spawnPoint           = zPackage.ReadVector3();
                worldPlayerData.m_haveLogoutPoint      = zPackage.ReadBool();
                worldPlayerData.m_logoutPoint          = zPackage.ReadVector3();
                if (m_version >= 30)
                {
                    worldPlayerData.m_haveDeathPoint = zPackage.ReadBool();
                    worldPlayerData.m_deathPoint     = zPackage.ReadVector3();
                }
                worldPlayerData.m_homePoint = zPackage.ReadVector3();
                if (m_version >= 29 && zPackage.ReadBool())
                {
                    worldPlayerData.m_mapData = zPackage.ReadByteArray();
                }
                m_worldData.Add(key, worldPlayerData);
            }

            m_playerName = zPackage.ReadString();
            m_playerID   = zPackage.ReadLong();
            m_startSeed  = zPackage.ReadString();

            m_playerData = null;
            if (zPackage.ReadBool())
            {
                m_playerData = zPackage.ReadByteArray();
            }

            return(true);
        }
Esempio n. 16
0
    // Token: 0x060007D3 RID: 2003 RVA: 0x0003D98C File Offset: 0x0003BB8C
    private void RPC_ZDOData(ZRpc rpc, ZPackage pkg)
    {
        ZDOMan.ZDOPeer zdopeer = this.FindPeer(rpc);
        if (zdopeer == null)
        {
            ZLog.Log("ZDO data from unkown host, ignoring");
            return;
        }
        float    time = Time.time;
        int      num  = 0;
        ZPackage pkg2 = new ZPackage();
        int      num2 = pkg.ReadInt();

        for (int i = 0; i < num2; i++)
        {
            ZDOID id  = pkg.ReadZDOID();
            ZDO   zdo = this.GetZDO(id);
            if (zdo != null)
            {
                zdo.InvalidateSector();
            }
        }
        for (;;)
        {
            ZDOID zdoid = pkg.ReadZDOID();
            if (zdoid.IsNone())
            {
                break;
            }
            num++;
            uint    num3   = pkg.ReadUInt();
            uint    num4   = pkg.ReadUInt();
            long    owner  = pkg.ReadLong();
            Vector3 vector = pkg.ReadVector3();
            pkg.ReadPackage(ref pkg2);
            ZDO  zdo2 = this.GetZDO(zdoid);
            bool flag = false;
            if (zdo2 != null)
            {
                if (num4 <= zdo2.m_dataRevision)
                {
                    if (num3 > zdo2.m_ownerRevision)
                    {
                        zdo2.m_owner          = owner;
                        zdo2.m_ownerRevision  = num3;
                        zdopeer.m_zdos[zdoid] = new ZDOMan.ZDOPeer.PeerZDOInfo(num4, num3, time);
                        continue;
                    }
                    continue;
                }
            }
            else
            {
                zdo2 = this.CreateNewZDO(zdoid, vector);
                flag = true;
            }
            zdo2.m_ownerRevision = num3;
            zdo2.m_dataRevision  = num4;
            zdo2.m_owner         = owner;
            zdo2.InternalSetPosition(vector);
            zdopeer.m_zdos[zdoid] = new ZDOMan.ZDOPeer.PeerZDOInfo(zdo2.m_dataRevision, zdo2.m_ownerRevision, time);
            zdo2.Deserialize(pkg2);
            if (ZNet.instance.IsServer() && flag && this.m_deadZDOs.ContainsKey(zdoid))
            {
                zdo2.SetOwner(this.m_myid);
                this.DestroyZDO(zdo2);
            }
        }
        this.m_zdosRecv += num;
    }
Esempio n. 17
0
    // Token: 0x06000793 RID: 1939 RVA: 0x0003BE94 File Offset: 0x0003A094
    public void Load(ZPackage pkg, int version)
    {
        this.m_ownerRevision = pkg.ReadUInt();
        this.m_dataRevision  = pkg.ReadUInt();
        this.m_persistent    = pkg.ReadBool();
        this.m_owner         = pkg.ReadLong();
        this.m_timeCreated   = pkg.ReadLong();
        this.m_pgwVersion    = pkg.ReadInt();
        if (version >= 16 && version < 24)
        {
            pkg.ReadInt();
        }
        if (version >= 23)
        {
            this.m_type = (ZDO.ObjectType)pkg.ReadSByte();
        }
        if (version >= 22)
        {
            this.m_distant = pkg.ReadBool();
        }
        if (version < 13)
        {
            pkg.ReadChar();
            pkg.ReadChar();
        }
        if (version >= 17)
        {
            this.m_prefab = pkg.ReadInt();
        }
        this.m_sector   = pkg.ReadVector2i();
        this.m_position = pkg.ReadVector3();
        this.m_rotation = pkg.ReadQuaternion();
        int num = (int)pkg.ReadChar();

        if (num > 0)
        {
            this.InitFloats();
            for (int i = 0; i < num; i++)
            {
                int key = pkg.ReadInt();
                this.m_floats[key] = pkg.ReadSingle();
            }
        }
        else
        {
            this.ReleaseFloats();
        }
        int num2 = (int)pkg.ReadChar();

        if (num2 > 0)
        {
            this.InitVec3();
            for (int j = 0; j < num2; j++)
            {
                int key2 = pkg.ReadInt();
                this.m_vec3[key2] = pkg.ReadVector3();
            }
        }
        else
        {
            this.ReleaseVec3();
        }
        int num3 = (int)pkg.ReadChar();

        if (num3 > 0)
        {
            this.InitQuats();
            for (int k = 0; k < num3; k++)
            {
                int key3 = pkg.ReadInt();
                this.m_quats[key3] = pkg.ReadQuaternion();
            }
        }
        else
        {
            this.ReleaseQuats();
        }
        int num4 = (int)pkg.ReadChar();

        if (num4 > 0)
        {
            this.InitInts();
            for (int l = 0; l < num4; l++)
            {
                int key4 = pkg.ReadInt();
                this.m_ints[key4] = pkg.ReadInt();
            }
        }
        else
        {
            this.ReleaseInts();
        }
        int num5 = (int)pkg.ReadChar();

        if (num5 > 0)
        {
            this.InitLongs();
            for (int m = 0; m < num5; m++)
            {
                int key5 = pkg.ReadInt();
                this.m_longs[key5] = pkg.ReadLong();
            }
        }
        else
        {
            this.ReleaseLongs();
        }
        int num6 = (int)pkg.ReadChar();

        if (num6 > 0)
        {
            this.InitStrings();
            for (int n = 0; n < num6; n++)
            {
                int key6 = pkg.ReadInt();
                this.m_strings[key6] = pkg.ReadString();
            }
        }
        else
        {
            this.ReleaseStrings();
        }
        if (version < 17)
        {
            this.m_prefab = this.GetInt("prefab", 0);
        }
    }
Esempio n. 18
0
    // Token: 0x06000791 RID: 1937 RVA: 0x0003B918 File Offset: 0x00039B18
    public void Deserialize(ZPackage pkg)
    {
        this.m_persistent  = pkg.ReadBool();
        this.m_distant     = pkg.ReadBool();
        this.m_timeCreated = pkg.ReadLong();
        this.m_pgwVersion  = pkg.ReadInt();
        this.m_type        = (ZDO.ObjectType)pkg.ReadSByte();
        this.m_prefab      = pkg.ReadInt();
        this.m_rotation    = pkg.ReadQuaternion();
        int num = pkg.ReadInt();

        if ((num & 1) != 0)
        {
            this.InitFloats();
            int num2 = (int)pkg.ReadByte();
            for (int i = 0; i < num2; i++)
            {
                int key = pkg.ReadInt();
                this.m_floats[key] = pkg.ReadSingle();
            }
        }
        else
        {
            this.ReleaseFloats();
        }
        if ((num & 2) != 0)
        {
            this.InitVec3();
            int num3 = (int)pkg.ReadByte();
            for (int j = 0; j < num3; j++)
            {
                int key2 = pkg.ReadInt();
                this.m_vec3[key2] = pkg.ReadVector3();
            }
        }
        else
        {
            this.ReleaseVec3();
        }
        if ((num & 4) != 0)
        {
            this.InitQuats();
            int num4 = (int)pkg.ReadByte();
            for (int k = 0; k < num4; k++)
            {
                int key3 = pkg.ReadInt();
                this.m_quats[key3] = pkg.ReadQuaternion();
            }
        }
        else
        {
            this.ReleaseQuats();
        }
        if ((num & 8) != 0)
        {
            this.InitInts();
            int num5 = (int)pkg.ReadByte();
            for (int l = 0; l < num5; l++)
            {
                int key4 = pkg.ReadInt();
                this.m_ints[key4] = pkg.ReadInt();
            }
        }
        else
        {
            this.ReleaseInts();
        }
        if ((num & 64) != 0)
        {
            this.InitLongs();
            int num6 = (int)pkg.ReadByte();
            for (int m = 0; m < num6; m++)
            {
                int key5 = pkg.ReadInt();
                this.m_longs[key5] = pkg.ReadLong();
            }
        }
        else
        {
            this.ReleaseLongs();
        }
        if ((num & 16) != 0)
        {
            this.InitStrings();
            int num7 = (int)pkg.ReadByte();
            for (int n = 0; n < num7; n++)
            {
                int key6 = pkg.ReadInt();
                this.m_strings[key6] = pkg.ReadString();
            }
            return;
        }
        this.ReleaseStrings();
    }
        // Token: 0x060001C5 RID: 453 RVA: 0x0000F2F0 File Offset: 0x0000D4F0
        public static Player Load(ZPackage pkg)
        {
            var player = new Player();


            int num = pkg.ReadInt();

            if (num >= 7)
            {
                player.MaxHealth = pkg.ReadSingle();
            }
            player.Health = pkg.ReadSingle();
            if (num >= 10)
            {
                player.MaxStamina = pkg.ReadSingle();
            }
            if (num >= 8)
            {
                player.FirstSpawn = pkg.ReadBool();
            }
            if (num >= 20)
            {
                player.TimeSinceDeath = pkg.ReadSingle();
            }
            if (num >= 23)
            {
                player.GuardianPower = pkg.ReadString();
            }
            if (num >= 24)
            {
                player.GuardianPowerCooldown = pkg.ReadSingle();
            }
            if (num == 2)
            {
                pkg.ReadZDOID();
            }
            player.Inventory = InventoryReaderWriter.Load(pkg);
            int num3 = pkg.ReadInt();

            for (int i = 0; i < num3; i++)
            {
                string item = pkg.ReadString();
                player.m_knownRecipes.Add(item);
            }
            if (num < 15)
            {
                int num4 = pkg.ReadInt();
                for (int j = 0; j < num4; j++)
                {
                    pkg.ReadString();
                }
            }
            else
            {
                int num5 = pkg.ReadInt();
                for (int k = 0; k < num5; k++)
                {
                    string key   = pkg.ReadString();
                    int    value = pkg.ReadInt();
                    player.m_knownStations.Add(key, value);
                }
            }
            int num6 = pkg.ReadInt();

            for (int l = 0; l < num6; l++)
            {
                string item2 = pkg.ReadString();
                player.m_knownMaterial.Add(item2);
            }
            if (num < 19 || num >= 21)
            {
                int num7 = pkg.ReadInt();
                for (int m = 0; m < num7; m++)
                {
                    string item3 = pkg.ReadString();
                    player.m_shownTutorials.Add(item3);
                }
            }
            if (num >= 6)
            {
                int num8 = pkg.ReadInt();
                for (int n = 0; n < num8; n++)
                {
                    string item4 = pkg.ReadString();
                    player.m_uniques.Add(item4);
                }
            }
            if (num >= 9)
            {
                int num9 = pkg.ReadInt();
                for (int num10 = 0; num10 < num9; num10++)
                {
                    string item5 = pkg.ReadString();
                    player.m_trophies.Add(item5);
                }
            }
            if (num >= 18)
            {
                int num11 = pkg.ReadInt();
                for (int num12 = 0; num12 < num11; num12++)
                {
                    Biome item6 = (Biome)pkg.ReadInt();
                    player.m_knownBiome.Add(item6);
                }
            }
            if (num >= 22)
            {
                int num13 = pkg.ReadInt();
                for (int num14 = 0; num14 < num13; num14++)
                {
                    string key2   = pkg.ReadString();
                    string value2 = pkg.ReadString();
                    player.m_knownTexts.Add(key2, value2);
                }
            }
            if (num >= 4)
            {
                string beard = pkg.ReadString();
                string hair  = pkg.ReadString();
                player.Beard = beard;
                player.Hair  = hair;
            }
            if (num >= 5)
            {
                Vector3 skinColor = pkg.ReadVector3();
                Vector3 hairColor = pkg.ReadVector3();
                player.SkinColor = skinColor;
                player.HairColor = hairColor;
            }
            if (num >= 11)
            {
                int playerModel = pkg.ReadInt();
                player.PlayerModel = playerModel;
            }
            if (num >= 12)
            {
                player.m_foods.Clear();
                int num15 = pkg.ReadInt();
                for (int num16 = 0; num16 < num15; num16++)
                {
                    if (num >= 14)
                    {
                        var food = new Food();
                        food.m_name   = pkg.ReadString();
                        food.m_health = pkg.ReadSingle();
                        if (num >= 16)
                        {
                            food.m_stamina = pkg.ReadSingle();
                        }
                        player.m_foods.Add(food);
                    }
                    else
                    {
                        pkg.ReadString();
                        pkg.ReadSingle();
                        pkg.ReadSingle();
                        pkg.ReadSingle();
                        pkg.ReadSingle();
                        pkg.ReadSingle();
                        pkg.ReadSingle();
                        if (num >= 13)
                        {
                            pkg.ReadSingle();
                        }
                    }
                }
            }
            if (num >= 17)
            {
                player.Skills = SkillsReaderWriter.Load(pkg);
            }

            return(player);
        }
Esempio n. 20
0
    public void Load(ZPackage pkg, int version)
    {
        this.m_ownerRevision = pkg.ReadUInt();
        this.m_dataRevision  = pkg.ReadUInt();
        this.m_persistent    = pkg.ReadBool();
        this.m_owner         = pkg.ReadLong();
        this.m_timeCreated   = pkg.ReadLong();
        this.m_pgwVersion    = pkg.ReadInt();
        if (version >= 16 && version < 24)
        {
            pkg.ReadInt();
        }
        if (version >= 23)
        {
            this.m_type = (ZDO.ObjectType)pkg.ReadSByte();
        }
        if (version >= 22)
        {
            this.m_distant = pkg.ReadBool();
        }
        if (version < 13)
        {
            int num1 = (int)pkg.ReadChar();
            int num2 = (int)pkg.ReadChar();
        }
        if (version >= 17)
        {
            this.m_prefab = pkg.ReadInt();
        }
        this.m_sector   = pkg.ReadVector2i();
        this.m_position = pkg.ReadVector3();
        this.m_rotation = pkg.ReadQuaternion();
        int num3 = (int)pkg.ReadChar();

        if (num3 > 0)
        {
            this.InitFloats();
            for (int index = 0; index < num3; ++index)
            {
                this.m_floats[pkg.ReadInt()] = pkg.ReadSingle();
            }
        }
        else
        {
            this.ReleaseFloats();
        }
        int num4 = (int)pkg.ReadChar();

        if (num4 > 0)
        {
            this.InitVec3();
            for (int index = 0; index < num4; ++index)
            {
                this.m_vec3[pkg.ReadInt()] = pkg.ReadVector3();
            }
        }
        else
        {
            this.ReleaseVec3();
        }
        int num5 = (int)pkg.ReadChar();

        if (num5 > 0)
        {
            this.InitQuats();
            for (int index = 0; index < num5; ++index)
            {
                this.m_quats[pkg.ReadInt()] = pkg.ReadQuaternion();
            }
        }
        else
        {
            this.ReleaseQuats();
        }
        int num6 = (int)pkg.ReadChar();

        if (num6 > 0)
        {
            this.InitInts();
            for (int index = 0; index < num6; ++index)
            {
                this.m_ints[pkg.ReadInt()] = pkg.ReadInt();
            }
        }
        else
        {
            this.ReleaseInts();
        }
        int num7 = (int)pkg.ReadChar();

        if (num7 > 0)
        {
            this.InitLongs();
            for (int index = 0; index < num7; ++index)
            {
                this.m_longs[pkg.ReadInt()] = pkg.ReadLong();
            }
        }
        else
        {
            this.ReleaseLongs();
        }
        int num8 = (int)pkg.ReadChar();

        if (num8 > 0)
        {
            this.InitStrings();
            for (int index = 0; index < num8; ++index)
            {
                this.m_strings[pkg.ReadInt()] = pkg.ReadString();
            }
        }
        else
        {
            this.ReleaseStrings();
        }
        if (version >= 17)
        {
            return;
        }
        this.m_prefab = this.GetInt("prefab", 0);
    }
Esempio n. 21
0
            static void Prefix(RoutedRPCData data)
            {
                ZNetPeer peer    = ZNet.instance.GetPeer(data.m_senderPeerID);
                var      steamid = "";

                try {
                    steamid = peer.m_rpc.GetSocket().GetHostName();
                } catch {}

                if (data?.m_methodHash == sayMethodHash)
                {
                    try {
                        var      zdoData     = ZDOMan.instance.GetZDO(peer.m_characterID);
                        var      pos         = zdoData.GetPosition();
                        ZPackage package     = new ZPackage(data.m_parameters.GetArray());
                        int      messageType = package.ReadInt();
                        string   userName    = package.ReadString();
                        string   message     = package.ReadString();
                        message = (message == null ? "" : message).Trim();

                        if (message.StartsWith("/pin"))
                        {
                            var messageParts = message.Split(' ');
                            var pinType      = "dot";
                            var startIdx     = 1;
                            if (messageParts.Length > 1 && ALLOWED_PINS.Contains(messageParts[1]))
                            {
                                pinType  = messageParts[1];
                                startIdx = 2;
                            }
                            var pinText = "";
                            if (startIdx < messageParts.Length)
                            {
                                pinText = String.Join(" ", messageParts, startIdx, messageParts.Length - startIdx);
                            }
                            if (pinText.Length > 20)
                            {
                                pinText = pinText.Substring(0, 20);
                            }
                            var safePinsText = Regex.Replace(pinText, @"[^a-zA-Z0-9 ]", "");

                            var timestamp = DateTime.Now - unixEpoch;
                            var pinId     = $"{timestamp.TotalMilliseconds}-{UnityEngine.Random.Range(1000, 9999)}";
                            mapDataServer.AddPin(steamid, pinId, pinType, userName, pos, safePinsText);

                            var usersPins       = mapDataServer.pins.FindAll(pin => pin.StartsWith(steamid));
                            var numOverflowPins = usersPins.Count - WebMapConfig.MAX_PINS_PER_USER;
                            for (var t = numOverflowPins; t > 0; t--)
                            {
                                var pinIdx = mapDataServer.pins.FindIndex(pin => pin.StartsWith(steamid));
                                mapDataServer.RemovePin(pinIdx);
                            }
                            SavePins();
                        }
                        else if (message.StartsWith("/undoPin"))
                        {
                            var pinIdx = mapDataServer.pins.FindLastIndex(pin => pin.StartsWith(steamid));
                            if (pinIdx > -1)
                            {
                                mapDataServer.RemovePin(pinIdx);
                                SavePins();
                            }
                        }
                        else if (message.StartsWith("/deletePin"))
                        {
                            var messageParts = message.Split(' ');
                            var pinText      = "";
                            if (messageParts.Length > 1)
                            {
                                pinText = String.Join(" ", messageParts, 1, messageParts.Length - 1);
                            }

                            var pinIdx = mapDataServer.pins.FindLastIndex(pin => {
                                var pinParts = pin.Split(',');
                                return(pinParts[0] == steamid && pinParts[pinParts.Length - 1] == pinText);
                            });

                            if (pinIdx > -1)
                            {
                                mapDataServer.RemovePin(pinIdx);
                                SavePins();
                            }
                        }
                        //Debug.Log("SAY!!! " + messageType + " | " + userName + " | " + message);
                    } catch {}
                }
                else if (data?.m_methodHash == chatMessageMethodHash)
                {
                    try {
                        ZPackage package     = new ZPackage(data.m_parameters.GetArray());
                        Vector3  pos         = package.ReadVector3();
                        int      messageType = package.ReadInt();
                        string   userName    = package.ReadString();
                        // string message = package.ReadString();
                        // message = (message == null ? "" : message).Trim();

                        if (messageType == (int)Talker.Type.Ping)
                        {
                            mapDataServer.BroadcastPing(data.m_senderPeerID, userName, pos);
                        }
                        // Debug.Log("CHAT!!! " + pos + " | " + messageType + " | " + userName + " | " + message);
                    } catch {}
                }
            }
Esempio n. 22
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);
 }