public void ChangeLocation(Player player, int prevLocation, int newLocation) { PacketStream stream = new PacketStream(0x0385); stream.WriteInt32(prevLocation); stream.WriteInt32(newLocation); ClientManager.Instance.Send(player, stream, BroadcastArea.Self); }
/// <summary> /// Sends the list of characters /// </summary> /// <param name="client"></param> /// <param name="charList"></param> public void CharacterList(Player client, LobbyCharacterInfo[] charList, ushort lastLoginIndex) { PacketStream stream = new PacketStream(0x07D4); stream.WriteUInt32(0); // currentSvTime stream.WriteUInt16(lastLoginIndex); stream.WriteUInt16((ushort)charList.Length); for (int i = 0; i < charList.Length; i++) { stream.WriteInt32(charList[i].ModelInfo.Sex); stream.WriteInt32(charList[i].ModelInfo.Race); for (int j = 0; j < 5; j++) stream.WriteInt32(charList[i].ModelInfo.ModelId[j]); stream.WriteInt32(charList[i].ModelInfo.TextureId); for (int j = 0; j < 24; j++) stream.WriteInt32(charList[i].ModelInfo.WearInfo[j]); stream.WriteInt32(charList[i].Level); stream.WriteInt32(charList[i].Job); stream.WriteInt32(charList[i].JobLevel); stream.WriteInt32(charList[i].ExpPercentage); stream.WriteInt32(charList[i].Hp); stream.WriteInt32(charList[i].Mp); stream.WriteInt32(charList[i].Permission); stream.WriteBool(charList[i].IsBanned); stream.WriteString(charList[i].Name, 19); stream.WriteUInt32(charList[i].SkinColor); stream.WriteString(charList[i].CreateTime, 30); stream.WriteString(charList[i].DeleteTime, 30); for (int j = 0; j < 24; j++) stream.WriteInt32(charList[i].WearItemEnhanceInfo[j]); for (int j = 0; j < 24; j++) stream.WriteInt32(charList[i].WearItemLevelInfo[j]); for (int j = 0; j < 24; j++) stream.WriteByte(charList[i].WearItemElementalType[j]); } ClientManager.Instance.Send(client, stream, BroadcastArea.Self); }
internal void LoginResult(Player player) { PacketStream stream = new PacketStream(0x0004); stream.WriteByte(1); stream.WriteUInt32(player.Handle); stream.WriteSingle(168344f);//player.Position.X); stream.WriteSingle(55400f);//player.Position.Y); stream.WriteSingle(player.Position.Z); stream.WriteByte(1);//player.Position.Layer); stream.WriteSingle(0f); // TODO : face_direction stream.WriteInt32(Globals.RegionSize); stream.WriteInt32(100);//player.Hp); stream.WriteInt16(100);//player.Mp); stream.WriteInt32(100);//player.MaxHp); stream.WriteInt16(100);// player.MaxMp); stream.WriteInt32(player.Havoc); stream.WriteInt32(Globals.MaxHavoc); // TODO : Is this constant? stream.WriteInt32(player.Sex); stream.WriteInt32(player.Race); stream.WriteUInt32(player.SkinColor); stream.WriteInt32(player.FaceId); stream.WriteInt32(player.HairId); stream.WriteString(player.Name, 19); stream.WriteInt32(Globals.CellSize); stream.WriteInt32(player.GuildId); ClientManager.Instance.Send(player, stream, BroadcastArea.Self); }
internal void WearInfo(Player player, uint[] wearInfo) { PacketStream stream = new PacketStream(0x00CA); int maxWear = (int)Wear.Max; List<int> enhance = new List<int>(maxWear); List<int> level = new List<int>(maxWear); List<byte> type = new List<byte>(maxWear); stream.WriteUInt32(player.Handle); for (int i = 0; i < maxWear; i++) { Item item = (Item)GObjectManager.Instance.Get(ObjectType.Item, wearInfo[i]); if (item != null) { // If there's an item equipped in this slot enhance.Add(item.Enhance); level.Add(item.Level); type.Add((byte)item.ElementalEffectType); stream.WriteInt32(item.Code); } else { enhance.Add(0); level.Add(0); type.Add(0); // If nothing is equipped in the slot, and slot is armor, // hands or feet, sends body part id switch (i) { case 2: stream.WriteInt32(player.BodyId); break; case 3: stream.WriteInt32(player.HandsId); break; case 4: stream.WriteInt32(player.FeetId); break; default: stream.WriteInt32(0); break; } } } for (int i = 0; i < maxWear; i++) stream.WriteInt32(enhance[i]); for (int i = 0; i < maxWear; i++) stream.WriteInt32(level[i]); for (int i = 0; i < maxWear; i++) stream.WriteByte(type[i]); ClientManager.Instance.Send(player, stream, BroadcastArea.Self); }
/// <summary> /// Informs about changes in what target is wearing /// </summary> /// <param name="itemHandle"></param> /// <param name="position"></param> /// <param name="targetHandle"></param> /// <param name="enhance"></param> /// <param name="elementalEffectType"></param> internal void ItemWearInfo(Player player, uint itemHandle, short position, uint targetHandle, int enhance, short elementalEffectType) { PacketStream stream = new PacketStream(0x011f); stream.WriteUInt32(itemHandle); stream.WriteInt16(position); stream.WriteUInt32(targetHandle); stream.WriteInt32(enhance); stream.WriteByte((byte)elementalEffectType); ClientManager.Instance.Send(player, stream, BroadcastArea.Self); }
internal void LevelUpdate(Player player, int level, int jobLevel) { PacketStream stream = new PacketStream(0x03EA); stream.WriteUInt32(player.Handle); stream.WriteInt32(level); stream.WriteInt32(jobLevel); ClientManager.Instance.Send(player, stream, BroadcastArea.Self); }
internal void InventoryList(Player player, List<uint> inventory) { PacketStream stream = new PacketStream(0x00CF); stream.WriteUInt16((ushort)inventory.Count); for (int i = 0; i < inventory.Count; i++) { Item item = (Item) GObjectManager.Instance.Get(ObjectType.Item, inventory[i]); // TS_ITEM_BASE_INFO stream.WriteUInt32(item.Handle); stream.WriteInt32(item.Code); stream.WriteInt64(item.UId); stream.WriteInt64(item.Count); stream.WriteInt32(item.Durability); stream.WriteUInt32(item.Endurance); stream.WriteByte((byte)item.Enhance); stream.WriteByte((byte)item.Level); stream.WriteInt32(item.Flag); stream.WriteInt32(item.Socket[0]); stream.WriteInt32(item.Socket[1]); stream.WriteInt32(item.Socket[2]); stream.WriteInt32(item.Socket[3]); stream.WriteInt32(item.RemainTime); stream.WriteByte((byte)item.ElementalEffectType); stream.WriteInt32(0); // TODO : elemental_effect_remain_time stream.WriteInt32(item.ElementalEffectAttackPoint); stream.WriteInt32(item.ElementalEffectMagicPoint); // TS_ITEM_INFO stream.WriteInt16((short)item.WearInfo); stream.WriteUInt32(0); // TODO : own_summon_handle stream.WriteInt32(i); // TODO : index } ClientManager.Instance.Send(player, stream, BroadcastArea.Self); }
internal void GoldUpdate(Player player, long gold, int chaos) { PacketStream stream = new PacketStream(0x03E9); stream.WriteInt64(gold); stream.WriteInt32(chaos); ClientManager.Instance.Send(player, stream, BroadcastArea.Self); }
internal void ExpUpdate(Player player, long exp, int jp) { PacketStream stream = new PacketStream(0x03EB); stream.WriteUInt32(player.Handle); stream.WriteInt64(exp); stream.WriteInt32(jp); ClientManager.Instance.Send(player, stream, BroadcastArea.Self); }
/// <summary> /// Sends the result of a packet /// </summary> /// <param name="client"></param> /// <param name="packetId"></param> /// <param name="response"></param> /// <param name="value"></param> public void Result(Player client, ushort packetId, ushort response = 0, int value = 0) { PacketStream stream = new PacketStream(0x0000); stream.WriteUInt16(packetId); stream.WriteUInt16(response); stream.WriteInt32(value); ClientManager.Instance.Send(client, stream, BroadcastArea.Self); }
public void QuestList(Player player) { // TODO : Quest List PacketStream stream = new PacketStream(0x0258); stream.WriteUInt16(0); // count_active stream.WriteUInt16(0); // count_pending for (int i = 0; i < 1; i++) // count_active { stream.WriteInt32(0); // code for (int j = 0; i < 6; i++) // nRandomValue { stream.WriteInt32(0); } for (int j = 0; i < 6; i++) // nStatus { stream.WriteInt32(0); } stream.WriteByte(0); // nProgress stream.WriteUInt32(0); // nTimeLimit } for (int i = 0; i < 1; i++) // count_pending { stream.WriteInt32(0); // code stream.WriteInt32(0); // nStartID } ClientManager.Instance.Send(player, stream, BroadcastArea.Self); }