Beispiel #1
0
        protected override void Process(IClient client, Bf packet)
        {
            IMap map = client.Character.Map;

            if (map == null)
            {
                Logger.Error("Character map is null");
                return;
            }

            ILivingEntity entity = map.GetEntity <ILivingEntity>(packet.EntityType, packet.EntityId);

            if (entity == null)
            {
                Logger.Warn("Can't found entity in map");
                return;
            }

            if (packet.Duration != 0)
            {
                IBuff buff = buffFactory.CreateBuff(packet.BuffId, packet.Duration);
                if (buff == null)
                {
                    Logger.Warn($"Failed to create buff {packet.BuffId}");
                    return;
                }

                entity.Buffs.Add(buff);

                eventPipeline.Emit(new EntityReceiveBuffEvent(client, entity, buff));

                Logger.Debug($"Buff with id {packet.BuffId} successfully added to entity {entity.EntityType} with id {entity.Id}");
                return;
            }

            IBuff existingBuff = entity.Buffs.FirstOrDefault(x => x.Id == packet.BuffId);

            if (existingBuff == null)
            {
                Logger.Warn($"Can't found buff to remove ({packet.BuffId})");
                return;
            }

            entity.Buffs.Remove(existingBuff);
            eventPipeline.Emit(new EntityRemoveBuffEvent(client, entity, existingBuff));

            Logger.Debug($"Buff with id {packet.BuffId} successfully removed from entity {entity.EntityType} with id {entity.Id}");
        }
Beispiel #2
0
        protected override void Process(IClient client, CInfo packet)
        {
            if (client.Character != null)
            {
                return;
            }

            client.Character = entityFactory.CreateCharacter(packet.Id, packet.Name, client);

            eventPipeline.Emit(new CharacterInitializedEvent(client, client.Character));

            Logger.Debug($"Client with id {client.Id} initialized with character {client.Character.Name}");
        }
Beispiel #3
0
        protected override void Process(IClient client, At packet)
        {
            IMap map = mapFactory.CreateMap(packet.MapId);

            if (map == null)
            {
                Logger.Error($"Failed to create map {packet.MapId}");
                return;
            }

            IMap currentMap = client.Character.Map;

            if (currentMap != null)
            {
                eventPipeline.Emit(new MapLeaveEvent(client, currentMap));
            }

            client.Character.Position  = packet.Position;
            client.Character.Direction = packet.Direction;

            map.AddEntity(client.Character);
            eventPipeline.Emit(new MapJoinEvent(client, map));
        }
Beispiel #4
0
        protected override void Process(IClient client, Rest packet)
        {
            IMap          map    = client.Character.Map;
            ILivingEntity entity = map.GetEntity <ILivingEntity>(packet.EntityType, packet.EntityId);

            if (entity == null)
            {
                Logger.Debug($"Can't found entity {packet.EntityType} with id {packet.EntityId}");
                return;
            }

            entity.IsResting = packet.IsResting;
            eventPipeline.Emit(new EntityRestEvent(client, entity));
        }
Beispiel #5
0
        protected override void Process(IClient client, In packet)
        {
            IMap map = client.Character.Map;

            if (map == null)
            {
                Logger.Warn("Can't process in packet, character map is null");
                return;
            }

            IEntity entity;

            switch (packet.EntityType)
            {
            case EntityType.Monster:
                entity = entityFactory.CreateMonster(packet.EntityId, packet.GameKey);
                break;

            case EntityType.Npc:
                entity = entityFactory.CreateNpc(packet.EntityId, packet.GameKey);
                break;

            case EntityType.Player:
                entity = entityFactory.CreatePlayer(packet.EntityId, packet.Name);
                break;

            case EntityType.MapObject:
                entity = entityFactory.CreateMapObject(packet.EntityId, packet.GameKey, packet.MapObject.Amount);
                break;

            default:
                Logger.Error($"Undefined switch clause for entity type {packet.EntityType}");
                return;
            }

            if (entity == null)
            {
                Logger.Error($"Failed to create entity {packet.EntityType} {packet.EntityId}");
                return;
            }

            entity.Position = packet.Position;
            if (entity is ILivingEntity livingEntity)
            {
                livingEntity.Direction = packet.Direction;

                if (entity is IPlayer player)
                {
                    player.HpPercentage = packet.Player.HpPercentage;
                    player.MpPercentage = packet.Player.MpPercentage;
                    player.Gender       = packet.Player.Gender;
                    player.Class        = packet.Player.Class;
                }
                else
                {
                    livingEntity.HpPercentage = packet.Npc.HpPercentage > 100 ? 100 : packet.Npc.HpPercentage;
                    livingEntity.MpPercentage = packet.Npc.MpPercentage > 100 ? 100 : packet.Npc.MpPercentage;
                }
            }

            map.AddEntity(entity);

            eventPipeline.Emit(new EntitySpawnEvent(client, map, entity));
        }