예제 #1
0
        public override void ClientReadInitial(IReadMessage msg)
        {
            base.ClientReadInitial(msg);
            // duplicate code from escortmission, should possibly be combined, though additional loot items might be added so maybe not
            byte characterCount = msg.ReadByte();

            for (int i = 0; i < characterCount; i++)
            {
                characters.Add(Character.ReadSpawnData(msg));
                ushort itemCount = msg.ReadUInt16();
                for (int j = 0; j < itemCount; j++)
                {
                    Item.ReadSpawnData(msg);
                }
            }
            if (characters.Contains(null))
            {
                throw new System.Exception("Error in PirateMission.ClientReadInitial: character list contains null (mission: " + Prefab.Identifier + ")");
            }

            if (characters.Count != characterCount)
            {
                throw new System.Exception("Error in PirateMission.ClientReadInitial: character count does not match the server count (" + characterCount + " != " + characters.Count + "mission: " + Prefab.Identifier + ")");
            }
        }
예제 #2
0
        public override void ClientReadInitial(IReadMessage msg)
        {
            base.ClientReadInitial(msg);
            existingTargets.Clear();
            spawnedTargets.Clear();
            allTargets.Clear();
            ushort existingTargetsCount = msg.ReadUInt16();

            for (int i = 0; i < existingTargetsCount; i++)
            {
                ushort targetId = msg.ReadUInt16();
                if (targetId == Entity.NullEntityID)
                {
                    continue;
                }
                Entity target = Entity.FindEntityByID(targetId);
                if (target == null)
                {
                    continue;
                }
                existingTargets.Add(target);
                allTargets.Add(target);
            }
            ushort spawnedTargetsCount = msg.ReadUInt16();

            for (int i = 0; i < spawnedTargetsCount; i++)
            {
                var enemy = Character.ReadSpawnData(msg);
                existingTargets.Add(enemy);
                allTargets.Add(enemy);
            }
        }
예제 #3
0
        public override void ClientReadInitial(IReadMessage msg)
        {
            byte characterCount = msg.ReadByte();

            for (int i = 0; i < characterCount; i++)
            {
                Character character = Character.ReadSpawnData(msg);
                characters.Add(character);
                if (msg.ReadBoolean())
                {
                    terroristCharacters.Add(character);
                }
                ushort itemCount = msg.ReadUInt16();
                for (int j = 0; j < itemCount; j++)
                {
                    Item.ReadSpawnData(msg);
                }
            }
            if (characters.Contains(null))
            {
                throw new System.Exception("Error in EscortMission.ClientReadInitial: character list contains null (mission: " + Prefab.Identifier + ")");
            }

            if (characters.Count != characterCount)
            {
                throw new System.Exception("Error in EscortMission.ClientReadInitial: character count does not match the server count (" + characterCount + " != " + characters.Count + "mission: " + Prefab.Identifier + ")");
            }
            InitCharacters();
        }
예제 #4
0
        public override void ClientReadInitial(IReadMessage msg)
        {
            base.ClientReadInitial(msg);
            ushort targetItemCount = msg.ReadUInt16();

            for (int i = 0; i < targetItemCount; i++)
            {
                var item = Item.ReadSpawnData(msg);
                items.Add(item);
            }

            byte characterCount = msg.ReadByte();

            for (int i = 0; i < characterCount; i++)
            {
                Character character = Character.ReadSpawnData(msg);
                characters.Add(character);
                if (msg.ReadBoolean())
                {
                    requireKill.Add(character);
                }
                if (msg.ReadBoolean())
                {
                    requireRescue.Add(character);
#if CLIENT
                    GameMain.GameSession.CrewManager.AddCharacterToCrewList(character);
#endif
                }
                ushort itemCount = msg.ReadUInt16();
                for (int j = 0; j < itemCount; j++)
                {
                    Item.ReadSpawnData(msg);
                }
                if (character.Submarine != null && character.AIController is EnemyAIController enemyAi)
                {
                    enemyAi.UnattackableSubmarines.Add(character.Submarine);
                    enemyAi.UnattackableSubmarines.Add(Submarine.MainSub);
                    foreach (Submarine sub in Submarine.MainSub.DockedTo)
                    {
                        enemyAi.UnattackableSubmarines.Add(sub);
                    }
                }
            }
            if (characters.Contains(null))
            {
                throw new System.Exception("Error in AbandonedOutpostMission.ClientReadInitial: character list contains null (mission: " + Prefab.Identifier + ")");
            }
            if (characters.Count != characterCount)
            {
                throw new System.Exception("Error in AbandonedOutpostMission.ClientReadInitial: character count does not match the server count (" + characters + " != " + characters.Count + "mission: " + Prefab.Identifier + ")");
            }
        }
예제 #5
0
        public override void ClientReadInitial(IReadMessage msg)
        {
            byte monsterCount = msg.ReadByte();

            for (int i = 0; i < monsterCount; i++)
            {
                monsters.Add(Character.ReadSpawnData(msg));
            }
            if (monsters.Contains(null))
            {
                throw new System.Exception("Error in MonsterMission.ClientReadInitial: monster list contains null (mission: " + Prefab.Identifier + ")");
            }
            if (monsters.Count != monsterCount)
            {
                throw new System.Exception("Error in MonsterMission.ClientReadInitial: monster count does not match the server count (" + monsterCount + " != " + monsters.Count + "mission: " + Prefab.Identifier + ")");
            }
            InitializeMonsters(monsters);
        }
예제 #6
0
        public void ClientRead(ServerNetObject type, Lidgren.Network.NetBuffer message, float sendingTime)
        {
            if (GameMain.Server != null)
            {
                return;
            }

            bool remove = message.ReadBoolean();

            if (remove)
            {
                ushort entityId = message.ReadUInt16();

                var entity = FindEntityByID(entityId);
                if (entity != null)
                {
                    DebugConsole.Log("Received entity removal message for \"" + entity.ToString() + "\".");
                    entity.Remove();
                }
                else
                {
                    DebugConsole.Log("Received entity removal message for ID " + entityId + ". Entity with a matching ID not found.");
                }
            }
            else
            {
                switch (message.ReadByte())
                {
                case (byte)SpawnableType.Item:
                    Item.ReadSpawnData(message, true);
                    break;

                case (byte)SpawnableType.Character:
                    Character.ReadSpawnData(message, true);
                    break;

                default:
                    DebugConsole.ThrowError("Received invalid entity spawn message (unknown spawnable type)");
                    break;
                }
            }
        }