示例#1
0
        private static void CreatePlayer(Client client, DbChar character)
        {
            client.Character = character;

            var target = client.Manager.Worlds[client.TargetWorld];

            client.Player = target is Test ?
                            new Player(client, false) :
                            new Player(client);

            client.SendPacket(new CreateSuccess()
            {
                CharId   = client.Character.CharId,
                ObjectId = target.EnterWorld(client.Player)
            }, PacketPriority.High);

            client.State = ProtocolState.Ready;
            client.Manager.ConMan.ClientConnected(client);
        }
示例#2
0
        public override void HandleRequest(HttpListenerContext context)
        {
            NameValueCollection query;

            using (StreamReader rdr = new StreamReader(context.Request.InputStream))
                query = HttpUtility.ParseQueryString(rdr.ReadToEnd());

            DbChar character = null;

            if (query["accountId"] != null)
            {
                character = Database.LoadCharacter(
                    int.Parse(query["accountId"]),
                    int.Parse(query["charId"])
                    );
            }
            FameList list = FameList.FromDb(Database, query["timespan"], character);

            Write(context, list.ToXml().ToString());
        }
示例#3
0
        public static Fame FromDb(DbChar character)
        {
            DbDeath death = new DbDeath(character.Account, character.CharId);

            if (death.IsNull)
            {
                return(null);
            }
            var stats = FameStats.Read(character.FameStats);

            return(new Fame()
            {
                Name = character.Account.Name,
                Character = Character.FromDb(character, !death.IsNull),
                Stats = stats,
                Bonuses = stats.GetBonuses(Program.GameData, character, death.FirstBorn),
                TotalFame = death.TotalFame,

                FirstBorn = death.FirstBorn,
                DeathTime = death.DeathTime,
                Killer = death.Killer
            });
        }
示例#4
0
 public static Character FromDb(DbChar character, bool dead)
 {
     return(new Character()
     {
         CharacterId = character.CharId,
         ObjectType = character.ObjectType,
         Level = character.Level,
         Exp = character.Experience,
         CurrentFame = character.Fame,
         Equipment = character.HasBackpack ? character.Items.Concat(character.Backpack).ToArray() : character.Items,
         MaxHitPoints = character.Stats[0],
         MaxMagicPoints = character.Stats[1],
         Attack = character.Stats[2],
         Defense = character.Stats[3],
         Speed = character.Stats[4],
         Dexterity = character.Stats[5],
         HpRegen = character.Stats[6],
         MpRegen = character.Stats[7],
         HitPoints = character.HP,
         MagicPoints = character.MP,
         Tex1 = character.Tex1,
         Tex2 = character.Tex2,
         PCStats = FameStats.Read(character.FameStats),
         Dead = dead,
         Pet = character.Pet,
         HpPotions = character.HealthPotions,
         MpPotions = character.MagicPotions,
         Texture = character.Skin,
         XpBoosted = character.XPBoosted,
         XpTimer = character.XPBoostTimer,
         LDTimer = character.LootDropTimer,
         LTTimer = character.LootTierTimer,
         HasBackpack = character.HasBackpack,
         Size = character.Size
     });
 }
示例#5
0
        public override void HandleRequest(HttpListenerContext context)
        {
            NameValueCollection query;

            using (StreamReader rdr = new StreamReader(context.Request.InputStream))
                query = HttpUtility.ParseQueryString(rdr.ReadToEnd());

            DbChar character = Database.LoadCharacter(int.Parse(query["accountId"]), int.Parse(query["charId"]));

            if (character == null)
            {
                Write(context, "<Error>Invalid character</Error>");
                return;
            }

            Fame fame = Fame.FromDb(character);

            if (fame == null)
            {
                Write(context, "<Error>Character not dead</Error>");
                return;
            }
            Write(context, fame.ToXml().ToString());
        }
