public CharacterInfo(BinaryReader reader) { Index = reader.ReadInt32(); Name = reader.ReadString(); if (Envir.LoadVersion < 62) { Level = (ushort)reader.ReadByte(); } else { Level = reader.ReadUInt16(); } Class = (MirClass)reader.ReadByte(); Gender = (MirGender)reader.ReadByte(); Hair = reader.ReadByte(); CreationIP = reader.ReadString(); CreationDate = DateTime.FromBinary(reader.ReadInt64()); Banned = reader.ReadBoolean(); BanReason = reader.ReadString(); ExpiryDate = DateTime.FromBinary(reader.ReadInt64()); LastIP = reader.ReadString(); LastDate = DateTime.FromBinary(reader.ReadInt64()); Deleted = reader.ReadBoolean(); DeleteDate = DateTime.FromBinary(reader.ReadInt64()); CurrentMapIndex = reader.ReadInt32(); CurrentLocation = new Point(reader.ReadInt32(), reader.ReadInt32()); Direction = (MirDirection)reader.ReadByte(); BindMapIndex = reader.ReadInt32(); BindLocation = new Point(reader.ReadInt32(), reader.ReadInt32()); HP = reader.ReadUInt16(); MP = reader.ReadUInt16(); Experience = reader.ReadInt64(); AMode = (AttackMode)reader.ReadByte(); PMode = (PetMode)reader.ReadByte(); if (Envir.LoadVersion > 34) { PKPoints = reader.ReadInt32(); } int count = reader.ReadInt32(); Array.Resize(ref Inventory, count); for (int i = 0; i < count; i++) { if (!reader.ReadBoolean()) { continue; } UserItem item = new UserItem(reader, Envir.LoadVersion, Envir.LoadCustomVersion); if (SMain.Envir.BindItem(item) && i < Inventory.Length) { Inventory[i] = item; } } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { if (!reader.ReadBoolean()) { continue; } UserItem item = new UserItem(reader, Envir.LoadVersion, Envir.LoadCustomVersion); if (SMain.Envir.BindItem(item) && i < Equipment.Length) { Equipment[i] = item; } } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { if (!reader.ReadBoolean()) { continue; } UserItem item = new UserItem(reader, Envir.LoadVersion, Envir.LoadCustomVersion); if (SMain.Envir.BindItem(item) && i < QuestInventory.Length) { QuestInventory[i] = item; } } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { UserMagic magic = new UserMagic(reader); if (magic.Info == null) { continue; } Magics.Add(magic); } //reset all magic cooldowns on char loading < stops ppl from having none working skills after a server crash for (int i = 0; i < Magics.Count; i++) { Magics[i].CastTime = 0; } if (Envir.LoadVersion < 2) { return; } Thrusting = reader.ReadBoolean(); HalfMoon = reader.ReadBoolean(); CrossHalfMoon = reader.ReadBoolean(); DoubleSlash = reader.ReadBoolean(); if (Envir.LoadVersion > 46) { MentalState = reader.ReadByte(); } if (Envir.LoadVersion < 4) { return; } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Pets.Add(new PetInfo(reader)); } if (Envir.LoadVersion < 5) { return; } AllowGroup = reader.ReadBoolean(); if (Envir.LoadVersion < 12) { return; } if (Envir.LoadVersion == 12) { count = reader.ReadInt32(); } for (int i = 0; i < Globals.FlagIndexCount; i++) { Flags[i] = reader.ReadBoolean(); } if (Envir.LoadVersion > 27) { GuildIndex = reader.ReadInt32(); } if (Envir.LoadVersion > 30) { AllowTrade = reader.ReadBoolean(); } if (Envir.LoadVersion > 77) { AllowObserve = reader.ReadBoolean(); } if (Envir.LoadVersion > 33) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { QuestProgressInfo quest = new QuestProgressInfo(reader); if (SMain.Envir.BindQuest(quest)) { CurrentQuests.Add(quest); } } } if (Envir.LoadVersion > 42) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Buff buff = new Buff(reader); if (Envir.LoadVersion == 51) { buff.Caster = SMain.Envir.GetObject(reader.ReadUInt32()); } Buffs.Add(buff); } } if (Envir.LoadVersion > 43) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Mail.Add(new MailInfo(reader, Envir.LoadVersion, Envir.LoadCustomVersion)); } } //IntelligentCreature if (Envir.LoadVersion > 44) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { UserIntelligentCreature creature = new UserIntelligentCreature(reader); if (creature.Info == null) { continue; } IntelligentCreatures.Add(creature); } if (Envir.LoadVersion == 45) { var old1 = (IntelligentCreatureType)reader.ReadByte(); var old2 = reader.ReadBoolean(); } PearlCount = reader.ReadInt32(); } if (Envir.LoadVersion > 49) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { CompletedQuests.Add(reader.ReadInt32()); } } if (Envir.LoadVersion > 50 && Envir.LoadVersion < 54) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Poison poison = new Poison(reader); if (Envir.LoadVersion == 51) { poison.Owner = SMain.Envir.GetObject(reader.ReadUInt32()); } Poisons.Add(poison); } } if (Envir.LoadVersion > 56) { if (reader.ReadBoolean()) { CurrentRefine = new UserItem(reader, Envir.LoadVersion, Envir.LoadCustomVersion); } if (CurrentRefine != null) { SMain.Envir.BindItem(CurrentRefine); } CollectTime = reader.ReadInt64(); CollectTime += SMain.Envir.Time; } if (Envir.LoadVersion > 58) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Friends.Add(new FriendInfo(reader)); } } if (Envir.LoadVersion > 75) { count = reader.ReadInt32(); for (var i = 0; i < count; i++) { RentedItems.Add(new ItemRentalInformation(reader)); } HasRentedItem = reader.ReadBoolean(); } if (Envir.LoadVersion > 59) { Married = reader.ReadInt32(); MarriedDate = DateTime.FromBinary(reader.ReadInt64()); Mentor = reader.ReadInt32(); MentorDate = DateTime.FromBinary(reader.ReadInt64()); isMentor = reader.ReadBoolean(); MentorExp = reader.ReadInt64(); } if (Envir.LoadVersion >= 63) { int logCount = reader.ReadInt32(); for (int i = 0; i < logCount; i++) { GSpurchases.Add(reader.ReadInt32(), reader.ReadInt32()); } } if (Envir.LoadCustomVersion >= 1) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { int dailyEvent = reader.ReadInt32(); DailyEventsCompleted.Add(dailyEvent); } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { int weeklyEvent = reader.ReadInt32(); WeeklyEventsCompleted.Add(weeklyEvent); } } }
public CharacterInfo(BinaryReader reader) { Index = reader.ReadInt32(); Name = reader.ReadString(); Level = reader.ReadByte(); Class = (MirClass) reader.ReadByte(); Gender = (MirGender) reader.ReadByte(); Hair = reader.ReadByte(); CreationIP = reader.ReadString(); CreationDate = DateTime.FromBinary(reader.ReadInt64()); Banned = reader.ReadBoolean(); BanReason = reader.ReadString(); ExpiryDate = DateTime.FromBinary(reader.ReadInt64()); LastIP = reader.ReadString(); LastDate = DateTime.FromBinary(reader.ReadInt64()); Deleted = reader.ReadBoolean(); DeleteDate = DateTime.FromBinary(reader.ReadInt64()); CurrentMapIndex = reader.ReadInt32(); CurrentLocation = new Point(reader.ReadInt32(), reader.ReadInt32()); Direction = (MirDirection)reader.ReadByte(); BindMapIndex = reader.ReadInt32(); BindLocation = new Point(reader.ReadInt32(), reader.ReadInt32()); HP = reader.ReadUInt16(); MP = reader.ReadUInt16(); Experience = reader.ReadInt64(); AMode = (AttackMode) reader.ReadByte(); PMode = (PetMode) reader.ReadByte(); if (Envir.LoadVersion > 34) { PKPoints = reader.ReadInt32(); } int count = reader.ReadInt32(); Array.Resize(ref Inventory, count); for (int i = 0; i < count; i++) { if (!reader.ReadBoolean()) continue; UserItem item = new UserItem(reader, Envir.LoadVersion, Envir.LoadCustomVersion); if (SMain.Envir.BindItem(item) && i < Inventory.Length) Inventory[i] = item; } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { if (!reader.ReadBoolean()) continue; UserItem item = new UserItem(reader, Envir.LoadVersion, Envir.LoadCustomVersion); if (SMain.Envir.BindItem(item) && i < Equipment.Length) Equipment[i] = item; } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { if (!reader.ReadBoolean()) continue; UserItem item = new UserItem(reader, Envir.LoadVersion, Envir.LoadCustomVersion); if (SMain.Envir.BindItem(item) && i < QuestInventory.Length) QuestInventory[i] = item; } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { UserMagic magic = new UserMagic(reader); if (magic.Info == null) continue; Magics.Add(magic); } if (Envir.LoadVersion < 2) return; Thrusting = reader.ReadBoolean(); HalfMoon = reader.ReadBoolean(); CrossHalfMoon = reader.ReadBoolean(); DoubleSlash = reader.ReadBoolean(); if(Envir.LoadVersion > 46) { MentalState = reader.ReadByte(); } if (Envir.LoadVersion < 4) return; count = reader.ReadInt32(); for (int i = 0; i < count; i++) Pets.Add(new PetInfo(reader)); if (Envir.LoadVersion < 5) return; AllowGroup = reader.ReadBoolean(); if (Envir.LoadVersion < 12) return; if (Envir.LoadVersion == 12) count = reader.ReadInt32(); for (int i = 0; i < Globals.FlagIndexCount; i++) Flags[i] = reader.ReadBoolean(); if (Envir.LoadVersion > 27) GuildIndex = reader.ReadInt32(); if (Envir.LoadVersion > 30) AllowTrade = reader.ReadBoolean(); if (Envir.LoadVersion > 33) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { QuestProgressInfo quest = new QuestProgressInfo(reader); if (SMain.Envir.BindQuest(quest)) CurrentQuests.Add(quest); } } if(Envir.LoadVersion > 42) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Buff buff = new Buff(reader); if (Envir.LoadVersion == 51) { buff.Caster = SMain.Envir.GetObject(reader.ReadUInt32()); } Buffs.Add(buff); } } if(Envir.LoadVersion > 43) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) Mail.Add(new MailInfo(reader, Envir.LoadVersion, Envir.LoadCustomVersion)); } //IntelligentCreature if (Envir.LoadVersion > 44) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { UserIntelligentCreature creature = new UserIntelligentCreature(reader); if (creature.Info == null) continue; IntelligentCreatures.Add(creature); } if (Envir.LoadVersion == 45) { var old1 = (IntelligentCreatureType)reader.ReadByte(); var old2 = reader.ReadBoolean(); } PearlCount = reader.ReadInt32(); } if (Envir.LoadVersion > 49) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) CompletedQuests.Add(reader.ReadInt32()); } if (Envir.LoadVersion > 50 && Envir.LoadVersion < 54) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Poison poison = new Poison(reader); if (Envir.LoadVersion == 51) { poison.Owner = SMain.Envir.GetObject(reader.ReadUInt32()); } Poisons.Add(poison); } } if (Envir.LoadVersion > 56) { if (reader.ReadBoolean()) CurrentRefine = new UserItem(reader, Envir.LoadVersion, Envir.LoadCustomVersion); if (CurrentRefine != null) SMain.Envir.BindItem(CurrentRefine); CollectTime = reader.ReadInt64(); CollectTime += SMain.Envir.Time; } if (Envir.LoadVersion > 58) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) Friends.Add(new FriendInfo(reader)); } if (Envir.LoadVersion > 59) { Married = reader.ReadInt32(); MarriedDate = DateTime.FromBinary(reader.ReadInt64()); Mentor = reader.ReadInt32(); MentorDate = DateTime.FromBinary(reader.ReadInt64()); isMentor = reader.ReadBoolean(); MentorExp = reader.ReadInt64(); } }
public CharacterInfo(BinaryReader reader) { Index = reader.ReadInt32(); Name = reader.ReadString(); Level = reader.ReadByte(); Class = (MirClass)reader.ReadByte(); Gender = (MirGender)reader.ReadByte(); Hair = reader.ReadByte(); CreationIP = reader.ReadString(); CreationDate = DateTime.FromBinary(reader.ReadInt64()); Banned = reader.ReadBoolean(); BanReason = reader.ReadString(); ExpiryDate = DateTime.FromBinary(reader.ReadInt64()); LastIP = reader.ReadString(); LastDate = DateTime.FromBinary(reader.ReadInt64()); Deleted = reader.ReadBoolean(); DeleteDate = DateTime.FromBinary(reader.ReadInt64()); CurrentMapIndex = reader.ReadInt32(); CurrentLocation = new Point(reader.ReadInt32(), reader.ReadInt32()); Direction = (MirDirection)reader.ReadByte(); BindMapIndex = reader.ReadInt32(); BindLocation = new Point(reader.ReadInt32(), reader.ReadInt32()); HP = reader.ReadUInt16(); MP = reader.ReadUInt16(); Experience = reader.ReadInt64(); AMode = (AttackMode)reader.ReadByte(); PMode = (PetMode)reader.ReadByte(); if (Envir.LoadVersion > 34) { PKPoints = reader.ReadInt32(); } int count = reader.ReadInt32(); Array.Resize(ref Inventory, count); for (int i = 0; i < count; i++) { if (!reader.ReadBoolean()) { continue; } UserItem item = new UserItem(reader, Envir.LoadVersion); if (SMain.Envir.BindItem(item) && i < Inventory.Length) { Inventory[i] = item; } } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { if (!reader.ReadBoolean()) { continue; } UserItem item = new UserItem(reader, Envir.LoadVersion); if (SMain.Envir.BindItem(item) && i < Equipment.Length) { Equipment[i] = item; } } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { if (!reader.ReadBoolean()) { continue; } UserItem item = new UserItem(reader, Envir.LoadVersion); if (SMain.Envir.BindItem(item) && i < QuestInventory.Length) { QuestInventory[i] = item; } } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { UserMagic magic = new UserMagic(reader); if (magic.Info == null) { continue; } Magics.Add(magic); } if (Envir.LoadVersion < 2) { return; } Thrusting = reader.ReadBoolean(); HalfMoon = reader.ReadBoolean(); CrossHalfMoon = reader.ReadBoolean(); DoubleSlash = reader.ReadBoolean(); if (Envir.LoadVersion > 46) { MentalState = reader.ReadByte(); } if (Envir.LoadVersion < 4) { return; } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Pets.Add(new PetInfo(reader)); } if (Envir.LoadVersion < 5) { return; } AllowGroup = reader.ReadBoolean(); if (Envir.LoadVersion < 12) { return; } if (Envir.LoadVersion == 12) { count = reader.ReadInt32(); } for (int i = 0; i < Globals.FlagIndexCount; i++) { Flags[i] = reader.ReadBoolean(); } if (Envir.LoadVersion > 27) { GuildIndex = reader.ReadInt32(); } if (Envir.LoadVersion > 30) { AllowTrade = reader.ReadBoolean(); } if (Envir.LoadVersion > 33) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { QuestProgressInfo quest = new QuestProgressInfo(reader); if (SMain.Envir.BindQuest(quest)) { CurrentQuests.Add(quest); } } } if (Envir.LoadVersion > 42) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Buff buff = new Buff(reader); if (Envir.LoadVersion == 51) { buff.Caster = SMain.Envir.GetObject(reader.ReadUInt32()); } Buffs.Add(buff); } } if (Envir.LoadVersion > 43) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Mail.Add(new MailInfo(reader)); } } //IntelligentCreature if (Envir.LoadVersion > 44) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { UserIntelligentCreature creature = new UserIntelligentCreature(reader); if (creature.Info == null) { continue; } IntelligentCreatures.Add(creature); } if (Envir.LoadVersion == 45) { var old1 = (IntelligentCreatureType)reader.ReadByte(); var old2 = reader.ReadBoolean(); } PearlCount = reader.ReadInt32(); } if (Envir.LoadVersion > 49) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { CompletedQuests.Add(reader.ReadInt32()); } } if (Envir.LoadVersion > 50 && Envir.LoadVersion < 54) { count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Poison poison = new Poison(reader); if (Envir.LoadVersion == 51) { poison.Owner = SMain.Envir.GetObject(reader.ReadUInt32()); } Poisons.Add(poison); } } }
public void UseItem(ulong id) { S.UseItem p = new S.UseItem { UniqueID = id, Success = false }; UserItem item = null; int index = -1; for (int i = 0; i < Info.Inventory.Length; i++) { item = Info.Inventory[i]; if (item == null || item.UniqueID != id) continue; index = i; break; } if (item == null || index == -1 || !CanUseItem(item)) { Enqueue(p); return; } if (Dead && item.Info.Type != ItemType.Scroll && item.Info.Shape != 6) { Enqueue(p); return; } switch (item.Info.Type) { case ItemType.Potion: switch (item.Info.Shape) { case 0: //NormalPotion PotHealthAmount = (ushort)Math.Min(ushort.MaxValue, PotHealthAmount + item.Info.HP); PotManaAmount = (ushort)Math.Min(ushort.MaxValue, PotManaAmount + item.Info.MP); break; case 1: //SunPotion ChangeHP(item.Info.HP); ChangeMP(item.Info.MP); break; case 2: //MysteryWater if (UnlockCurse) { ReceiveChat("You can already unequip a cursed item.", ChatType.Hint); Enqueue(p); return; } ReceiveChat("You can now unequip a cursed item.", ChatType.Hint); UnlockCurse = true; break; case 3: //Buff int time = item.Info.Durability; if ((item.Info.MaxDC + item.DC) > 0) AddBuff(new Buff { Type = BuffType.Impact, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.MaxDC + item.DC } }); if ((item.Info.MaxMC + item.MC) > 0) AddBuff(new Buff { Type = BuffType.Magic, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.MaxMC + item.MC } }); if ((item.Info.MaxSC + item.SC) > 0) AddBuff(new Buff { Type = BuffType.Taoist, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.MaxSC + item.SC } }); if ((item.Info.AttackSpeed + item.AttackSpeed) > 0) AddBuff(new Buff { Type = BuffType.Storm, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.AttackSpeed + item.AttackSpeed } }); if ((item.Info.HP + item.HP) > 0) AddBuff(new Buff { Type = BuffType.HealthAid, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.HP + item.HP } }); if ((item.Info.MP + item.MP) > 0) AddBuff(new Buff { Type = BuffType.ManaAid, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.MP + item.MP } }); if ((item.Info.MaxAC + item.AC) > 0) AddBuff(new Buff { Type = BuffType.Defence, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.MaxAC + item.AC } }); if ((item.Info.MaxMAC + item.MAC) > 0) AddBuff(new Buff { Type = BuffType.MagicDefence, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.MaxMAC + item.MAC } }); break; case 4: //Exp time = item.Info.Durability; AddBuff(new Buff { Type = BuffType.Exp, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.Luck + item.Luck } }); break; } break; case ItemType.Scroll: UserItem temp; switch (item.Info.Shape) { case 0: //DE if (!TeleportEscape(20)) { Enqueue(p); return; } break; case 1: //TT if (!Teleport(Envir.GetMap(BindMapIndex), BindLocation)) { Enqueue(p); return; } break; case 2: //RT if (!TeleportRandom(200, item.Info.Durability)) { Enqueue(p); return; } break; case 3: //BenedictionOil if (!TryLuckWeapon()) { Enqueue(p); return; } break; case 4: //RepairOil temp = Info.Equipment[(int)EquipmentSlot.Weapon]; if (temp == null || temp.MaxDura == temp.CurrentDura) { Enqueue(p); return; } if (temp.Info.Bind.HasFlag(BindMode.DontRepair)) { Enqueue(p); return; } temp.MaxDura = (ushort)Math.Max(0, temp.MaxDura - Math.Min(5000, temp.MaxDura - temp.CurrentDura) / 30); temp.CurrentDura = (ushort)Math.Min(temp.MaxDura, temp.CurrentDura + 5000); temp.DuraChanged = false; ReceiveChat("Your weapon has been partially repaired", ChatType.Hint); Enqueue(new S.ItemRepaired { UniqueID = temp.UniqueID, MaxDura = temp.MaxDura, CurrentDura = temp.CurrentDura }); break; case 5: //WarGodOil temp = Info.Equipment[(int)EquipmentSlot.Weapon]; if (temp == null || temp.MaxDura == temp.CurrentDura) { Enqueue(p); return; } if (temp.Info.Bind.HasFlag(BindMode.DontRepair) || (temp.Info.Bind.HasFlag(BindMode.NoSRepair))) { Enqueue(p); return; } temp.CurrentDura = temp.MaxDura; temp.DuraChanged = false; ReceiveChat("Your weapon has been completely repaired", ChatType.Hint); Enqueue(new S.ItemRepaired { UniqueID = temp.UniqueID, MaxDura = temp.MaxDura, CurrentDura = temp.CurrentDura }); break; case 6: //ResurrectionScroll if (Dead) { MP = MaxMP; Revive(MaxHealth, true); } break; case 7: //CreditScroll if (item.Info.Price > 0) { GainCredit(item.Info.Price); ReceiveChat(String.Format("{0} Credits have been added to your Account", item.Info.Price), ChatType.Hint); } break; case 8: //MapShoutScroll HasMapShout = true; ReceiveChat("You have been given one free shout across your current map", ChatType.Hint); break; case 9://ServerShoutScroll HasServerShout = true; ReceiveChat("You have been given one free shout across the server", ChatType.Hint); break; case 10://GuildSkillScroll MyGuild.NewBuff(item.Info.Effect, false); break; case 11://HomeTeleport if (MyGuild != null && MyGuild.Conquest != null && !MyGuild.Conquest.WarIsOn && MyGuild.Conquest.PalaceMap != null && !TeleportRandom(200, 0, MyGuild.Conquest.PalaceMap)) { Enqueue(p); return; } break; } break; case ItemType.Book: UserMagic magic = new UserMagic((Spell)item.Info.Shape); if (magic.Info == null) { Enqueue(p); return; } Info.Magics.Add(magic); Enqueue(magic.GetInfo()); RefreshStats(); break; case ItemType.Script: CallDefaultNPC(DefaultNPCType.UseItem, item.Info.Shape); break; case ItemType.Food: temp = Info.Equipment[(int)EquipmentSlot.Mount]; if (temp == null || temp.MaxDura == temp.CurrentDura) { Enqueue(p); return; } switch (item.Info.Shape) { case 0: temp.MaxDura = (ushort)Math.Max(0, temp.MaxDura - Math.Min(1000, temp.MaxDura - (temp.CurrentDura / 30))); break; case 1: break; } temp.CurrentDura = (ushort)Math.Min(temp.MaxDura, temp.CurrentDura + item.CurrentDura); temp.DuraChanged = false; ReceiveChat("Your mount has been fed.", ChatType.Hint); Enqueue(new S.ItemRepaired { UniqueID = temp.UniqueID, MaxDura = temp.MaxDura, CurrentDura = temp.CurrentDura }); RefreshStats(); break; case ItemType.Pets: if (item.Info.Shape >= 20) { switch (item.Info.Shape) { case 20://Mirror Enqueue(new S.IntelligentCreatureEnableRename()); break; case 21://BlackStone if (item.Count > 1) item.Count--; else Info.Inventory[index] = null; RefreshBagWeight(); p.Success = true; Enqueue(p); BlackstoneRewardItem(); return; case 22://Nuts if (CreatureSummoned) for (int i = 0; i < Pets.Count; i++) { if (Pets[i].Info.AI != 64) continue; if (((IntelligentCreatureObject)Pets[i]).petType != SummonedCreatureType) continue; ((IntelligentCreatureObject)Pets[i]).maintainfoodTime = item.Info.Effect * Settings.Hour / 1000; UpdateCreatureMaintainFoodTime(SummonedCreatureType, 0); break; } break; case 23://FairyMoss, FreshwaterClam, Mackerel, Cherry if (CreatureSummoned) for (int i = 0; i < Pets.Count; i++) { if (Pets[i].Info.AI != 64) continue; if (((IntelligentCreatureObject)Pets[i]).petType != SummonedCreatureType) continue; if (((IntelligentCreatureObject)Pets[i]).Fullness < 10000) ((IntelligentCreatureObject)Pets[i]).IncreaseFullness(item.Info.Effect * 100); break; } break; case 24://WonderPill if (CreatureSummoned) for (int i = 0; i < Pets.Count; i++) { if (Pets[i].Info.AI != 64) continue; if (((IntelligentCreatureObject)Pets[i]).petType != SummonedCreatureType) continue; if (((IntelligentCreatureObject)Pets[i]).Fullness == 0) ((IntelligentCreatureObject)Pets[i]).IncreaseFullness(100); break; } break; case 25://Strongbox byte boxtype = item.Info.Effect; if (item.Count > 1) item.Count--; else Info.Inventory[index] = null; RefreshBagWeight(); p.Success = true; Enqueue(p); StrongboxRewardItem(boxtype); return; case 26://Wonderdrugs int time = item.Info.Durability; switch (item.Info.Effect) { case 0://exp low/med/high AddBuff(new Buff { Type = BuffType.WonderDrug, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.Effect, item.Info.Luck + item.Luck } }); break; case 1://drop low/med/high AddBuff(new Buff { Type = BuffType.WonderDrug, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.Effect, item.Info.Luck + item.Luck } }); break; case 2://hp low/med/high AddBuff(new Buff { Type = BuffType.WonderDrug, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.Effect, item.Info.HP + item.HP } }); break; case 3://mp low/med/high AddBuff(new Buff { Type = BuffType.WonderDrug, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.Effect, item.Info.MP + item.MP } }); break; case 4://ac-ac low/med/high AddBuff(new Buff { Type = BuffType.WonderDrug, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.Effect, item.Info.MaxAC + item.AC } }); break; case 5://mac-mac low/med/high AddBuff(new Buff { Type = BuffType.WonderDrug, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.Effect, item.Info.MaxMAC + item.MAC } }); break; case 6://speed low/med/high AddBuff(new Buff { Type = BuffType.WonderDrug, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.Effect, item.Info.AttackSpeed + item.AttackSpeed } }); break; } break; case 27://FortuneCookies break; case 28://Knapsack time = item.Info.Durability; AddBuff(new Buff { Type = BuffType.Knapsack, Caster = this, ExpireTime = Envir.Time + time * Settings.Minute, Values = new int[] { item.Info.Luck + item.Luck } }); break; } } else { int slotIndex = Info.IntelligentCreatures.Count; UserIntelligentCreature petInfo = new UserIntelligentCreature((IntelligentCreatureType)item.Info.Shape, slotIndex, item.Info.Effect); if (Info.CheckHasIntelligentCreature((IntelligentCreatureType)item.Info.Shape)) { ReceiveChat("You already have this creature.", ChatType.Hint); petInfo = null; } if (petInfo == null || slotIndex >= 10) { Enqueue(p); return; } ReceiveChat("Obtained a new creature {" + petInfo.CustomName + "}.", ChatType.Hint); Info.IntelligentCreatures.Add(petInfo); Enqueue(petInfo.GetInfo()); } break; case ItemType.Transform: //Transforms int tTime = item.Info.Durability; int tType = item.Info.Shape; AddBuff(new Buff { Type = BuffType.Transform, Caster = this, ExpireTime = Envir.Time + tTime * 1000, Values = new int[] { tType } }); break; default: return; } if (item.Count > 1) item.Count--; else Info.Inventory[index] = null; RefreshBagWeight(); Report.ItemChanged("UseItem", item, 1, 1); p.Success = true; Enqueue(p); }
public CharacterInfo(BinaryReader reader, int version, int customVersion) { Index = reader.ReadInt32(); Name = reader.ReadString(); if (version < 62) { Level = (ushort)reader.ReadByte(); } else { Level = reader.ReadUInt16(); } Class = (MirClass)reader.ReadByte(); Gender = (MirGender)reader.ReadByte(); Hair = reader.ReadByte(); CreationIP = reader.ReadString(); CreationDate = DateTime.FromBinary(reader.ReadInt64()); Banned = reader.ReadBoolean(); BanReason = reader.ReadString(); ExpiryDate = DateTime.FromBinary(reader.ReadInt64()); LastIP = reader.ReadString(); LastLogoutDate = DateTime.FromBinary(reader.ReadInt64()); if (version > 81) { LastLoginDate = DateTime.FromBinary(reader.ReadInt64()); } Deleted = reader.ReadBoolean(); DeleteDate = DateTime.FromBinary(reader.ReadInt64()); CurrentMapIndex = reader.ReadInt32(); CurrentLocation = new Point(reader.ReadInt32(), reader.ReadInt32()); Direction = (MirDirection)reader.ReadByte(); BindMapIndex = reader.ReadInt32(); BindLocation = new Point(reader.ReadInt32(), reader.ReadInt32()); if (version <= 84) { HP = reader.ReadUInt16(); MP = reader.ReadUInt16(); } else { HP = reader.ReadInt32(); MP = reader.ReadInt32(); } Experience = reader.ReadInt64(); AMode = (AttackMode)reader.ReadByte(); PMode = (PetMode)reader.ReadByte(); if (version > 34) { PKPoints = reader.ReadInt32(); } int count = reader.ReadInt32(); Array.Resize(ref Inventory, count); for (int i = 0; i < count; i++) { if (!reader.ReadBoolean()) { continue; } UserItem item = new UserItem(reader, version, customVersion); if (Envir.BindItem(item) && i < Inventory.Length) { Inventory[i] = item; } } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { if (!reader.ReadBoolean()) { continue; } UserItem item = new UserItem(reader, version, customVersion); if (Envir.BindItem(item) && i < Equipment.Length) { Equipment[i] = item; } } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { if (!reader.ReadBoolean()) { continue; } UserItem item = new UserItem(reader, version, customVersion); if (Envir.BindItem(item) && i < QuestInventory.Length) { QuestInventory[i] = item; } } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { UserMagic magic = new UserMagic(reader, version, customVersion); if (magic.Info == null) { continue; } magic.CastTime = int.MinValue; Magics.Add(magic); } Thrusting = reader.ReadBoolean(); HalfMoon = reader.ReadBoolean(); CrossHalfMoon = reader.ReadBoolean(); DoubleSlash = reader.ReadBoolean(); MentalState = reader.ReadByte(); count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Pets.Add(new PetInfo(reader, version, customVersion)); } AllowGroup = reader.ReadBoolean(); for (int i = 0; i < Globals.FlagIndexCount; i++) { Flags[i] = reader.ReadBoolean(); } GuildIndex = reader.ReadInt32(); AllowTrade = reader.ReadBoolean(); count = reader.ReadInt32(); for (int i = 0; i < count; i++) { QuestProgressInfo quest = new QuestProgressInfo(reader, version, customVersion); if (Envir.BindQuest(quest)) { CurrentQuests.Add(quest); } } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Buff buff = new Buff(reader, version, customVersion); Buffs.Add(buff); } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Mail.Add(new MailInfo(reader, version, customVersion)); } count = reader.ReadInt32(); for (int i = 0; i < count; i++) { UserIntelligentCreature creature = new UserIntelligentCreature(reader, version, customVersion); if (creature.Info == null) { continue; } IntelligentCreatures.Add(creature); } if (version == 45) { var old1 = (IntelligentCreatureType)reader.ReadByte(); var old2 = reader.ReadBoolean(); } PearlCount = reader.ReadInt32(); count = reader.ReadInt32(); for (int i = 0; i < count; i++) { CompletedQuests.Add(reader.ReadInt32()); } if (reader.ReadBoolean()) { CurrentRefine = new UserItem(reader, version, customVersion); } if (CurrentRefine != null) { Envir.BindItem(CurrentRefine); } CollectTime = reader.ReadInt64(); CollectTime += Envir.Time; count = reader.ReadInt32(); for (int i = 0; i < count; i++) { Friends.Add(new FriendInfo(reader, version, customVersion)); } if (version > 75) { count = reader.ReadInt32(); for (var i = 0; i < count; i++) { RentedItems.Add(new ItemRentalInformation(reader, version, customVersion)); } HasRentedItem = reader.ReadBoolean(); } Married = reader.ReadInt32(); MarriedDate = DateTime.FromBinary(reader.ReadInt64()); Mentor = reader.ReadInt32(); MentorDate = DateTime.FromBinary(reader.ReadInt64()); IsMentor = reader.ReadBoolean(); MentorExp = reader.ReadInt64(); if (version >= 63) { int logCount = reader.ReadInt32(); for (int i = 0; i < logCount; i++) { GSpurchases.Add(reader.ReadInt32(), reader.ReadInt32()); } } }