Beispiel #1
0
        private void SendHandshake(short pXorPos)
        {
            var packet = new Packet(SH2Type.SetXorKeyPosition);

            packet.WriteShort(pXorPos);
            SendPacket(packet);
        }
Beispiel #2
0
 public static void SendError(ZoneClient client, ServerError error)
 {
     using (Packet pack = new Packet(SH3Type.Error))
     {
         pack.WriteShort((byte)error);
         client.SendPacket(pack);
     }
 }
Beispiel #3
0
 public static void BySPStoneHandler(ZoneClient client, Packet packet)
 {
     short Amount;
     if (packet.TryReadShort(out Amount))
     {
         client.Character.ChangeMoney(client.Character.Character.Money -= client.Character.BaseStats.PriceSPStone);
         short Am = Amount += client.Character.StonesSP;
         client.Character.StonesHP = Am;
         using (var p = new Packet(SH20Type.ChangeSPStones))
         {
             p.WriteShort(Am);
             client.SendPacket(p);
         }
     }
 }
Beispiel #4
0
        public static void WriteBasicCharInfo(WorldCharacter wchar, Packet packet)
        {
            packet.WriteInt(wchar.Character.ID); //charid
            packet.FillPadding(wchar.Character.Name, 0x10);
            packet.WriteInt(0);//unk
            packet.WriteShort((short)wchar.Character.CharLevel); //level
            packet.WriteByte(wchar.Character.Slot);
            MapInfo mapinfo;
            if (!DataProvider.Instance.Maps.TryGetValue(wchar.Character.PositionInfo.Map, out mapinfo))
            {
                Log.WriteLine(LogLevel.Warn, "{0} has an invalid MapID ({1})", wchar.Character.Name, wchar.Character.PositionInfo.Map);
                wchar.Character.PositionInfo.Map = 0;
                packet.FillPadding(mapinfo.ShortName, 0x0D); //townname
            }
            else
            {
                packet.FillPadding(mapinfo.ShortName, 0x0D); //townname
            }

            //packet.WriteByte(0); // UNK
            packet.WriteInt(0); // Random seed
            WriteLook(wchar,packet);
            WriteEquipment(wchar,packet);
            WriteRefinement(wchar,packet);
            packet.WriteByte(0);

            packet.WriteByte(0xF0);
            packet.WriteByte(0xFF);//unk
            packet.WriteByte(0xFF);

            packet.FillPadding(mapinfo.ShortName, 0x0c);
            packet.WriteInt(0); //pos
            packet.WriteInt(0); //pos
            packet.WriteUShort(0xdb78);
            packet.WriteUShort(4910);//unk
            packet.WriteUShort(25600);
            packet.Fill(4, 0);
        }
Beispiel #5
0
 private void SendHandshake(short pXorPos)
 {
     Packet packet = new Packet(SH2Type.SetXorKeyPosition);
     packet.WriteShort(pXorPos);
     SendPacket(packet);
 }
Beispiel #6
0
        public static void On_GameClient_LeaveGuild(WorldClient Client, Packet pPacket)
        {
            if (Client.Character.Guild == null)
            {
                return;
            }

            GuildMember member;
            if (Client.Character.Guild.GetMember(Client.Character.Character.Name, out member))
            {
                Client.Character.Guild.RemoveMember(member, null, true);

                using (var packet = new Packet(SH29Type.LeaveGuildResponse))
                {
                    packet.WriteShort(3137);

                    Client.SendPacket(packet);
                }
            }
        }
Beispiel #7
0
 public void WriteDetailedInfo(Packet pPacket)
 {
     pPacket.WriteInt(ID);
     pPacket.WriteString(this.Name, 16);
     pPacket.WriteByte(this.Slot);
     pPacket.WriteByte(this.Level);
     pPacket.WriteLong(this.Exp);
     pPacket.WriteInt(12345678);                // UNK
     pPacket.WriteShort(this.StonesHP);
     pPacket.WriteShort(this.StonesSP);
     pPacket.WriteUInt(this.HP);
     pPacket.WriteUInt(this.SP);
     pPacket.WriteInt(this.Fame);
     pPacket.WriteLong(this.Inventory.Money);
     pPacket.WriteString(this.Map.MapInfo.ShortName, 12);
     pPacket.WriteInt(this.Position.X);
     pPacket.WriteInt(this.Position.Y);
     pPacket.WriteByte(this.Rotation);
     pPacket.WriteByte(this.Str);//  -.
     pPacket.WriteByte(this.End);//   |
     pPacket.WriteByte(this.Dex);//   |  Boni
     pPacket.WriteByte(this.Int);//   |
     pPacket.WriteByte(this.Spr);//  -'
     pPacket.WriteShort(0);               // UNK
     pPacket.WriteUInt(0);               // Killpoints (TODO)
     pPacket.Fill(7, 0);                 // UNK
 }
