コード例 #1
0
        protected override void Process(GameSession session, Scp packet)
        {
            Character character = session.Character;

            if (character.Pet != null && character.Pet.Id == packet.PetId)
            {
                if (packet.Loyalty != character.Pet.Loyalty)
                {
                    eventPipeline.Process(session, new PetLoyaltyChanged());
                }

                return;
            }

            MonsterData data = database.GetMonsterData(packet.ModelId);
            string      name = languageService.GetTranslation(TranslationCategory.Monster, data.NameKey);

            var pet = new OwnedPet
            {
                Id           = packet.PetId,
                EntityId     = packet.EntityId,
                ModelId      = packet.ModelId,
                Name         = packet.Name == "-" || packet.Name == "@" ? name : packet.Name,
                IsSummonable = packet.IsSummonable,
                IsTeamMember = packet.IsTeamMember,
                Level        = packet.Level,
                Loyalty      = packet.Loyalty
            };

            character.Pets.Add(pet);

            if (pet.IsTeamMember)
            {
                Npc entity = character.Map.GetEntity <Npc>(EntityType.Npc, pet.EntityId);
                if (entity == null)
                {
                    return;
                }

                character.Pet = new Pet(character, pet, entity);
            }
        }
コード例 #2
0
ファイル: InProcessor.cs プロジェクト: romansvozil/KBot
        protected override void Process(GameSession session, In packet)
        {
            Map map = session.Character.Map;

            Entity entity;

            switch (packet.EntityType)
            {
            case EntityType.Monster:
                Monster monster = entityFactory.CreateMonster(packet.ModelId, packet.EntityId);

                monster.Position     = packet.Position;
                monster.HpPercentage = packet.Npc.HpPercentage;
                monster.MpPercentage = packet.Npc.MpPercentage;
                monster.Map          = map;

                monster.Map.Monsters[monster.Id] = monster;
                entity = monster;
                break;

            case EntityType.Npc:
                Npc npc = entityFactory.CreateNpc(packet.ModelId, packet.EntityId, packet.Npc.Name);

                npc.Position     = packet.Position;
                npc.HpPercentage = packet.Npc.HpPercentage;
                npc.MpPercentage = packet.Npc.MpPercentage;
                npc.Map          = map;

                npc.Map.Npcs[npc.Id] = npc;
                entity = npc;

                OwnedPet pet = session.Character.Pets.FirstOrDefault(x => x.EntityId == entity.Id && x.IsTeamMember);
                if (pet != null)
                {
                    session.Character.Pet = new Pet(session.Character, pet, npc);
                }
                break;

            case EntityType.MapObject:
                MapObject mapObject = entityFactory.CreateMapObject(packet.ModelId, packet.EntityId, packet.MapObject.Amount);
                Player    owner     = map.GetEntity <Player>(EntityType.Player, packet.MapObject.Owner);
                if (owner == null)
                {
                    Log.Debug($"Can't found owner of map object {mapObject.Id}");
                }

                mapObject.Position = packet.Position;
                mapObject.Owner    = owner;
                mapObject.Map      = map;

                mapObject.Map.MapObjects[mapObject.Id] = mapObject;
                entity = mapObject;
                break;

            case EntityType.Player:
                var player = new Player(packet.EntityId, packet.Name)
                {
                    Gender       = packet.Player.Gender,
                    Job          = packet.Player.Job,
                    HpPercentage = packet.Player.HpPercentage,
                    MpPercentage = packet.Player.MpPercentage,
                    Position     = packet.Position,
                    Level        = packet.Player.Level,
                    HeroLevel    = packet.Player.HeroLevel,
                    Map          = map
                };

                player.Map.Players[player.Id] = player;
                entity = player;
                break;

            default:
                return;
            }

            eventPipeline.Process(session, new EntityJoinEvent
            {
                Entity = entity,
                Map    = map
            });

            Log.Trace($"Entity {packet.EntityType} with ID {packet.EntityId} added to map.");
        }