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); }
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()); }
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 }); }
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 }); }
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()); }
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); } }