Beispiel #8
0
        public void WriteCharacterDisplay(Packet packet)
        {
            packet.WriteUShort(MapObjectID);
            packet.WriteString(Name, 16);
            packet.WriteInt(Position.X);
            packet.WriteInt(Position.Y);
            packet.WriteByte(Rotation);                // Rotation
            packet.WriteByte((byte)State);          // Player State (1,2 - Player, 3 - Dead, 4 - Resting, 5 - Vendor, 6 - On Mount)
            packet.WriteByte((byte)Job);
            if (State != PlayerState.Resting && State != PlayerState.Vendor && this.House == null)
            {
                WriteLook(packet);
                WriteEquipment(packet);
            }
            else
            {
                this.House.WritePacket(packet);
            }
            WriteRefinement(packet);
            //(IsMale ? 1 : 0)
            int mount = (this.Mount != null) ? (int) this.Mount.Handle : (int)0xffff;
            packet.WriteUShort((ushort)mount);  // Mount Handle
            packet.WriteUShort(0xffff);
            packet.WriteByte(0xff);          // Emote (0xff = nothing)
            packet.WriteUShort(0xffff);
            packet.WriteShort(0);
            packet.WriteUShort(0);             // Mob ID (title = 10)

            packet.Fill(55, 0);                // Buff Bits? Something like that
            if (this.Character.GuildID > 1)
            {
                packet.WriteInt(this.Guild.ID);
            }
            else if (this.Character.AcademyID > 0)
            {
                packet.WriteInt(this.Character.AcademyID);
            }
            else
            {
                packet.WriteInt(0);
            }
            packet.WriteByte(0x02);            // UNK (0x02)

            packet.WriteBool(this.IsInaAcademy);            // In Guild Academy (0 - No, 1 - Yes)
            packet.WriteBool(true);            // Pet AutoPickup   (0 - Off, 1 - On)
            packet.WriteByte(this.Level);
        }
Beispiel #9
0
        public static void UseTeleporter(ZoneClient client, Packet packet)
        {
            byte anwser;
            if (packet.TryReadByte(out anwser))
            {
                using (Packet Packet = new Packet(SH6Type.TelePorter))
                {
                    Packet.WriteShort(6593);//code for normal teleport
                    client.SendPacket(Packet);
                }
                switch (anwser)
                {
                    case 0:
                        client.Character.ChangeMap(0, 4199, 4769);//Roumen

                        break;
                    case 1:
                        client.Character.ChangeMap(9, 11802, 10466);//Eldrine

                        break;
                    case 2:
                        client.Character.ChangeMap(75, 9069, 9312);//EldGbl02
                        break;
                    case 3:
                        client.Character.ChangeMap(5,13658,7812);//RouVal01

                        break;
                    default:
                        Log.WriteLine(LogLevel.Warn,"Unkown Teleport Answer {1}",anwser);
                        break;
                }
            }
        }
Beispiel #10
0
 public static void VersionInfo(LoginClient pClient, Packet pPacket)
 {
     ushort year;
     ushort version;
     if (!pPacket.TryReadUShort(out year) ||
         !pPacket.TryReadUShort(out version)) {
     Log.WriteLine(LogLevel.Warn, "Invalid client version.");
     pClient.Disconnect();
     return;
     }
     Log.WriteLine(LogLevel.Debug, "Client version authenticated - Year: {0} Version: {1}.", year, version);
     using (Packet response = new Packet(SH3Type.VersionAllowed)) {
     response.WriteShort(1);
     pClient.SendPacket(response);
     }
 }
Beispiel #11
0
        public static void FriendListDelete(WorldClient pClient, Packet pPacket)
        {
            string sender, target;
            if (!pPacket.TryReadString(out sender, 16) ||
                !pPacket.TryReadString(out target, 16))
            {
                Log.WriteLine(LogLevel.Warn, "Error parsing friend delete request.");
                return;
            }

            if (pClient.Character.DeleteFriend(target))
            {
                WorldClient client = ClientManager.Instance.GetClientByCharname(target);
                if (client != null)
                {
                    using (var pack = new Packet(SH21Type.FriendDeleteSend))
                    {
                        pack.WriteString(sender, 16);
                        client.SendPacket(pack);
                    }
                    Friend friend = pClient.Character.Friends.Find(f => f.Name == target);
                    if(friend != null)
                    pClient.Character.Friends.Remove(friend);
                }

                using (var pack = new Packet(SH21Type.FriendDeleteSend))
                {
                    pack.WriteString(sender, 16);
                    pack.WriteString(target, 16);
                    pack.WriteShort(0x0951);
                   pClient.SendPacket(pack);
                }

            }
            else
            {
                using (var pack = new Packet(SH21Type.FriendInviteResponse))
                {
                    pack.WriteString(target, 16);
                    pack.WriteString(sender, 16);
                    pack.WriteUShort(0x0946);	// Cannot find ${Target}
                    pClient.SendPacket(pack);
                }
            }
        }