示例#6
0
        public static void EncodeData(this Character c, IPacket p, DbChar flags = DbChar.All)
        {
            p.Encode <long>((long)flags);
            p.Encode <byte>(0);
            p.Encode <byte>(0);

            if (flags.HasFlag(DbChar.Character))
            {
                EncodeStats(c, p);
                p.Encode <byte>(250); // nFriendMax
                p.Encode <bool>(false);
            }

            if (flags.HasFlag(DbChar.Money))
            {
                p.Encode <int>(c.Money);
            }

            if (flags.HasFlag(DbChar.InventorySize))
            {
                if (flags.HasFlag(DbChar.ItemSlotEquip))
                {
                    p.Encode <byte>((byte)c.Inventories[ItemInventoryType.Equip].SlotMax);
                }
                if (flags.HasFlag(DbChar.ItemSlotConsume))
                {
                    p.Encode <byte>((byte)c.Inventories[ItemInventoryType.Consume].SlotMax);
                }
                if (flags.HasFlag(DbChar.ItemSlotInstall))
                {
                    p.Encode <byte>((byte)c.Inventories[ItemInventoryType.Install].SlotMax);
                }
                if (flags.HasFlag(DbChar.ItemSlotEtc))
                {
                    p.Encode <byte>((byte)c.Inventories[ItemInventoryType.Etc].SlotMax);
                }
                if (flags.HasFlag(DbChar.ItemSlotCash))
                {
                    p.Encode <byte>((byte)c.Inventories[ItemInventoryType.Cash].SlotMax);
                }
            }

            if (flags.HasFlag(DbChar.AdminShopCount))
            {
                p.Encode <int>(0);
                p.Encode <int>(0);
            }

            if (flags.HasFlag(DbChar.ItemSlotEquip))
            {
                var inventory        = c.Inventories[ItemInventoryType.Equip].Items;
                var equip            = inventory.Where(kv => kv.Key >= 0);
                var equipped         = inventory.Where(kv => kv.Key >= -100 && kv.Key < 0);
                var equipped2        = inventory.Where(kv => kv.Key >= -1000 && kv.Key < -100);
                var dragonEquipped   = inventory.Where(kv => kv.Key >= -1100 && kv.Key < -1000);
                var mechanicEquipped = inventory.Where(kv => kv.Key >= -1200 && kv.Key < -1100);

                new List <IEnumerable <KeyValuePair <short, ItemSlot> > >
                {
                    equipped, equipped2, equip, dragonEquipped, mechanicEquipped
                }
                .ForEach(e =>
                {
                    e.ForEach(kv =>
                    {
                        p.Encode <short>((short)(Math.Abs(kv.Key) % 100));
                        kv.Value.Encode(p);
                    });
                    p.Encode <short>(0);
                });
            }

            new List <(DbChar, ItemInventoryType)>
            {
                (DbChar.ItemSlotConsume, ItemInventoryType.Consume),
                (DbChar.ItemSlotInstall, ItemInventoryType.Install),
                (DbChar.ItemSlotEtc, ItemInventoryType.Etc),
                (DbChar.ItemSlotCash, ItemInventoryType.Cash)
            }
            .Where(t => flags.HasFlag(t.Item1))
            .ForEach(t =>
            {
                var inventory = c.Inventories[t.Item2].Items;

                inventory.ForEach(kv =>
                {
                    p.Encode <byte>((byte)kv.Key);
                    kv.Value.Encode(p);
                });
                p.Encode <byte>(0);
            });

            if (flags.HasFlag(DbChar.SkillRecord))
            {
                p.Encode <short>((short)c.SkillRecord.Count);
                c.SkillRecord.ForEach(kv =>
                {
                    p.Encode <int>(kv.Key);
                    p.Encode <int>(kv.Value.Level);
                    p.Encode <DateTime>(kv.Value.DateExpire ?? ItemConstants.Permanent);

                    if (SkillConstants.IsSkillNeedMasterLevel(kv.Key))
                    {
                        p.Encode <int>(kv.Value.MasterLevel);
                    }
                });
            }

            if (flags.HasFlag(DbChar.SkillCooltime))
            {
                p.Encode <short>(0);
            }

            if (flags.HasFlag(DbChar.QuestRecord))
            {
                p.Encode <short>((short)c.QuestRecord.Count);
                c.QuestRecord.ForEach(q =>
                {
                    p.Encode <short>(q.Key);
                    p.Encode <string>(q.Value);
                });
            }

            if (flags.HasFlag(DbChar.QuestComplete))
            {
                p.Encode <short>((short)c.QuestComplete.Count);
                c.QuestComplete.ForEach(q =>
                {
                    p.Encode <short>(q.Key);
                    p.Encode <DateTime>(q.Value);
                });
            }

            if (flags.HasFlag(DbChar.MinigameRecord))
            {
                p.Encode <short>(0);
            }

            if (flags.HasFlag(DbChar.CoupleRecord))
            {
                p.Encode <short>(0); // Couple
                p.Encode <short>(0); // Friend
                p.Encode <short>(0); // Marriage
            }

            if (flags.HasFlag(DbChar.MapTransfer))
            {
                for (var i = 0; i < 5; i++)
                {
                    p.Encode <int>(0);
                }
                for (var i = 0; i < 10; i++)
                {
                    p.Encode <int>(0);
                }
            }

            if (flags.HasFlag(DbChar.NewYearCard))
            {
                p.Encode <short>(0);
            }

            if (flags.HasFlag(DbChar.QuestRecordEx))
            {
                p.Encode <short>((short)c.QuestRecordEx.Count);
                c.QuestRecordEx.ForEach(q =>
                {
                    p.Encode <short>(q.Key);
                    p.Encode <string>(q.Value);
                });
            }

            if (flags.HasFlag(DbChar.WildHunterInfo))
            {
                if (c.Job / 100 == 33)
                {
                    p.Encode <byte>(0);
                    for (var i = 0; i < 5; i++)
                    {
                        p.Encode <int>(0);
                    }
                }
            }

            if (flags.HasFlag(DbChar.QuestCompleteOld))
            {
                p.Encode <short>(0);
            }

            if (flags.HasFlag(DbChar.VisitorLog))
            {
                p.Encode <short>(0);
            }
        }