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}"); }
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}"); }
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)); }
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)); }
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)); }