Beispiel #12
0
        public static void SendTitleList(ZoneCharacter character)
        {
            using (var packet = new Packet(SH4Type.CharacterTitles))
            {
                packet.WriteInt(0); //current title ID
                packet.WriteShort(0); //title count
                //here comes shit loop (see old Estrella)

                character.Client.SendPacket(packet);
            }
        }
Beispiel #13
0
 public static void SendQuestListDone(ZoneCharacter character)
 {
     using (var packet = new Packet(SH4Type.CharacterQuestsDone))
     {
         packet.WriteInt(character.ID);
         packet.WriteShort(0); //quest count
         character.Client.SendPacket(packet);
     }
 }
Beispiel #14
0
        public void WriteGuildInfo(Packet Packet)
        {
            Packet.WriteInt(ID);
            Packet.WriteInt(ID); // academy id?
            Packet.WriteString(Name, 16);

            Packet.Fill(24, 0x00); //unk
            Packet.WriteUShort(38);
            Packet.WriteInt(100);
            Packet.Fill(233, 0x00);//unk
            Packet.WriteUShort(11779);
            Packet.WriteShort(20082);
            Packet.WriteInt(31);
            Packet.WriteInt(55);
            Packet.WriteInt(18);//unk
            Packet.WriteInt(15);
            Packet.WriteInt(8);//unk
            Packet.WriteInt(111);//unk
            Packet.WriteInt(4);
            Packet.Fill(136, 0);//buff or string
            Packet.WriteUShort(1824);
            Packet.WriteUShort(20152);
            Packet.WriteInt(16);
            Packet.WriteInt(28);
            Packet.WriteInt(MessageCreateTime.Minute);//createDetails Guild Minutes Date
            Packet.WriteInt(MessageCreateTime.Hour); //create Details Guild Hours Date
            Packet.WriteInt(MessageCreateTime.Day);//create details Guild Day Date
            Packet.WriteInt(MessageCreateTime.Month);//create details Month
            Packet.WriteInt(MessageCreateTime.Year - 1900);//creae details year 1900- 2012
            Packet.WriteInt(10);//unk
            Packet.WriteUShort(2);
            Packet.Fill(6, 0);//unk
            if(MessageCreater.Character.Name == null)
            {
            Packet.WriteString("", 16);
            }
            else
            {
                Packet.WriteString(MessageCreater.Character.Name, 16);
            }
            Packet.WriteString(Message, 512);//details message
        }
Beispiel #15
0
        public static void GotIngame(WorldClient client, Packet packet)
        {
            /* using (var p1 = new Packet(SH4Type.CharacterGuildacademyinfo))
               {
               if(client.Character.GuildAcademy != null)
               {

               }
               else
               {
               p1.Fill(5, 0);
               }
               client.SendPacket(p1);
               }
              using (var p2 = new Packet(SH4Type.CharacterGuildinfo))
               {
                  if (client.Character.Guild != null)
                  {
                      client.Character.Guild.Details.WriteMessageAsGuildMember(p2, client.Character.Guild);

                  }
                  else
                  {
                      p2.WriteInt(0);
                  }
              client.SendPacket(p2);
               }*/
               // dafuq no op code..
               using (var p = new Packet(0x581C))
               {
             //p.WriteShort();
               p.WriteUInt(0x4d0bc167);   // 21h
               client.SendPacket(p);
               }
               // dafuq no op code..
               using (var p3 = new Packet(0x581D))
               {
               p3.WriteShort(0);           //zero kingdom quests!
               client.SendPacket(p3);
               }

               using (var p4 = new Packet(21, 7))
               {
               p4.WriteByte((byte)client.Character.Friends.Count);
               client.Character.WriteFriendData(p4);
               client.SendPacket(p4);
               }
               using (var p5 = new Packet(SH2Type.UnkTimePacket))
               {
               p5.WriteShort(256);
               client.SendPacket(p5);
               }
               if (!client.Character.IsIngame)
               {
               client.Character.IsIngame = true;

               client.Character.OneIngameLoginLoad();
               MasterManager.Instance.SendMasterList(client);
               //SendMasterList(pClient);
               }

               Managers.CharacterManager.InvokdeIngame(client.Character);
               client.Character.OnGotIngame();
        }