public void GainExp(int amount) { if (amount <= 0 || !ExpMetadataStorage.LevelExist((short)(Level + 1))) { return; } long newExp = Exp + amount + RestExp; if (RestExp > 0) { RestExp -= amount; } else { RestExp = 0; } while (newExp >= ExpMetadataStorage.GetExpToLevel(Level)) { newExp -= ExpMetadataStorage.GetExpToLevel(Level); if (LevelUp()) { continue; } newExp = 0; break; } Exp = newExp; Session.Send(ExperiencePacket.ExpUp(amount, newExp, RestExp)); }
public void GainExp(int amount) { if (amount <= 0 || !ExpMetadataStorage.LevelExist((short)(Level + 1))) { return; } long newExp = Exp + amount + RestExp; if (RestExp > 0) { RestExp -= amount; } else { RestExp = 0; } while (newExp >= ExpMetadataStorage.GetExpToLevel(Level)) { newExp -= ExpMetadataStorage.GetExpToLevel(Level); if (!LevelUp()) // If can't level up because next level doesn't exist, exit the loop { newExp = 0; break; } } Exp = newExp; Player.Session.Send(ExperiencePacket.ExpUp(amount, newExp, RestExp)); }
public void SetLevel(short level) { Level = level; Exp = 0; Player.Session.Send(ExperiencePacket.ExpUp(0, Exp, 0)); Player.Session.Send(ExperiencePacket.LevelUp(Player.Session.FieldPlayer, Level)); }
//ExperiencePacket private static void HandlePacket(ExperiencePacket packet) { if (Globals.Me != null) { Globals.Me.Experience = packet.Experience; Globals.Me.ExperienceToNextLevel = packet.ExperienceToNextLevel; } }
public void GainExp(long amount) { if (amount <= 0 || !ExpMetadataStorage.LevelExist((short)(Level + 1))) { return; } long newExp = Exp + amount + RestExp; if (RestExp > 0) { RestExp -= amount; } else { RestExp = 0; } bool hasLeveledUp = false; while (newExp >= ExpMetadataStorage.GetExpToLevel(Level)) { newExp -= ExpMetadataStorage.GetExpToLevel(Level); if (LevelUp()) { hasLeveledUp = true; continue; } newExp = 0; break; } Exp = newExp; Session.Send(ExperiencePacket.ExpUp(amount, newExp, RestExp)); if (!hasLeveledUp) { return; } Session.FieldManager.BroadcastPacket(RevivalConfirmPacket.Send(FieldPlayer.ObjectId, 0)); Session.FieldManager.BroadcastPacket(LevelUpPacket.LevelUp(FieldPlayer.ObjectId, Level)); Session.FieldManager.BroadcastPacket(FieldObjectPacket.UpdateCharacterLevel(Player)); // Find all new skills for current level HashSet <int> newSkillIds = SkillMetadataStorage.GetJobSkills(Player.Job) .Where(x => x.SkillLevels.First().SkillUpgrade.LevelRequired == Level) .Select(x => x.SkillId).ToHashSet(); Session.FieldManager.BroadcastPacket(JobPacket.UpdateSkillTab(FieldPlayer, newSkillIds)); Session.Send(StatPacket.SetStats(FieldPlayer)); Session.FieldManager.BroadcastPacket(StatPacket.SetStats(FieldPlayer), Session); Session.Send(KeyTablePacket.SendFullOptions(Player.GameOptions)); DatabaseManager.Characters.Update(Player); }
public void SetLevel(short level) { Level = level; Exp = 0; Session.Send(ExperiencePacket.ExpUp(0, Exp, 0)); Session.Send(ExperiencePacket.LevelUp(FieldPlayer.ObjectId, Level)); QuestHelper.GetNewQuests(Player); }
public void SetLevel(short level) { Level = level; Exp = 0; Session.Send(ExperiencePacket.ExpUp(0, Exp, 0)); Session.FieldManager.BroadcastPacket(LevelUpPacket.LevelUp(FieldPlayer.ObjectId, Level)); Session.FieldManager.BroadcastPacket(FieldObjectPacket.UpdateCharacterLevel(Player)); QuestHelper.GetNewQuests(Player); }
public void SetLevel(short level) { Level = level; Exp = 0; Player.Session.Send(ExperiencePacket.ExpUp(0, Exp, 0)); Player.Session.Send(ExperiencePacket.LevelUp(Player.Session.FieldPlayer, Level)); DatabaseManager.Update(this); QuestHelper.GetNewQuests(Player.Session, Level); }
public void OnSendExpServerHandler(IWorldClient client, ExperiencePacket packet) { if (client.Player.PlayerData.Authority == AuthorityType.GameMaster || client.Player.PlayerData.Authority == AuthorityType.Administrator) { _logger.LogTrace($"{client.Player.Object.Name} gives himself {packet.Experience} experience point."); _expSystem.GiveExeperience(client.Player, packet.Experience); } else { throw new ArgumentException($"{client.Player.Object.Name} cannot send to himself exp server while beeing {client.Player.PlayerData.Authority}."); } }
public bool LevelUp() { if (!ExpMetadataStorage.LevelExist((short)(Level + 1))) { return(false); } Level++; // TODO: Gain max HP and heal to max hp Player.StatPointDistribution.AddTotalStatPoints(5); Player.Session.Send(StatPointPacket.WriteTotalStatPoints(Player)); Player.Session.Send(ExperiencePacket.LevelUp(Player.Session.FieldPlayer, Level)); return(true); }
private void SendExperiencePacket(Skill skill, float experience, bool initialLoad) { ExperiencePacket experiencePacket = new ExperiencePacket() { Skill = (byte)skill, Level = _player.PlayerLevels[skill], Experience = experience, LevelProgress = ServerSkillManager.Instance.GetLevelProgressPercentage(_player.PlayerLevels[skill], PlayerExperiences[skill]), CurrentTotalExperience = PlayerExperiences[skill], NextLevelExpRequirement = ServerSkillManager.Instance.GetNextLevelExpRequirement(_player.PlayerLevels[skill]), Initial = initialLoad }; _player.AssociatedPeer.Send(ServerPacketHandler.Instance.WriteSerializable(PacketType.ExperienceGain, experiencePacket), DeliveryMethod.ReliableUnordered); }
public bool LevelUp() { if (!ExpMetadataStorage.LevelExist((short)(Level + 1))) { return(false); } Level++; Player.StatPointDistribution.AddTotalStatPoints(5); Player.Session.FieldManager.BroadcastPacket(ExperiencePacket.LevelUp(Player.Session.FieldPlayer, Level)); // TODO: Gain max HP Player.RecoverHp(Player.Stats[PlayerStatId.Hp].Max); Player.Session.Send(StatPointPacket.WriteTotalStatPoints(Player)); QuestHelper.GetNewQuests(Player.Session, Level); return(true); }
public bool LevelUp() { if (!ExpMetadataStorage.LevelExist((short)(Level + 1))) { return(false); } Level++; TrophyManager.OnLevelUp(Player); Player.Stats.AddBaseStats(Player); Player.FieldPlayer.RecoverHp(FieldPlayer.Stats[StatId.Hp].Bonus); Session.FieldManager.BroadcastPacket(ExperiencePacket.LevelUp(FieldPlayer.ObjectId, Level)); Session.Send(StatPacket.SetStats(FieldPlayer)); QuestHelper.GetNewQuests(Player); return(true); }
/// <summary> /// Gets a packet from the server and returns it. /// </summary> /// <returns>The received packet.</returns> public Packet GetPacket() { var packetID = (byte)_stream.ReadByte(); //_log.Debug("Got packet ID: " + packetID); // Spammy debug message if (!Enum.IsDefined(typeof(PacketType), (int)packetID)) { return(null); } var type = (PacketType)packetID; Packet pack = null; switch (type) { case PacketType.KeepAlive: pack = new KeepAlivePacket(_tools.ReadInt32()); break; case PacketType.LoginRequest: pack = new LoginRequestPacketSC { EntityID = _tools.ReadInt32(), NotUsed = _tools.ReadString(), LevelType = _tools.ReadString(), Gamemode = _tools.ReadInt32(), Dimension = _tools.ReadInt32(), Difficulty = _tools.ReadSignedByte(), WorldHeight = _tools.ReadByte(), // Not Used MaxPlayers = _tools.ReadByte() }; break; case PacketType.Handshake: pack = new HandshakePacketSC(_tools.ReadString()); break; case PacketType.ChatMessage: pack = new ChatMessagePacket(_tools.ReadString()); break; case PacketType.TimeUpdate: pack = new TimeUpdatePacket(_tools.ReadInt32()); break; case PacketType.EntityEquipment: pack = new EntityEquipmentPacket(_tools.ReadInt32(), _tools.ReadInt16(), _tools.ReadInt16(), _tools.ReadInt16()); break; case PacketType.SpawnPosition: pack = new SpawnPositionPacket(_tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32()); break; case PacketType.UseEntity: pack = new UseEntityPacket(_tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadBoolean()); break; case PacketType.UpdateHealth: pack = new UpdateHealthPacket(_tools.ReadInt16(), _tools.ReadInt16(), _tools.ReadSingle()); break; case PacketType.Respawn: pack = new RespawnPacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadInt16(), _tools.ReadString()); break; case PacketType.Player: pack = new PlayerPacket(_tools.ReadBoolean()); break; case PacketType.PlayerPosition: pack = new PlayerPositionPacket(_tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadBoolean()); break; case PacketType.PlayerLook: pack = new PlayerLookPacket(_tools.ReadSingle(), _tools.ReadSingle(), _tools.ReadBoolean()); break; case PacketType.PlayerPositionAndLook: pack = new PlayerPositionAndLookPacket(_tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadSingle(), _tools.ReadSingle(), _tools.ReadBoolean()); break; case PacketType.PlayerDigging: pack = new PlayerDiggingPacket(_tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadSignedByte()); break; case PacketType.PlayerBlockPlacement: pack = new PlayerBlockPlacementPacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSlotData()); break; case PacketType.UseBed: pack = new UseBedPacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32()); break; case PacketType.Animation: pack = new AnimationPacket(_tools.ReadInt32(), _tools.ReadSignedByte()); break; case PacketType.NamedEntitySpawn: pack = new NamedEntitySpawnPacket(_tools.ReadInt32(), _tools.ReadString(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadInt16()); break; case PacketType.PickupSpawn: pack = new PickupSpawnPacket(_tools.ReadInt32(), _tools.ReadInt16(), _tools.ReadSignedByte(), _tools.ReadInt16(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.CollectItem: pack = new CollectItemPacket(_tools.ReadInt32(), _tools.ReadInt32()); break; case PacketType.AddObjectVehicle: pack = new AddObjectVehiclePacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32()); var ftEid = _tools.ReadInt32(); ((AddObjectVehiclePacket)pack).FireballThrowerID = ftEid; if (ftEid > 0) { var aovpPack = (AddObjectVehiclePacket)pack; aovpPack.SpeedX = _tools.ReadInt16(); aovpPack.SpeedY = _tools.ReadInt16(); aovpPack.SpeedZ = _tools.ReadInt16(); pack = aovpPack; } break; case PacketType.HoldingChange: pack = new HoldingChangePacket(_tools.ReadInt16()); break; case PacketType.MobSpawn: pack = new MobSpawnPacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadEntityMetadata()); break; case PacketType.EntityPainting: pack = new EntityPaintingPacket(_tools.ReadInt32(), _tools.ReadString(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32()); break; case PacketType.ExperienceOrb: pack = new ExperienceOrbPacket(_tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt16()); break; case PacketType.EntityVelocity: pack = new EntityVelocityPacket(_tools.ReadInt32(), _tools.ReadInt16(), _tools.ReadInt16(), _tools.ReadInt16()); break; case PacketType.DestroyEntity: pack = new DestroyEntityPacket(_tools.ReadInt32()); break; case PacketType.Entity: pack = new EntityPacket(_tools.ReadInt32()); break; case PacketType.EntityRelativeMove: pack = new EntityRelativeMovePacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.EntityLook: pack = new EntityLookPacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.EntityLookAndRelativeMove: pack = new EntityLookAndRelativeMovePacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.EntityTeleport: pack = new EntityTeleportPacket(_tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.EntityHeadLook: pack = new EntityHeadLookPacket(_tools.ReadInt32(), _tools.ReadSignedByte()); break; case PacketType.EntityStatus: pack = new EntityStatusPacket(_tools.ReadInt32(), _tools.ReadSignedByte()); break; case PacketType.AttachEntity: pack = new AttachEntityPacket(_tools.ReadInt32(), _tools.ReadInt32()); break; case PacketType.EntityMetadata: var entityMetadataPacket = new EntityMetadataPacket(_tools.ReadInt32()); var metaData = new List <sbyte>(); var b = true; while (b) { var value = _tools.ReadSignedByte(); if (value == 127) { b = false; } metaData.Add(value); } entityMetadataPacket.Metadata = metaData.ToArray(); break; case PacketType.EntityEffect: pack = new EntityEffectPacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadInt16()); break; case PacketType.RemoveEntityEffect: pack = new RemoveEntityEffectPacket(_tools.ReadInt32(), _tools.ReadSignedByte()); break; case PacketType.Experience: pack = new ExperiencePacket(_tools.ReadSingle(), _tools.ReadInt16(), _tools.ReadInt16()); break; case PacketType.PreChunk: pack = new PreChunkPacket(_tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadBoolean()); break; case PacketType.MapChunk: var mapChunkPacket = new MapChunkPacket(_tools.ReadInt32(), _tools.ReadInt16(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); mapChunkPacket.CompressedSize = _tools.ReadInt32(); mapChunkPacket.CompressedData = _tools.ReadSignedBytes(mapChunkPacket.CompressedSize); pack = mapChunkPacket; break; case PacketType.MultiBlockChange: var multiBlockChangePacket = new MultiBlockChangePacket(_tools.ReadInt32(), _tools.ReadInt32()); var arraySize = _tools.ReadInt16(); multiBlockChangePacket.ArraySize = arraySize; var coordinates = new short[arraySize, 3]; for (short i = 0; i < arraySize; i++) { coordinates[i, 0] = _tools.ReadInt16(); coordinates[i, 1] = _tools.ReadInt16(); coordinates[i, 2] = _tools.ReadInt16(); } multiBlockChangePacket.Coordinates = coordinates; var types = new sbyte[arraySize]; for (short i = 0; i < arraySize; i++) { types[i] = _tools.ReadSignedByte(); } multiBlockChangePacket.Types = types; var metadata = new sbyte[arraySize]; for (short i = 0; i < arraySize; i++) { metadata[i] = _tools.ReadSignedByte(); } multiBlockChangePacket.Metadata = metadata; pack = multiBlockChangePacket; break; case PacketType.BlockChange: pack = new BlockChangePacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.BlockAction: pack = new BlockActionPacket(_tools.ReadInt32(), _tools.ReadInt16(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.Explosion: var explosionPacket = new ExplosionPacket(_tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadSingle()); var recordCount = _tools.ReadInt32(); explosionPacket.Count = recordCount; var records = new sbyte[recordCount, 3]; for (var i = 0; i < recordCount; i++) { records[i, 0] = _tools.ReadSignedByte(); records[i, 1] = _tools.ReadSignedByte(); records[i, 2] = _tools.ReadSignedByte(); } explosionPacket.Records = records; pack = explosionPacket; break; case PacketType.SoundParticleEffect: pack = new SoundParticleEffectPacket(_tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadInt32()); break; case PacketType.NewInvalidState: pack = new NewInvalidStatePacket(_tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.Thunderbolt: pack = new ThunderboltPacket(_tools.ReadInt32(), _tools.ReadBoolean(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32()); break; case PacketType.OpenWindow: pack = new OpenWindowPacket(_tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadString(), _tools.ReadSignedByte()); break; case PacketType.CloseWindow: pack = new CloseWindowPacket(_tools.ReadSignedByte()); break; case PacketType.SetSlot: pack = new SetSlotPacket(_tools.ReadSignedByte(), _tools.ReadInt16(), _tools.ReadSlotData()); break; case PacketType.WindowItems: var windowItemsPacket = new WindowItemsPacket(_tools.ReadSignedByte()); var count = _tools.ReadInt16(); windowItemsPacket.Count = count; var slotData = new SlotData[count]; for (short i = 0; i < count; i++) { slotData[i] = _tools.ReadSlotData(); } windowItemsPacket.SlotData = slotData; pack = windowItemsPacket; break; case PacketType.UpdateWindowProperty: pack = new UpdateWindowPropertyPacket(_tools.ReadSignedByte(), _tools.ReadInt16(), _tools.ReadInt16()); break; case PacketType.Transaction: pack = new TransactionPacket(_tools.ReadSignedByte(), _tools.ReadInt16(), _tools.ReadBoolean()); break; case PacketType.CreativeInventoryAction: pack = new CreativeInventoryActionPacket(_tools.ReadInt16(), _tools.ReadSlotData()); break; case PacketType.UpdateSign: pack = new UpdateSignPacket(_tools.ReadInt32(), _tools.ReadInt16(), _tools.ReadInt32(), _tools.ReadString(), _tools.ReadString(), _tools.ReadString(), _tools.ReadString()); break; case PacketType.ItemData: pack = new ItemDataPacket(_tools.ReadInt16(), _tools.ReadInt16()); byte len = _tools.ReadByte(); ((ItemDataPacket)pack).Length = len; ((ItemDataPacket)pack).Text = _tools.ReadSignedBytes(len); break; case PacketType.IncrementStatistic: pack = new IncrementStatisticPacket(_tools.ReadInt32(), _tools.ReadSignedByte()); break; case PacketType.PlayerListItem: pack = new PlayerListItemPacket(_tools.ReadString(), _tools.ReadBoolean(), _tools.ReadInt16()); break; case PacketType.PluginMessage: pack = new PluginMessagePacket(_tools.ReadString()); var length = _tools.ReadInt16(); ((PluginMessagePacket)pack).Length = length; ((PluginMessagePacket)pack).Data = _tools.ReadSignedBytes(length); break; case PacketType.DisconnectKick: pack = new DisconnectKickPacket(_tools.ReadString()); break; } return(pack); }