/// <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 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 Move(Player player) { PacketStream stream = new PacketStream(0x0008); stream.WriteUInt32(Globals.GetTime()); stream.WriteUInt32(player.Handle); stream.WriteByte(player.Position.Layer); stream.WriteByte(11); // speed stream.WriteUInt16((ushort)player.PositionsToMove.Count); for (int i = 0; i < player.PositionsToMove.Count; ++i) { stream.WriteSingle(player.PositionsToMove[i].X); stream.WriteSingle(player.PositionsToMove[i].Y); } ClientManager.Instance.Send(player, stream, BroadcastArea.Self); }
/* TODO : add struct // 0x0258 struct TS_SC_QUEST_LIST { TS_MESSAGE baseclass_0; unsigned __int16 count_active; unsigned __int16 count_pending; //TS_SC_QUEST_LIST::TS_QUEST_INFO actives[count_active]; //TS_SC_QUEST_LIST::TS_PENDING_QUEST_INFO pendings[count_pending]; }; struct TS_SC_QUEST_LIST::TS_QUEST_INFO { int code; int nStartID; int nRandomValue[6]; int nStatus[6]; char nProgress; unsigned int nTimeLimit; }; struct TS_SC_QUEST_LIST::TS_PENDING_QUEST_INFO { int code; int nStartID; };*/ internal void Chat(Player player, string sender, byte type, string message) { PacketStream stream = new PacketStream(0x0016); stream.WriteString(sender, 21); stream.WriteUInt16((ushort)message.Length); stream.WriteByte(type); stream.WriteString(message, message.Length+1); ClientManager.Instance.Send(player, stream, BroadcastArea.Self); }
public void WeatherInfo(Player player, uint regionId, ushort weatherId) { PacketStream stream = new PacketStream(0x0386); stream.WriteUInt32(regionId); stream.WriteUInt16(weatherId); ClientManager.Instance.Send(player, stream, BroadcastArea.Self); }
/// <summary> /// Sends a list of URLs /// </summary> /// <param name="client"></param> public void UrlList(Player player) { PacketStream stream = new PacketStream(0x2329); stream.WriteUInt16((ushort)Server.UrlList.Length); stream.WriteString(Server.UrlList); 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); }