public void SendAbilityDone(ushort TargetOID) { Log.Success("Ability", "Send Done :" + Info.Entry); Player player = this.Caster.GetPlayer(); PacketOut Out1 = new PacketOut((byte)Opcodes.F_USE_ABILITY); Out1.WriteUInt16(0); Out1.WriteUInt16(Info.Entry); Out1.WriteUInt16(Caster.Oid); Out1.WriteHexStringBytes("061022730601000001E601000000"); player.DispatchPacket(Out1, true); PacketOut Out2 = new PacketOut((byte)Opcodes.F_USE_ABILITY); Out2.WriteUInt16(0); Out2.WriteUInt16(Info.Entry); Out2.WriteUInt16(Caster.Oid); Out2.WriteHexStringBytes("0610227302010000000001000000"); player.DispatchPacket(Out2, true); PacketOut Out3 = new PacketOut((byte)Opcodes.F_SWITCH_ATTACK_MODE); Out3.WriteByte(1); Out3.Fill(0, 3); player.SendPacket(Out3); PacketOut Out4 = new PacketOut((byte)Opcodes.F_SET_ABILITY_TIMER); Out4.WriteUInt16(Info.Entry); Out4.Fill(0, 10); player.SendPacket(Out4); }
public void SendMount(Player Plr) { PacketOut Out = new PacketOut((byte)Opcodes.F_MOUNT_UPDATE); Out.WriteUInt16(Owner.Oid); if (CurrentMountInfo == null) Out.WriteUInt32(0); else Out.WriteUInt32(CurrentMountInfo.Entry); Out.Fill(0, 14); if (Plr == null) Owner.DispatchPacket(Out, true); else Plr.SendPacket(Out); }
public void SendTradeInfo(ItemsInterface DistInterface) { PacketOut Out = new PacketOut((byte)Opcodes.F_TRADE_STATUS); Out.WriteByte(DistInterface.TradingAccepted); Out.WriteByte(0); Out.WriteUInt16(DistInterface != this ? DistInterface._Owner.Oid : (ushort)0); if (DistInterface.TradingAccepted == 2) Out.Fill(0, 24); else { Out.WriteUInt32(DistInterface.TradingMoney); Out.WriteByte(TradingUpdate); Out.Fill(0, 2 * MAX_TRADE_SLOT); } _Owner.GetPlayer().SendPacket(Out); }
static public void F_DELETE_CHARACTER(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; byte Slot = packet.GetUint8(); if (cclient._Account == null) { cclient.Disconnect(); return; } CharMgr.RemoveCharacter(Slot, cclient._Account.AccountId); PacketOut Out = new PacketOut((byte)Opcodes.F_SEND_CHARACTER_RESPONSE); Out.FillString(cclient._Account.Username, 21); Out.Fill(0, 3); cclient.SendPacket(Out); }
public void SendInited() { PacketOut Out = new PacketOut((byte)Opcodes.S_PLAYER_INITTED); Out.WriteUInt16(_ObjectId); Out.WriteUInt16(0); Out.WriteUInt32((uint)_Info.CharacterId); Out.WriteUInt16((ushort)_Value.WorldZ); Out.WriteUInt16(0); Out.WriteUInt32((uint)_Value.WorldX); Out.WriteUInt32((uint)_Value.WorldY); Out.WriteUInt16((ushort)_Value.WorldO); Out.WriteByte(0); Out.WriteByte((byte)Realm); Out.Fill(0, 5); // ?? Out.WriteByte((byte)Zone.Info.Region); Out.WriteUInt16(1); Out.WriteByte(0); Out.WriteByte(_Info.Career); Out.Fill(0, 6); Out.WritePascalString(Program.Rm.Name); Out.Fill(0, 3); SendPacket(Out); /* PacketOut Out = new PacketOut((byte)Opcodes.S_PLAYER_INITTED); Out.WriteHexStringBytes("00CA00000028D5BF1D7F0000000CF824000CAFC7051700020000000000080001001A000000000000084261646C616E6473000000"); SendPacket(Out); */ }
static public void BuildItem(ref PacketOut Out,Item Itm,Item_Info Info,ushort SlotId,ushort Count) { SlotId = SlotId == 0 ? (Itm == null ? SlotId : Itm.SlotId ) : SlotId; Count = Count == 0 ? (Itm == null ? Count : Itm.Count) : Count; Info = Info == null ? (Itm == null ? null : Itm.Info) : Info; if(SlotId != 0) Out.WriteUInt16(SlotId); Out.WriteByte(0); Out.WriteUInt32((uint)(Info != null ? Info.Entry : 0)); if (Info == null) return; Out.WriteUInt16((ushort)Info.ModelId); // Valid 1.4.8 Out.Fill(0, 7); // Valid 1.4.8 Out.WriteUInt16(Info.SlotId); // Valid 1.4.8 Out.WriteByte(Info.Type); // Valid 1.4.8 Out.WriteByte(Info.MinRank); // Min Level Out.WriteByte(Info.ObjectLevel); // 1.3.5, Object Level Out.WriteByte(Info.MinRenown); // 1.3.5, Min Renown Out.WriteByte(Info.MinRenown); // ? Out.WriteByte(Info.UniqueEquiped); // Unique - Equiped Out.WriteByte(Info.Rarity); Out.WriteByte(Info.Bind); Out.WriteByte(Info.Race); // Trophys have some extra bytes if (Info.Type == (byte)GameData.ItemTypes.ITEMTYPES_TROPHY) { Out.WriteUInt32(0); Out.WriteUInt16(0x0080); } Out.WriteUInt32(Info.Career); Out.WriteUInt32(0); Out.WriteUInt32(Info.SellPrice); Out.WriteUInt16((UInt16)(Count > 0 ? Count : 1)); Out.WriteUInt16((UInt16)(Count > 0 ? Count : 1)); Out.WriteUInt32(0); Out.WriteUInt32(Info.Skills); // Valid 1.4.8 Out.WriteUInt16(Info.Dps > 0 ? Info.Dps : Info.Armor); // Valid 1.4.8 Out.WriteUInt16(Info.Speed); // Valid 1.4.8 Out.WritePascalString(Info.Name); // Valid 1.4.8 Out.WriteByte((byte)Info._Stats.Count); // Valid 1.4.8 foreach (KeyValuePair<byte, UInt16> Key in Info._Stats) { Out.WriteByte(Key.Key); Out.WriteUInt16(Key.Value); Out.Fill(0, 5); } Out.WriteByte(0); // Equip Effects Out.WriteByte((byte)Info._Spells.Count); // OK foreach (KeyValuePair<UInt32, UInt32> Kp in Info._Spells) { Out.WriteUInt32(Kp.Key); Out.WriteUInt32(Kp.Value); } // (uint32)Entry, uint16 X, uint16 Y Out.WriteByte((byte)Info._Crafts.Count); // OK foreach (KeyValuePair<byte, ushort> Kp in Info._Crafts) { Out.WriteByte(Kp.Key); Out.WriteUInt16(Kp.Value); } Out.WriteByte(0); // ?? Out.WriteByte(Info.TalismanSlots); Item_Info TalismanInfo = null; for (int i = 0; i < Info.TalismanSlots; ++i) { if (Itm != null) TalismanInfo = Itm.GetTalisman((byte)i); if (TalismanInfo == null) Out.WriteUInt32(0); // Entry; else { Out.WriteUInt32(TalismanInfo.Entry); Out.WritePascalString(TalismanInfo.Name); Out.Fill(0, 15); } } Out.WritePascalString(Info.Description); Out.Write(Info.Unk27); /*Out.WriteByte(0); Out.WriteByte(0); Out.WriteByte(0); Out.WriteByte(0); Out.WriteUInt16(0x0302); Out.Fill(0, 8); Out.WriteByte(0); // Type , Culture, etc etc Out.WriteByte(0); // Type, Recipian , Soil , etc etc Out.Fill(0, 11);*/ }
public override void SendMeTo(Player Plr) { //Log.Success("Creature", "SendMe " + Name); PacketOut Out = new PacketOut((byte)Opcodes.F_CREATE_MONSTER); Out.WriteUInt16(Oid); Out.WriteUInt16(0); Out.WriteUInt16((UInt16)Heading); Out.WriteUInt16((UInt16)WorldPosition.Z); Out.WriteUInt32((UInt32)WorldPosition.X); Out.WriteUInt32((UInt32)WorldPosition.Y); Out.WriteUInt16(0); // Speed Z // 18 Out.WriteUInt16(Spawn.Proto.Model1); Out.WriteByte((byte)Spawn.Proto.MinScale); Out.WriteByte(Level); Out.WriteByte(Faction); Out.Fill(0, 4); Out.WriteByte(Spawn.Emote); Out.WriteByte(0); // ? Out.WriteUInt16(Spawn.Proto._Unks[1]); Out.WriteByte(0); Out.WriteUInt16(Spawn.Proto._Unks[2]); Out.WriteUInt16(Spawn.Proto._Unks[3]); Out.WriteUInt16(Spawn.Proto._Unks[4]); Out.WriteUInt16(Spawn.Proto._Unks[5]); Out.WriteUInt16(Spawn.Proto._Unks[6]); Out.WriteUInt16(Spawn.Title); long TempPos = Out.Position; byte TempLen = (byte)(Spawn.bBytes.Length + States.Count); Out.WriteByte(TempLen); Out.Write(Spawn.bBytes, 0, Spawn.bBytes.Length); Out.Write(States.ToArray(), 0, States.Count); if (QtsInterface.CreatureHasStartQuest(Plr)) { Out.WriteByte(5); Out.Position = TempPos; Out.WriteByte((byte)(TempLen + 1)); } else if (QtsInterface.CreatureHasQuestToAchieve(Plr)) { Out.WriteByte(4); Out.Position = TempPos; Out.WriteByte((byte)(TempLen + 1)); } else if (QtsInterface.CreatureHasQuestToComplete(Plr)) { Out.WriteByte(7); Out.Position = TempPos; Out.WriteByte((byte)(TempLen + 1)); } Out.Position = Out.Length; Out.WriteByte(0); Out.WriteStringBytes(Name); Out.Fill(0, 48); Plr.SendPacket(Out); base.SendMeTo(Plr); }
private void SendItems(Player Plr, List<UInt16> Slots) { if (Slots.Count <= 0) return; PacketOut Out = new PacketOut((byte)Opcodes.F_GET_ITEM); Out.WriteByte((byte)Slots.Count); Out.Fill(0, 3); for (int i = 0; i < Slots.Count; ++i) Item.BuildItem(ref Out, GetItemInSlot(Slots[i]), null, Slots[i], 0); Plr.SendPacket(Out); }
private void SendItem(Player Plr, UInt16 Slot, Item_Info Info) { PacketOut Out = new PacketOut((byte)Opcodes.F_GET_ITEM); Out.WriteByte(1); Out.Fill(0, 3); Item.BuildItem(ref Out, null, Info, Slot, 1); Plr.SendPacket(Out); }
public void SendXp() { PacketOut Out = new PacketOut((byte)Opcodes.F_PLAYER_EXPERIENCE); Out.WriteUInt32(_Value.Xp); Out.WriteUInt32(CurrentXp != null ? CurrentXp.Xp : 0); Out.WriteUInt32(0); Out.WriteByte(_Value.Level); Out.Fill(0, 3); SendPacket(Out); }
public void SendStageInfo(Player Plr) { PacketOut Out = new PacketOut((byte)Opcodes.F_OBJECTIVE_UPDATE); Out.WriteUInt32(Info.Entry); Out.WriteByte(0); Out.Fill(0, 3); Plr.SendPacket(Out); }
public void SendSkills() { PacketOut Out = new PacketOut((byte)Opcodes.F_CHARACTER_INFO); Out.WriteByte(3); // Skills Out.Fill(0, 3); Out.WriteByte(_Info.CareerLine); Out.WriteByte(_Info.Race); Out.WriteUInt32R(_Value.Skills); Out.WriteUInt16(_Value.RallyPoint); SendPacket(Out); }
public void SendSwitchRegion(UInt16 ZoneID) { PacketOut Out = new PacketOut((byte)Opcodes.F_SWITCH_REGION); Out.WriteUInt16(ZoneID); Out.Fill(0, 5); Out.WriteByte(1); Out.WriteByte(1); Out.Fill(0, 11); SendPacket(Out); }
public void SendRenown() { PacketOut Out = new PacketOut((byte)Opcodes.F_PLAYER_RENOWN); Out.WriteUInt32(_Value.Renown); Out.WriteUInt32(CurrentRenown.Renown); Out.WriteByte(_Value.RenownRank); Out.Fill(0, 3); SendPacket(Out); }
public override void SendMeTo(Player Plr) { Log.Success("SendMeTo", "[" + Plr.Name + "] voit : " + Name); PacketOut Out = new PacketOut((byte)Opcodes.F_CREATE_PLAYER); Out.WriteUInt16((UInt16)_Client.Id); Out.WriteUInt16(Oid); Out.WriteUInt16(_Info.ModelId); Out.WriteUInt16(_Info.CareerLine); Out.WriteUInt16((UInt16)Z); Out.WriteUInt16(Zone.ZoneId); Out.WriteUInt16((UInt16)X); Out.WriteUInt16((UInt16)Y); Out.WriteUInt16(Heading); Out.WriteByte(_Value.Level); // Level Out.WriteByte(0); // Level Out.WriteByte(0); Out.WriteByte(Faction); Out.WriteByte(0); Out.WriteByte(Faction); Out.Write(_Info.bTraits, 0, _Info.bTraits.Length); Out.Fill(0, 12); Out.WriteByte(_Info.Race); Out.Fill(0, 11); Out.WritePascalString(_Info.Name); Out.WritePascalString(""); Out.WriteByte(0); Out.Fill(0, 4); Plr.SendPacket(Out); base.SendMeTo(Plr); }
public void SendMessage(UInt16 Oid, string NameSender, string Text, SystemData.ChatLogFilters Filter) { if (Text.IndexOf("<LINK") >= 0 && Text.IndexOf("ITEM:") > 0) { int Pos = Text.IndexOf("ITEM:")+5; int LastPos = Text.IndexOf(" ",Pos)-1; string Value = Text.Substring(Pos, LastPos-Pos); uint ItemId = uint.Parse(Value); Item_Info Info = WorldMgr.GetItem_Info(ItemId); if (Info != null) { } } PacketOut Out = new PacketOut((byte)Opcodes.F_CHAT); Out.WriteUInt16(Oid); Out.WriteByte((byte)Filter); Out.Fill(0, 4); Out.WritePascalString(NameSender); Out.WriteByte(0); Out.WritePascalString(Text); Out.WriteByte(0); SendPacket(Out); }
public void SendTradeClose(UInt16 Oid) { PacketOut Out = new PacketOut((byte)Opcodes.F_TRADE_STATUS); Out.WriteByte(3); Out.WriteByte(0); Out.WriteUInt16(Oid); Out.Fill(0, 24); _Owner.GetPlayer().SendPacket(Out); CloseTrade(); }
private void SendItems(Player Plr,UInt16[] Itms) { if (Itms.Length <= 0) return; PacketOut Out = new PacketOut((byte)Opcodes.F_GET_ITEM); Out.WriteByte((byte)Itms.Length); Out.Fill(0, 3); for (int i = 0; i < Itms.Length; ++i) Item.BuildItem(ref Out, GetItemInSlot(Itms[i]), null, Itms[i], 0); Plr.SendPacket(Out); }
private void SendBuffer(Player Plr,ref PacketOut Buffer,ref byte Count) { // On Envoi le Packet des items byte[] ArrayBuf = Buffer.ToArray(); PacketOut Packet = new PacketOut((byte)Opcodes.F_GET_ITEM); Packet.WriteByte(Count); Packet.Fill(0, 3); Packet.Write(ArrayBuf, 0, ArrayBuf.Length); Packet.WritePacketLength(); Plr.SendPacket(Packet); // On Remet le compteur a zero Count = 0; // On Initalise un nouveau buffer Buffer = new PacketOut(0); Buffer.Position = 0; }
public override void SendMeTo(Player Plr) { List<byte> TmpState = new List<byte>(); if (QtsInterface.CreatureHasStartQuest(Plr)) TmpState.Add(5); else if (QtsInterface.CreatureHasQuestToComplete(Plr)) TmpState.Add(7); PacketOut Out = new PacketOut((byte)Opcodes.F_CREATE_MONSTER); Out.WriteUInt16(Oid); Out.WriteUInt16(0); Out.WriteUInt16((UInt16)Heading); Out.WriteUInt16((UInt16)WorldPosition.Z); Out.WriteUInt32((UInt32)WorldPosition.X); Out.WriteUInt32((UInt32)WorldPosition.Y); Out.WriteUInt16(0); // Speed Z // 18 Out.WriteUInt16(Spawn.Proto.Model1); Out.WriteByte((byte)Spawn.Proto.MinScale); Out.WriteByte(Spawn.Proto.MinLevel); Out.WriteByte(Faction); Out.Fill(0, 4); Out.WriteByte(Spawn.Emote); Out.WriteByte(0); // ? Out.WriteUInt16(Spawn.Proto._Unks[1]); Out.WriteByte(0); Out.WriteUInt16(Spawn.Proto._Unks[2]); Out.WriteUInt16(Spawn.Proto._Unks[3]); Out.WriteUInt16(Spawn.Proto._Unks[4]); Out.WriteUInt16(Spawn.Proto._Unks[5]); Out.WriteUInt16(Spawn.Proto._Unks[6]); Out.WriteUInt16(Spawn.Title); Out.WriteByte((byte)(Spawn.bBytes.Length + States.Count + TmpState.Count)); Out.Write(Spawn.bBytes, 0, Spawn.bBytes.Length); Out.Write(States.ToArray(), 0, States.Count); Out.Write(TmpState.ToArray(), 0, TmpState.Count); Out.WriteByte(0); Out.WriteStringBytes(Name); Out.WriteByte(0); // ? Out.WriteByte(1); // ? Out.WriteByte(10); // ? Out.WriteByte(0); // ? Out.WriteUInt16(0); // ? Out.WriteByte(Spawn.Icone); Out.WriteByte((byte)Spawn.Proto._Unks[0]); Out.WriteByte(0); Out.Fill(0, 8); // Flags; Out.WriteByte(100); // Health % Out.WriteUInt16(Zone.ZoneId); Out.Fill(0, 48); Plr.SendPacket(Out); base.SendMeTo(Plr); }
private void SendItems(Player Plr, UInt16 Slot) { PacketOut Out = new PacketOut((byte)Opcodes.F_GET_ITEM); Out.WriteByte(1); Out.Fill(0, 3); Item.BuildItem(ref Out, GetItemInSlot(Slot), null, Slot, 0); Plr.SendPacket(Out); }
public static void BuildItem(ref PacketOut Out,Item Itm,Item_Info Info,ushort SlotId,ushort Count) { SlotId = SlotId == 0 ? (Itm == null ? SlotId : Itm.SlotId ) : SlotId; Count = Count == 0 ? (Itm == null ? Count : Itm.Count) : Count; Info = Info == null ? (Itm == null ? null : Itm.Info) : Info; if(SlotId != 0) Out.WriteUInt16(SlotId); Out.WriteByte(0); Out.WriteUInt32((uint)(Info != null ? Info.Entry : 0)); if (Info == null) return; Out.WriteUInt16((ushort)Info.ModelId); Out.Fill(0, 7); Out.WriteUInt16(Info.SlotId); Out.WriteByte(Info.Type); Out.WriteByte(Info.MinRank); Out.WriteByte((byte)(Info.MinRank + 1)); // 1.3.5 Out.WriteByte(Info.MinRenown); // 1.3.5 Out.WriteByte(Info.MinRenown); Out.WriteByte(Info.MinRenown); Out.WriteByte(Info.Rarity); Out.WriteByte(Info.Bind); Out.WriteByte(Info.Race); Out.WriteUInt32(Info.Career); Out.WriteUInt32(0); Out.WriteUInt32(Info.SellPrice); Out.WriteUInt16((UInt16)(Count > 0 ? Count : 1)); Out.WriteUInt16((UInt16)(Count > 0 ? Count : 1)); Out.WriteUInt32(0); Out.WriteUInt32(Info.Skills); Out.WriteUInt16(Info.Dps > 0 ? Info.Dps : Info.Armor); Out.WriteUInt16(Info.Speed); Out.WritePascalString(Info.Name); Out.WriteByte((byte)Info._Stats.Count); foreach (KeyValuePair<byte, UInt16> Key in Info._Stats) { Out.WriteByte(Key.Key); Out.WriteUInt16(Key.Value); Out.Fill(0, 5); } Out.WriteByte(0); Out.WriteByte(0); // SpellCounts // (uint32)Entry, uint16 X, uint16 Y Out.WriteByte(0); // Artisana Info , 3 bytes pour chaque artisana Out.WriteByte(0); Out.WriteByte(Info.TalismanSlots); for (int i = 0; i < Info.TalismanSlots; ++i) Out.WriteUInt32(0); // Entry; Out.WritePascalString(Info.Description); Out.WriteByte(0); Out.WriteByte(0); Out.WriteByte(0); Out.WriteByte(0); Out.WriteUInt16(0x0302); Out.Fill(0, 8); Out.WriteByte(0); // Type , Culture, etc etc Out.WriteByte(0); // Type, Recipian , Soil , etc etc Out.Fill(0, 11); }
private void SendItems(Player Plr, UInt16 To, UInt16 From) { PacketOut Out = new PacketOut((byte)Opcodes.F_GET_ITEM); Out.WriteByte(2); Out.Fill(0, 3); Item.BuildItem(ref Out, GetItemInSlot(To), null, To, 0); Item.BuildItem(ref Out, GetItemInSlot(From), null, From, 0); Plr.SendPacket(Out); }
public void SendStartCasting(ushort TargetOID) { PacketOut Out1 = new PacketOut((byte)Opcodes.F_UPDATE_STATE); Out1.WriteUInt16(TargetOID); Out1.WriteByte(0x1A); Out1.Fill(0, 7); Caster.DispatchPacket(Out1, true); if (Info.CastTime == 0) return; PacketOut Out2 = new PacketOut((byte)Opcodes.F_USE_ABILITY); Out2.WriteUInt16(0); Out2.WriteUInt16(Info.Entry); Out2.WriteUInt16(Caster.Oid); Out2.WriteByte(0x06); Out2.WriteByte(0x10); Out2.WriteUInt16(0x2273); Out2.WriteUInt32(0x1010000); Out2.WriteUInt16((ushort)this.Info.CastTime); Out2.WriteByte(1); Out2.Fill(0, 3); Caster.GetPlayer().DispatchPacket(Out2, true); }
public override void SendMeTo(Player Plr) { PacketOut Out = new PacketOut((byte)Opcodes.F_CREATE_STATIC); Out.WriteUInt16(Oid); Out.WriteUInt16(0); Out.WriteUInt16((UInt16)Spawn.WorldO); Out.WriteUInt16((UInt16)Spawn.WorldZ); Out.WriteUInt32((UInt32)Spawn.WorldX); Out.WriteUInt32((UInt32)Spawn.WorldY); Out.WriteUInt16((ushort)Spawn.DisplayID); Out.WriteUInt16(Spawn.Proto.GetUnk(0)); Out.WriteUInt16(Spawn.Proto.GetUnk(1)); Out.WriteUInt16(Spawn.Proto.GetUnk(2)); Out.WriteByte(0); Out.WriteUInt16(Spawn.Proto.GetUnk(3)); Out.Fill(0, 5); Out.WriteUInt16(Spawn.Proto.GetUnk(4)); Out.WriteUInt16(Spawn.Proto.GetUnk(5)); Out.WriteUInt32(0); Out.WritePascalString(Name); Out.WriteByte(0); Plr.SendPacket(Out); base.SendMeTo(Plr); }
public void Update() { Log.Debug("Group", "Updating Group"); if (Leader == null || Members.Count < 1 || (Members.Count == 1 && Leader == Members.First())) { Delete(); return; } PacketOut Out = new PacketOut((byte)Opcodes.F_CHARACTER_INFO); Out.WriteUInt16(0x0602); // Group info Out.WriteUInt16(0xB536); // Group id Out.WriteByte((byte)Members.Count); foreach (Player Plr in Members) { Out.WriteUInt32(0xA8BF3B0C); Out.WriteByte((byte)Plr._Info.ModelId); Out.WriteByte((byte)Plr._Info.Race); Out.WriteByte((byte)Plr.Level); Out.WriteUInt16((ushort)Plr._Info.CareerLine); Out.WriteByte(1); Out.WriteByte(0); // Will be 1 for at least one member. Perhaps Leader? Out.WriteByte(0); Out.WriteByte(1); // Online = 1, Offline = 0 Out.WriteByte((byte)Plr.Name.Length); Out.Fill(0, 3); Out.WriteStringBytes(Plr.Name); Out.WriteByte(0); // Name length. Pet? Target? Out.Fill(0, 3); //Out.WriteStringBytes(Pet name? Target?); Out.WriteByte(0x8B); Out.WriteUInt16R((ushort)650); // X ? Out.WriteByte(0xD3); Out.WriteUInt16R((ushort)650); // y ? byte[] data = { 0xC8, 0x50, 0x27, 0x25, 0x05, 0x40, 0x01, 0x02 }; Out.Write(data); Out.WriteByte((byte)(Plr._Value.ZoneId*2)); Out.WriteByte(1); Out.WriteByte(1); Out.WriteByte((byte)Plr.PctHealth); Out.WriteByte((byte)Plr.PctAp); // action points Out.WriteByte(0); } SendToGroup(Out); }
public static void SendVendorPage(Player Plr, ref List<Creature_vendor> Vendors, byte Count,byte Page) { Count = (byte)Math.Min(Count, Vendors.Count); Log.Success("SendVendorPage", "Count=" + Count + ",Page=" + Page + ",ItmC=" + Vendors.Count); PacketOut Out = new PacketOut((byte)Opcodes.F_INIT_STORE); Out.WriteByte(3); Out.WriteByte(0); Out.WriteByte(Page); Out.WriteByte(Count); Out.WriteByte((byte)(Page > 0 ? 0 : 1)); Out.WriteByte(1); Out.WriteUInt16(0); for (byte i = 0; i < Count; ++i) { Out.WriteByte(i); Out.WriteByte(3); // sometimes 1 Out.WriteUInt32(Vendors[i].Price); Item.BuildItem(ref Out, null, Vendors[i].Info, 0, 1); Out.WriteByte((byte)Vendors[i].ItemsReqInfo.Count); // ReqItemSize foreach (KeyValuePair<UInt16, Item_Info> Kp in Vendors[i].ItemsReqInfo) { Out.WriteUInt32(Kp.Value.Entry); Out.WriteUInt16((UInt16)Kp.Value.ModelId); Out.WritePascalString(Kp.Value.Name); Out.WriteUInt16(Kp.Key); Out.Fill(0, 18); } } Out.WriteByte(0); Plr.SendPacket(Out); Vendors.RemoveRange(0, Count); }
public static byte[] BuildCharacters(int AccountId) { Log.Debug("BuildCharacters", "AcocuntId = " + AccountId); Character[] Chars = GetAccountChar(AccountId)._Chars; UInt16 Count = 0; // On Compte le nombre de personnages existant du joueur for (UInt16 c = 0; c < Chars.Length; ++c) if (Chars[c] != null) ++Count; PacketOut Out = new PacketOut(0); Out.Position = 0; Out.WriteByte(MAX_SLOT); Out.WriteUInt32(0xFF); Out.WriteByte(0x14); Character Char = null; for (int i = 0; i < MAX_SLOT; ++i) { Char = Chars[i]; if (Char == null) Out.Fill(0, 284); // 284 else { List<Character_item> Items = CharMgr.GetItemChar(Char.CharacterId); Out.FillString(Char.Name, 48); Out.WriteByte(Char.Value.Level); Out.WriteByte(Char.Career); Out.WriteByte(Char.Realm); Out.WriteByte(Char.Sex); Out.WriteByte(Char.ModelId); Out.WriteUInt16(Char.Value.ZoneId); Out.Fill(0, 5); Character_item Item = null; for (UInt16 SlotId = 14; SlotId < 30; ++SlotId) { Item = Items.Find(item => item != null && item.SlotId == SlotId); if (Item == null) Out.WriteUInt32(0); else Out.WriteUInt32R(Item.ModelId); Out.Fill(0, 4); } Out.Fill(0, 6); for (int j = 0; j < 5; ++j) { Out.Fill(0, 6); Out.WriteUInt16(0xFF00); } for (UInt16 SlotId = 10; SlotId < 13; ++SlotId) { Item = Items.Find(item => item != null && item.SlotId == SlotId); Out.WriteUInt16(0); if (Item == null) Out.WriteUInt16(0); else Out.WriteUInt16R((ushort)Item.ModelId); } Out.Fill(0, 10); Out.WriteUInt16(0xFF00); Out.WriteByte(0); Out.WriteByte(Char.Race); Out.WriteUInt16(0); Out.Write(Char.bTraits, 0, Char.bTraits.Length); Out.Fill(0, 14);// 272 } } return Out.ToArray(); }
static public void F_DUMP_ARENAS_LARGE(BaseClient client, PacketIn packet) { GameClient cclient = client as GameClient; if (!cclient.HasAccount()) { cclient.Disconnect(); return; } if (Program.Rm.OnlinePlayers >= Program.Rm.MaxPlayers) { PacketOut Out = new PacketOut((byte)Opcodes.F_LOGINQUEUE); client.SendPacket(Out); return; } byte CharacterSlot = packet.GetUint8(); Character Char = CharMgr.GetAccountChar(cclient._Account.AccountId).GetCharacterBySlot(CharacterSlot); if (Char == null) { Log.Error("F_DUMP_ARENAS_LARGE", "Can not find character on slot : " + CharacterSlot); cclient.Disconnect(); return; } { if (cclient.Plr == null) cclient.Plr = Player.CreatePlayer(cclient, Char); PacketOut Out = new PacketOut((byte)Opcodes.F_WORLD_ENTER); Out.WriteUInt16(0x0608); // TODO Out.Fill(0, 20); Out.WriteString("38699", 5); Out.WriteString("38700", 5); Out.WriteString("0.0.0.0", 20); cclient.SendPacket(Out); } }
public void SafeWorldTeleport(UInt32 WorldX, UInt32 WorldY, UInt16 WorldZ, UInt16 WorldO) { if (WorldX == 0 || WorldY == 0) return; Log.Info("SafeWorldTeleport", "WorldX=" + WorldX + ",WorldY=" + WorldY); PacketOut Out = new PacketOut((byte)Opcodes.F_PLAYER_JUMP); Out.WriteUInt32(WorldX); Out.WriteUInt32(WorldY); Out.WriteUInt16(Oid); Out.WriteUInt16(WorldZ); Out.WriteUInt16(WorldO); Out.Fill(0, 5); Out.WriteByte(1); SendPacket(Out); X = Zone.CalculPin(WorldX, true); Y = Zone.CalculPin(WorldY, true); }