public static byte[] Convert(RealmManager manager, string json) { json_dat obj = JsonConvert.DeserializeObject<json_dat>(json); byte[] dat = ZlibStream.UncompressBuffer(obj.data); Dictionary<ushort, TerrainTile> tileDict = new Dictionary<ushort, TerrainTile>(); for (int i = 0; i < obj.dict.Length; i++) { loc o = obj.dict[i]; tileDict[(ushort)i] = new TerrainTile { TileId = o.ground == null ? (ushort)0xff : manager.GameData.IdToTileType[o.ground], TileObj = o.objs == null ? null : o.objs[0].id, Name = o.objs == null ? "" : o.objs[0].name ?? "", Terrain = TerrainType.None, Region = o.regions == null ? TileRegion.None : (TileRegion)Enum.Parse(typeof(TileRegion), o.regions[0].id.Replace(' ', '_')) }; } TerrainTile[,] tiles = new TerrainTile[obj.width, obj.height]; using (NReader rdr = new NReader(new MemoryStream(dat))) for (int y = 0; y < obj.height; y++) for (int x = 0; x < obj.width; x++) { tiles[x, y] = tileDict[(ushort)rdr.ReadInt16()]; } return WorldMapExporter.Export(tiles); }
public Portal(RealmManager manager, ushort objType, int? life) : base(manager, objType, life, false, true, false) { Usable = objType != 0x0721; ObjectDesc = Manager.GameData.Portals[objType]; Name = manager.GameData.Portals[objType].DisplayId; }
public static void Initialize() { ModuleMgr = ModuleManager.GetInstance(); PatchMgr = PatchManager.GetInstance(); RealmMgr = RealmManager.GetInstance(); SessionMgr = SessionManager.GetInstance(); }
public Enemy(RealmManager manager, ushort objType) : base(manager, objType, new wRandom()) { stat = ObjectDesc.MaxHP == 0; MaxHP = ObjectDesc.MaxHP; Defense = ObjectDesc.Defense; counter = new DamageCounter(this); }
public Enemy(RealmManager manager, ushort objType) : base(manager, objType, new wRandom()) { stat = ObjectDesc.MaxHP == 0; counter = new DamageCounter(this); LootState = ""; Name = ObjectDesc.ObjectId; }
public OneWayContainer(RealmManager manager, ushort objType, int? life, bool dying) : base(manager, objType, life, false, dying, false) { Inventory = new Item[8]; SlotTypes = new int[8]; for (int i = 0; i < SlotTypes.Length; i++) if (SlotTypes[i] == 0) SlotTypes[i] = 10; }
//Stats public StaticObject(RealmManager manager, ushort objType, int? life, bool stat, bool dying, bool hittestable) : base(manager, objType) { if (Vulnerable = life.HasValue) HP = life.Value; Dying = dying; Static = stat; Hittestable = hittestable; }
public SellableObject(RealmManager manager, ushort objType) : base(manager, objType, null, true, false, false) { if (objType == 0x0505) //Vault chest { Price = 100; Currency = CurrencyType.Gold; RankReq = 0; } }
public static byte[] ConvertMakeWalls(RealmManager manager, string json) { json_dat obj = JsonConvert.DeserializeObject<json_dat>(json); byte[] dat = ZlibStream.UncompressBuffer(obj.data); Dictionary<ushort, TerrainTile> tileDict = new Dictionary<ushort, TerrainTile>(); for (int i = 0; i < obj.dict.Length; i++) { loc o = obj.dict[i]; tileDict[(ushort)i] = new TerrainTile { TileId = o.ground == null ? (ushort)0xff : manager.GameData.IdToObjectType[o.ground], TileObj = o.objs == null ? null : o.objs[0].id, Name = o.objs == null ? "" : o.objs[0].name ?? "", Terrain = TerrainType.None, Region = o.regions == null ? TileRegion.None : (TileRegion)Enum.Parse(typeof(TileRegion), o.regions[0].id.Replace(' ', '_')) }; } TerrainTile[,] tiles = new TerrainTile[obj.width, obj.height]; using (NReader rdr = new NReader(new MemoryStream(dat))) for (int y = 0; y < obj.height; y++) for (int x = 0; x < obj.width; x++) { tiles[x, y] = tileDict[(ushort)rdr.ReadInt16()]; tiles[x, y].X = x; tiles[x, y].Y = y; } foreach (TerrainTile i in tiles) { if (i.TileId == 0xff && i.TileObj == null) { bool createWall = false; for (int ty = -1; ty <= 1; ty++) for (int tx = -1; tx <= 1; tx++) try { if (tiles[i.X + tx, i.Y + ty].TileId != 0xff) createWall = true; } catch { } if (createWall) tiles[i.X, i.Y].TileObj = "Grey Wall"; } } return WorldMapExporter.Export(tiles); }
public CommandManager(RealmManager manager) { this.manager = manager; cmds = new Dictionary<string, Command>(StringComparer.InvariantCultureIgnoreCase); var t = typeof(Command); foreach (var i in t.Assembly.GetTypes()) if (t.IsAssignableFrom(i) && i != t) { var instance = (Command)Activator.CreateInstance(i); cmds.Add(instance.CommandName, instance); } }
//Stats public StaticObject(RealmManager manager, ushort objType, int? lifeTime, bool stat, bool dying, bool hittestable) : base(manager, objType, IsInteractive(manager, objType)) { if (Vulnerable = lifeTime.HasValue) HP = lifeTime.Value; Dying = dying; if (objType == 0x01c7) Static = true; else Static = stat; Hittestable = hittestable; }
public Merchants(RealmManager manager, ushort objType, World owner = null) : base(manager, objType) { MType = -1; Size = MERCHANT_SIZE; if (owner != null) Owner = owner; if (Random == null) Random = new Random(); if (AddedTypes == null) AddedTypes = new List<KeyValuePair<string, int>>(); if(owner != null) ResolveMType(); }
public Container(RealmManager manager, XElement node) : base(manager, (ushort)Utils.FromString(node.Attribute("type").Value), null, false, false, false) { SlotTypes = Utils.FromCommaSepString32(node.Element("SlotTypes").Value); XElement eq = node.Element("Equipment"); if (eq != null) { Item[] inv = Utils.FromCommaSepString16(eq.Value) .Select(_ => _ == -1 ? null : manager.GameData.Items[(ushort)_]) .ToArray(); Array.Resize(ref inv, 8); Inventory = inv; } }
public Container(RealmManager manager, ushort objType, int? life, bool dying) : base(manager, objType, life, false, dying, false) { Inventory = new Inventory(this); SlotTypes = new int[12]; BagOwners = new int[0]; var node = manager.GameData.ObjectTypeToElement[ObjectType]; SlotTypes = Utils.FromCommaSepString32(node.Element("SlotTypes").Value); XElement eq = node.Element("Equipment"); if (eq != null) { var inv = Utils.FromCommaSepString16(eq.Value).Select(_ => _ == 0xffff ? null : manager.GameData.Items[_]).ToArray(); Array.Resize(ref inv, 12); Inventory.SetItems(inv); } }
protected Character(RealmManager manager, ushort objType, wRandom rand) : base(manager, objType) { this.Random = rand; if (ObjectDesc != null) { if (ObjectDesc.SizeStep != 0) { var step = Random.Next(0, (ObjectDesc.MaxSize - ObjectDesc.MinSize) / ObjectDesc.SizeStep + 1) * ObjectDesc.SizeStep; Size = ObjectDesc.MinSize + step; } else Size = ObjectDesc.MinSize; HP = ObjectDesc.MaxHP; } }
public GuildMerchant(RealmManager manager, ushort objType) : base(manager, objType) { RankReq = 0; Currency = CurrencyType.GuildFame; switch (objType) { case UP1: Price = UP1C; break; case UP2: Price = UP2C; break; case UP3: Price = UP3C; break; } }
public Character(RealmManager manager, ushort objType, wRandom rand) : base(manager, objType) { Random = rand; if (ObjectDesc == null) return; Name = ObjectDesc.DisplayId ?? ""; if (ObjectDesc.SizeStep != 0) { int step = Random.Next(0, (ObjectDesc.MaxSize - ObjectDesc.MinSize) / ObjectDesc.SizeStep + 1) * ObjectDesc.SizeStep; Size = ObjectDesc.MinSize + step; } else Size = ObjectDesc.MinSize; HP = (int)ObjectDesc.MaxHP; }
public Decoy(RealmManager manager, Player player, int duration, float tps) : base(manager, 0x0715, duration, true, true, true) { this.player = player; this.duration = duration; speed = tps; Position? history = player.TryGetHistory(100); if (history == null) direction = GetRandDirection(); else { direction = new Vector2(player.X - history.Value.X, player.Y - history.Value.Y); if (direction.LengthSquared() == 0) direction = GetRandDirection(); else direction.Normalize(); } }
public Pet(RealmManager manager, PetItem petData, Player playerOwner) : base(manager, (ushort)petData.Type, true, true) { rand = new Random(); PlayerOwner = playerOwner; Info = petData; try { if (petData.InstanceId != -1) { FirstPetLevel = new PetLevel(AbilityType.First, Utils.GetEnumByName<Ability>(Utils.GetEnumName<Ability>(petData.Abilities[0].Type)), petData.Abilities[0].Points, petData.Abilities[0].Power, this); SecondPetLevel = new PetLevel(AbilityType.Second, Utils.GetEnumByName<Ability>(Utils.GetEnumName<Ability>(petData.Abilities[1].Type)), petData.Abilities[1].Points, petData.Abilities[1].Power, this); ThirdPetLevel = new PetLevel(AbilityType.Third, Utils.GetEnumByName<Ability>(Utils.GetEnumName<Ability>(petData.Abilities[2].Type)), petData.Abilities[2].Points, petData.Abilities[2].Power, this); Size = manager.GameData.TypeToPet[(ushort)petData.Type].Size; PetRarity = (Rarity)petData.Rarity; PetFamily = manager.GameData.TypeToPet[(ushort)petData.Type].PetFamily; MaximumLevel = petData.MaxAbilityPower; UpdateNeeded = true; } Skin = petData.SkinName; SkinId = petData.Skin; PetId = petData.InstanceId; IsPet = true; } catch (Exception e) { if (PlayerOwner != null) PlayerOwner.SendError( String.Format( "An error ocurred while loading your pet data, please report this to an Admin: {0}", e.Message)); } }
public override World GetInstance(ClientProcessor psr) { return(RealmManager.AddWorld(new NexusDefense())); }
public Projectile(RealmManager manager, ProjectileDesc desc) : base(manager, manager.GameData.IdToObjectType[desc.ObjectId]) { Descriptor = desc; }
public void UsePortal(RealmTime time, UsePortalPacket pkt) { Entity entity = Owner.GetEntity(pkt.ObjectId); if (entity == null || !entity.Usable) { return; } World world = null; Portal p = null; if (entity is Portal) { p = entity as Portal; world = p.WorldInstance; } if (world == null) { if (p != null) { bool setWorldInstance = true; string d = ""; if (XmlDatas.IdToDungeon.TryGetValue(entity.ObjectType, out d)) { world = RealmManager.AddWorld(new XMLWorld(XmlDatas.DungeonDescs[d])); } else { switch (entity.ObjectType) //handling default case for not found. Add more as implemented { case 0x070e: case 0x0703: //portal of cowardice { if (RealmManager.PlayerWorldMapping.ContainsKey(this.AccountId)) //may not be valid, realm recycled? { world = RealmManager.PlayerWorldMapping[this.AccountId]; //also reconnecting to vault is a little unexpected } else if (world.Id == -5 || world.Id == -11) { world = RealmManager.GetWorld(World.NEXUS_ID); } else { world = RealmManager.GetWorld(World.NEXUS_ID); } } break; case 0x0712: world = RealmManager.GetWorld(World.NEXUS_ID); break; case 0x071d: world = RealmManager.GetWorld(World.NEXUS_ID); break; case 0x071c: world = RealmManager.Monitor.GetRandomRealm(); break; case 0x0720: world = RealmManager.PlayerVault(psr); setWorldInstance = false; break; case 0x071e: world = RealmManager.AddWorld(new Kitchen()); break; case 0x0ffa: //these need to match IDs //world = RealmManager.GetWorld(World.GauntletMap); break; //this creates a singleton dungeon world = RealmManager.AddWorld(new Island()); break; //this allows each dungeon to be unique case 0x0ffc: world = RealmManager.AddWorld(new WineCellarMap()); break; case 0x1900: world = RealmManager.AddWorld(new ArenaMap()); break; case 0x0730: world = RealmManager.AddWorld(new OceanTrench()); break; case 0x070c: world = RealmManager.AddWorld(new SpriteWorld()); break; case 0x071b: world = RealmManager.AddWorld(new Abyss()); break; case 0x071a: world = RealmManager.AddWorld(new UndeadLair()); break; case 0x1901: world = RealmManager.AddWorld(new VoidWorld()); break; case 0x072c: world = RealmManager.AddWorld(new TombMap()); break; case 0x0742: world = RealmManager.AddWorld(new BeachZone()); break; case 0x0718: world = RealmManager.AddWorld(new SnakePit()); break; case 0x0890: world = RealmManager.AddWorld(new MadLabMap()); break; case 0x1905: world = RealmManager.AddWorld(new BattleArenaMap()); setWorldInstance = false; break; case 0x1919: world = RealmManager.AddWorld(new Secret()); break; case 0x1923: world = RealmManager.AddWorld(new ZombieMap()); break; case 0x195d: world = RealmManager.AddWorld(new MarketMap()); break; case 0x195f: world = RealmManager.AddWorld(new Mine()); break; default: SendError("Portal Not Implemented!"); break; } } if (setWorldInstance) { p.WorldInstance = world; } } else { switch (entity.ObjectType) // Special Portals that cannot be the portal class { case 0x072f: world = RealmManager.GuildHallWorld(Guild); break; default: psr.SendPacket(new TextPacket { BubbleTime = 0, Stars = -1, Name = "", Text = "Semi-Portal Not Implemented!" }); break; } } } //used to match up player to last realm they were in, to return them to it. Sometimes is odd, like from Vault back to Vault... if (RealmManager.PlayerWorldMapping.ContainsKey(this.AccountId)) { World tempWorld; RealmManager.PlayerWorldMapping.TryRemove(this.AccountId, out tempWorld); } RealmManager.PlayerWorldMapping.TryAdd(this.AccountId, Owner); psr.Reconnect(new ReconnectPacket() { Host = "", Port = 2050, GameId = world.Id, Name = world.Name, Key = Empty <byte> .Array, }); }
private void UxLogoutButton_Clicked(object sender, RoutedEventArgs e) { RealmManager.RemoveAll <Employee>(); RealmManager.RemoveAll <Ingredient>(); On_BackRequested(); }
public override World GetInstance(ClientProcessor psr) { return(RealmManager.AddWorld(new Vault(false, psr))); }
public ReviewStatList(IList <Review> reviews) { OverallReviewStats = new List <OverallReviewStat>(); WaitstaffReviewStats = new List <WaitstaffReviewStat>(); FoodReviewStats = new List <FoodReviewStat>(); int total1 = 0; int numReviews1 = 0; int total2 = 0; int numReviews2 = 0; int total3 = 0; int numReviews3 = 0; foreach (Review review in reviews) { if (review.question01_rating != null) { OverallReviewStat overallReviewStat = new OverallReviewStat(); total1 += (int)review.question01_rating; numReviews1++; overallReviewStat.Rating = (int)review.question01_rating; overallReviewStat.DateTime = review.createdAt.Substring(11, 8) + " " + review.createdAt.Substring(5, 2) + "/" + review.createdAt.Substring(8, 2) + "/" + review.createdAt.Substring(0, 4); overallReviewStat.Message = review.question01_reason; //wire it into the list OverallReviewStats.Add(overallReviewStat); } if (review.question02_rating != null) { WaitstaffReviewStat waitstaffReviewStat = new WaitstaffReviewStat(); total2 += (int)review.question02_rating; numReviews2++; waitstaffReviewStat.Rating = (int)review.question02_rating; waitstaffReviewStat.DateTime = review.createdAt.Substring(11, 8) + " " + review.createdAt.Substring(5, 2) + "/" + review.createdAt.Substring(8, 2) + "/" + review.createdAt.Substring(0, 4); waitstaffReviewStat.Message = review.question02_reason; //get employee name var emp = RealmManager.Find <Employee>(review.employee_id); if (emp != null) { waitstaffReviewStat.Server = emp.first_name; } //wire it into the list WaitstaffReviewStats.Add(waitstaffReviewStat); } if (review.question03_rating != null) { FoodReviewStat foodReviewStat = new FoodReviewStat(); total3 += (int)review.question03_rating; numReviews3++; foodReviewStat.Rating = (int)review.question03_rating; foodReviewStat.DateTime = review.createdAt.Substring(11, 8) + " " + review.createdAt.Substring(5, 2) + "/" + review.createdAt.Substring(8, 2) + "/" + review.createdAt.Substring(0, 4); foodReviewStat.Message = review.question03_reason; //get food list foodReviewStat.MenuItemNames = new List <OrderItem>(); var order = RealmManager.Find <Order>(review.order_id); if (order != null) { foreach (OrderItem orderItem in order.menuItems) { foodReviewStat.MenuItemNames.Add(orderItem); } } FoodReviewStats.Add(foodReviewStat); } } //get averages if (numReviews1 != 0) { Average1 = Convert.ToDouble(total1 / numReviews1); } if (numReviews2 != 0) { Average2 = Convert.ToDouble(total2 / numReviews2); } if (numReviews3 != 0) { Average3 = Convert.ToDouble(total3 / numReviews3); } }
public ConnectedObject(RealmManager manager, ushort objType) : base(manager, objType, null, true, false, true) { }
public override World GetInstance(ClientProcessor psr) { return RealmManager.AddWorld(new Abyss()); }
private Portal(RealmManager manager, PortalDesc desc, int?life) : base(manager, desc.ObjectType, life, false, true, false) { ObjectDesc = desc; Name = desc.DisplayId; }
public static void Convert(RealmManager manager, string from, string to) { byte[] x = Convert(manager, File.ReadAllText(from)); File.WriteAllBytes(to, x); }
public ConnectedObject(RealmManager manager, ushort objType) : base(manager, objType, null, true, false, true) { }
public Enemy(RealmManager manager, ushort objType) : base(manager, objType) { stat = ObjectDesc.MaxHP == 0; counter = new DamageCounter(this); }
public override World GetInstance(ClientProcessor psr) { return(RealmManager.AddWorld(new ExportedMap(js, name))); }
private static void Main(string[] args) { Console.Title = "wServer"; try { XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net_wServer.config")); Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; Thread.CurrentThread.Name = "Entry"; Settings = new SimpleSettings("wServer"); new Database(); manager = new RealmManager( Settings.GetValue <int>("maxClients", "50"), Settings.GetValue <int>("tps", "20")); WhiteList = Settings.GetValue <bool>("whiteList", "false"); Verify = Settings.GetValue <bool>("verifyEmail", "false"); WhiteListTurnOff = Settings.GetValue <DateTime>("whitelistTurnOff"); manager.Initialize(); manager.Run(); Server server = new Server(manager); PolicyServer policy = new PolicyServer(); Console.CancelKeyPress += (sender, e) => e.Cancel = true; policy.Start(); server.Start(); new Thread(AutoNotify).Start(); if (Settings.GetValue <bool>("broadcastNews", "false") && File.Exists("news.txt")) { new Thread(autoBroadcastNews).Start(); } log.Info("Server initialized."); uint key = 0; while ((key = (uint)Console.ReadKey(true).Key) != (uint)ConsoleKey.Escape) { if (key == (2 | 80)) { Settings.Reload(); } } log.Info("Terminating..."); server.Stop(); policy.Stop(); manager.Stop(); log.Info("Server terminated."); } catch (Exception e) { log.Fatal(e); foreach (var c in manager.Clients) { c.Value.Disconnect(); } Console.ReadLine(); } }
public static Decoy DecoyRandom(RealmManager manager, Player player, int duration, float tps) { Decoy d = new Decoy(manager, player, duration, tps); d.direction = d.GetRandDirection(); return d; }
public override World GetInstance(Client client) { return(RealmManager.AddWorld(new ZombieMap())); }
public IEnumerable <Entity> InstantiateEntities(RealmManager manager, IntPoint offset = new IntPoint()) { foreach (var i in _entities) { var entity = Entity.Resolve(manager, i.Item2); entity.Move(i.Item1.X + 0.5f + offset.X, i.Item1.Y + 0.5f + offset.Y); if (i.Item3 != null) { foreach (var item in i.Item3.Split(';')) { string[] kv = item.Split(':'); switch (kv[0]) { case "hp": (entity as Enemy).HP = Utils.GetInt(kv[1]); (entity as Enemy).MaximumHP = (entity as Enemy).HP; break; case "name": entity.Name = kv[1]; break; case "size": entity.SetDefaultSize(Math.Min(500, Utils.GetInt(kv[1]))); break; case "eff": entity.ConditionEffects = (ConditionEffects)ulong.Parse(kv[1]); break; case "conn": (entity as ConnectedObject).Connection = ConnectionInfo.Infos[(uint)Utils.GetInt(kv[1])]; break; case "mtype": (entity as Merchant).Item = (ushort)Utils.GetInt(kv[1]); break; case "mcost": (entity as SellableObject).Price = Math.Max(0, Utils.GetInt(kv[1])); break; case "mcur": (entity as SellableObject).Currency = (CurrencyType)Utils.GetInt(kv[1]); break; case "mamnt": (entity as Merchant).Count = Utils.GetInt(kv[1]); break; case "mtime": (entity as Merchant).TimeLeft = Utils.GetInt(kv[1]); break; case "mdisc": // not implemented break; case "mrank": case "stars": // provided for backwards compatibility with older maps (entity as SellableObject).RankReq = Utils.GetInt(kv[1]); break; case "xOffset": var xo = float.Parse(kv[1]); entity.Move(entity.X + xo, entity.Y); break; case "yOffset": var yo = float.Parse(kv[1]); entity.Move(entity.X, entity.Y + yo); break; } } } yield return(entity); } }
public override World GetInstance(ClientProcessor psr) { return(RealmManager.AddWorld(new ElderUndeadL())); }
public Sign(RealmManager manager, ushort objType) : base(manager, objType, null, true, false, false) { }
public TowerPortal(RealmManager manager, int floor) : base(manager, manager.GameData.IdToObjectType["Tower Portal"], null) { Floor = floor; }
public Player(RealmManager manager, Client client) : base(manager, client.Character.ObjectType, client.Random) { try { if (client.Account.Admin == true) { Admin = 1; } AccountType = ComparableExtension.RankToAccountType(client.Account.Rank); Client = client; Manager = client.Manager; StatsManager = new StatsManager(this, client.Random.CurrentSeed); Name = client.Account.Name; AccountId = client.Account.AccountId; FameCounter = new FameCounter(this); Tokens = client.Account.FortuneTokens; HpPotionPrice = 5; MpPotionPrice = 5; Level = client.Character.Level == 0 ? 1 : client.Character.Level; Experience = client.Character.Experience; ExperienceGoal = GetExpGoal(Level); Stars = GetStars(); Texture1 = client.Character.Tex1; Texture2 = client.Character.Tex2; Credits = client.Account.Credits; NameChosen = client.Account.NameChosen; CurrentFame = client.Account.Fame; Fame = client.Character.Fame; LootDropBoostTimeLeft = client.Character.LootDropTimer; lootDropBoostFreeTimer = LootDropBoost; LootTierBoostTimeLeft = client.Character.LootTierTimer; lootTierBoostFreeTimer = LootTierBoost; FameGoal = GetFameGoal(FameCounter.ClassStats[ObjectType].BestFame); Glowing = false; Guild = ""; GuildRank = -1; HP = client.Character.HP <= 0 ? (int)ObjectDesc.MaxHP : client.Character.HP; Mp = client.Character.MP; ConditionEffects = 0; OxygenBar = 100; HasBackpack = client.Character.HasBackpack == true; PlayerSkin = Client.Account.OwnedSkins.Contains(Client.Character.Skin) ? Client.Character.Skin : 0; HealthPotions = client.Character.HealthPotions < 0 ? 0 : client.Character.HealthPotions; MagicPotions = client.Character.MagicPotions < 0 ? 0 : client.Character.MagicPotions; try { Locked = client.Account.Database.GetLockeds(client.Account); Ignored = client.Account.Database.GetIgnoreds(client.Account); Muted = client.Account.Muted; } catch (Exception ex) { log.Error(ex); } if (HasBackpack) { Item[] inv = client.Character.Items.Select( _ => _ == -1 ? null : (Manager.GameData.Items.ContainsKey((ushort)_) ? Manager.GameData.Items[(ushort)_] : null)) .ToArray(); Item[] backpack = client.Character.Backpack.Select( _ => _ == -1 ? null : (Manager.GameData.Items.ContainsKey((ushort)_) ? Manager.GameData.Items[(ushort)_] : null)) .ToArray(); Inventory = inv.Concat(backpack).ToArray(); XElement xElement = Manager.GameData.ObjectTypeToElement[ObjectType].Element("SlotTypes"); if (xElement != null) { int[] slotTypes = Utils.FromCommaSepString32( xElement.Value); Array.Resize(ref slotTypes, 20); SlotTypes = slotTypes; } } else { Inventory = client.Character.Items.Select( _ => _ == -1 ? null : (Manager.GameData.Items.ContainsKey((ushort)_) ? Manager.GameData.Items[(ushort)_] : null)) .ToArray(); XElement xElement = Manager.GameData.ObjectTypeToElement[ObjectType].Element("SlotTypes"); if (xElement != null) { SlotTypes = Utils.FromCommaSepString32( xElement.Value); } } Stats = (int[])client.Character.Stats.Clone(); for (var i = 0; i < SlotTypes.Length; i++) { if (SlotTypes[i] == 0) { SlotTypes[i] = 10; } } if (Client.Account.Rank >= 3) { return; } for (var i = 0; i < 4; i++) { if (Inventory[i]?.SlotType != SlotTypes[i]) { Inventory[i] = null; } } } catch (Exception e) { log.Error(e); } }
public Player(RealmManager manager, Client psr) : base(manager, (ushort)psr.Character.ObjectType, psr.Random) { try { Client = psr; Manager = psr.Manager; StatsManager = new StatsManager(this, psr.Random.CurrentSeed); Name = psr.Account.Name; AccountId = psr.Account.AccountId; FameCounter = new FameCounter(this); Tokens = psr.Account.FortuneTokens; HpPotionPrice = 5; MpPotionPrice = 5; Level = psr.Character.Level == 0 ? 1 : psr.Character.Level; Experience = psr.Character.Exp; ExperienceGoal = GetExpGoal(Level); Stars = GetStars(); Texture1 = psr.Character.Tex1; Texture2 = psr.Character.Tex2; Credits = psr.Account.Credits; NameChosen = psr.Account.NameChosen; CurrentFame = psr.Account.Stats.Fame; Fame = psr.Character.CurrentFame; XpBoosted = psr.Character.XpBoosted; XpBoostTimeLeft = psr.Character.XpTimer; _xpFreeTimer = XpBoostTimeLeft != -1.0; LootDropBoostTimeLeft = psr.Character.LDTimer; _lootDropBoostFreeTimer = LootDropBoost; LootTierBoostTimeLeft = psr.Character.LTTimer; _lootTierBoostFreeTimer = LootTierBoost; var state = psr.Account.Stats.ClassStates.SingleOrDefault(_ => Utils.FromString(_.ObjectType) == ObjectType); FameGoal = GetFameGoal(state?.BestFame ?? 0); Glowing = IsUserInLegends(); Guild = GuildManager.Add(this, psr.Account.Guild); HP = psr.Character.HitPoints <= 0 ? psr.Character.MaxHitPoints : psr.Character.HitPoints; Mp = psr.Character.MagicPoints; ConditionEffects = 0; OxygenBar = 100; HasBackpack = psr.Character.HasBackpack == 1; PlayerSkin = Client.Account.OwnedSkins.Contains(Client.Character.Skin) ? Client.Character.Skin : 0; HealthPotions = psr.Character.HealthStackCount < 0 ? 0 : psr.Character.HealthStackCount; MagicPotions = psr.Character.MagicStackCount < 0 ? 0 : psr.Character.MagicStackCount; Locked = psr.Account.Locked ?? new List <string>(); Ignored = psr.Account.Ignored ?? new List <string>(); try { Manager.Database.DoActionAsync(db => { Locked = db.GetLockeds(AccountId); Ignored = db.GetIgnoreds(AccountId); Muted = db.IsMuted(AccountId); DailyQuest = psr.Account.DailyQuest; }); } catch (Exception ex) { Console.WriteLine(ex); } if (HasBackpack) { using (Database db = new Database()) { var inv = db.getSerialInfo(psr.Character.Equipment, Manager.GameData); var backpack = db.getSerialInfo(psr.Character.Backpack, Manager.GameData); Inventory = inv.Concat(backpack).ToArray(); } var xElement = Manager.GameData.ObjectTypeToElement[ObjectType].Element("SlotTypes"); if (xElement != null) { var slotTypes = Utils.FromCommaSepString32( xElement.Value); Array.Resize(ref slotTypes, 20); SlotTypes = slotTypes; } } else { using (Database db = new Database()) { Inventory = db.getSerialInfo(psr.Character.Equipment, Manager.GameData); } var xElement = Manager.GameData.ObjectTypeToElement[ObjectType].Element("SlotTypes"); if (xElement != null) { SlotTypes = Utils.FromCommaSepString32( xElement.Value); } } Stats = new[] { psr.Character.MaxHitPoints, psr.Character.MaxMagicPoints, psr.Character.Attack, psr.Character.Defense, psr.Character.Speed, psr.Character.HpRegen, psr.Character.MpRegen, psr.Character.Dexterity }; Pet = null; for (var i = 0; i < SlotTypes.Length; i++) { if (SlotTypes[i] == 0) { SlotTypes[i] = 10; } } if (Client.Account.Rank >= 3) { return; } for (var i = 0; i < 4; i++) { if (Inventory[i]?.SlotType != SlotTypes[i]) { Inventory[i] = null; } } } catch (Exception e) { Console.WriteLine(e); } }
public void Populate(RealmManager manager, Enemy enemy, Tuple <Player, int> playerDat, Random rand, string lootState, IList <LootDef> lootDefs) { loots[rand.Next(0, loots.Length)].Populate(manager, enemy, playerDat, rand, lootState, lootDefs); }
public override World GetInstance(ClientProcessor psr) { return(RealmManager.AddWorld(new SpriteWorld())); }
public override World GetInstance(ClientProcessor psr) { return(RealmManager.AddWorld(new GauntletMap())); }
private async void UpdateHotItem() { //initalizing last week date DateTime td = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek); //sets td to the beginning of the week DateTime lastWeekStart = new DateTime(td.Year, td.Month, td.Day, 0, 0, 0).AddDays(-7); //Checking if hotItem are still up to date if (RealmManager.All <HotItem>().FirstOrDefault() != null) { //getting last time hot items have been updated DateTime lastUpdated = DateTime.Parse(RealmManager.All <HotItem>().FirstOrDefault().createdAt); if (DateTime.Compare(lastWeekStart, lastUpdated) == 0) { //return; } } RealmManager.RemoveAll <OrderList>(); RealmManager.RemoveAll <MenuItemList>(); List <MenuItem> somelist = new List <MenuItem>(); //finding each distinct category and adding it await GetOrdersRequest.SendGetOrdersRequest(); await GetMenuItemsRequest.SendGetMenuItemsRequest(); //creating a list of every menu item id for each order including duplicates List <OrderItem> menuItemIds = new List <OrderItem>(); //creating a dictionary to keep track of the count of each menuItem Dictionary <String, Dictionary <MenuItem, int> > menuItemCounter = new Dictionary <String, Dictionary <MenuItem, int> >(); foreach (Order o in RealmManager.All <OrderList>().FirstOrDefault().orders) { //this will ignore all uncompleted orders if (o.time_completed == null) { continue; } DateTime orderTime = DateTime.ParseExact(o.time_completed.Replace('T', ' ').TrimEnd('Z'), "yyyy-MM-dd HH:mm:ss.fff", System.Globalization.CultureInfo.InvariantCulture); //Makes it easier for keying the revenue map by WEEK orderTime = orderTime.AddDays(-(int)orderTime.DayOfWeek); orderTime = new DateTime(orderTime.Year, orderTime.Month, orderTime.Day, 0, 0, 0); //only added menuItems from orders for the current month if (DateTime.Compare(lastWeekStart, orderTime) == 0) { foreach (OrderItem oi in o.menuItems) { menuItemIds.Add(oi); //add next menuitem id } } } List <MenuItem> tempList = RealmManager.All <MenuItem>().ToList(); //updating menuItem map to see how often each was ordered foreach (OrderItem o in menuItemIds) { MenuItem tempMenuItem = tempList.Find(x => x._id == o._id); if (tempMenuItem == null) { continue; } if (menuItemCounter.ContainsKey(tempMenuItem.category)) { try { menuItemCounter[tempMenuItem.category][tempMenuItem] = menuItemCounter[tempMenuItem.category][tempMenuItem] + 1; } catch { menuItemCounter[tempMenuItem.category].Add(tempMenuItem, 1); } } else { menuItemCounter[tempMenuItem.category] = new Dictionary <MenuItem, int> { { tempMenuItem, 1 } }; } } foreach (string key in menuItemCounter.Keys) { KeyValuePair <MenuItem, int> topMenuItem; //finding the top menuItem for each category topMenuItem = menuItemCounter[key].Aggregate((x, y) => x.Value > y.Value ? x : y); //grabbing what was the top menuItem in the category from the previous week HotItem tempItem = RealmManager.Find <HotItem>(topMenuItem.Key.category); //if hotitem is in realm yet if (tempItem == null) { //creating new hotitem object HotItem tempHotItem = new HotItem(); tempHotItem.category = topMenuItem.Key.category; tempHotItem.createdAt = lastWeekStart.ToString(); tempHotItem._id = topMenuItem.Key._id; //getting menuItem object from list using hotItem MenuItem tempMenuItem = tempList.Find(x => x._id == topMenuItem.Key._id); RealmManager.Write(() => tempMenuItem.isHot = true); //updating database var response = await UpdateHotItemRequest.SendUpdateMenuItemRequest(tempMenuItem); //updaing realm RealmManager.AddOrUpdate <HotItem>(tempHotItem); if (!response) { ContentDialog responseAlert = new ContentDialog { Title = "Unsuccessful", Content = "Hot Item has not been updated successfully", CloseButtonText = "Ok" }; ContentDialogResult result = await responseAlert.ShowAsync(); } } else { //if the hot item is infact new if (tempItem._id != topMenuItem.Key._id) { //finding old hotitem menuItem object MenuItem oldMenuItem = tempList.Find(x => x._id == tempItem._id); RealmManager.Write(() => oldMenuItem.isHot = false); //updating old hotItem in database var Firstresponse = await UpdateHotItemRequest.SendUpdateMenuItemRequest(oldMenuItem); if (!Firstresponse) { ContentDialog responseAlert = new ContentDialog { Title = "Unsuccessful", Content = "Original hot item has not been updated successfully", CloseButtonText = "Ok" }; ContentDialogResult result = await responseAlert.ShowAsync(); } //finding new menuItem object using new hotItem MenuItem newMenuItem = tempList.Find(x => x._id == topMenuItem.Key._id); RealmManager.Write(() => newMenuItem.isHot = true); var Secondresponse = await UpdateHotItemRequest.SendUpdateMenuItemRequest(newMenuItem); //updating hot item in realm to match new hot Item RealmManager.Write(() => { tempItem._id = topMenuItem.Key._id; tempItem.createdAt = lastWeekStart.ToString(); }); if (!Secondresponse) { ContentDialog responseAlert = new ContentDialog { Title = "Unsuccessful", Content = "Hot Item has not been updated successfully", CloseButtonText = "Ok" }; ContentDialogResult result = await responseAlert.ShowAsync(); } } } } ContentDialog responseAlertCheck = new ContentDialog { Title = "Successful", Content = "Hot Items have been updated successfully", CloseButtonText = "Ok" }; ContentDialogResult resultCheck = await responseAlertCheck.ShowAsync(); }
public Projectile(RealmManager manager, ProjectileDesc desc) : base(manager, manager.Resources.GameData.IdToObjectType[desc.ObjectId]) { ProjDesc = desc; }
public static async void Create(RealmManager manager, Player player, Item egg) { await manager.Database.DoActionAsync(db => { PetStruct petStruct = GetPetStruct(manager, egg.Family, (Rarity)egg.Rarity); PetSkin skin = manager.GameData.IdToPetSkin[petStruct.DefaultSkin]; PetItem item = new PetItem { InstanceId = db.GetNextPetId(player.AccountId), Rarity = (int)egg.Rarity, SkinName = skin.DisplayId, Skin = skin.ObjectType, Type = petStruct.ObjectType, Abilities = GetPetAbilites(egg, petStruct), }; switch (item.Rarity) { case 1: item.MaxAbilityPower = 50; item.Abilities[0].Power = 30; item.Abilities[0].Points = 2080; item.Abilities[1].Power = 11; item.Abilities[1].Points = 290; item.Abilities[2].Power = 1; item.Abilities[2].Points = 0; break; case 2: item.MaxAbilityPower = 70; item.Abilities[0].Power = 50; item.Abilities[0].Points = 10607; item.Abilities[1].Power = 30; item.Abilities[1].Points = 2080; item.Abilities[2].Power = 1; item.Abilities[2].Points = 0; break; case 3: item.MaxAbilityPower = 90; item.Abilities[0].Power = 70; item.Abilities[0].Points = 50355; item.Abilities[1].Power = 50; item.Abilities[1].Points = 10607; item.Abilities[2].Power = 30; item.Abilities[2].Points = 2080; break; case 4: item.MaxAbilityPower = 125; item.Abilities[0].Power = 90; item.Abilities[0].Points = 235610; item.Abilities[1].Power = 70; item.Abilities[1].Points = 50354; item.Abilities[2].Power = 50; item.Abilities[2].Points = 10607; break; default: item.MaxAbilityPower = 30; item.Abilities[0].Power = 1; item.Abilities[0].Points = 0; item.Abilities[1].Power = 1; item.Abilities[1].Points = 0; item.Abilities[2].Power = 1; item.Abilities[2].Points = 0; break; } Pet pet = new Pet(manager, item, null); int x; int y; Random rand = new Random((int)DateTime.Now.Ticks); do { x = rand.Next(0, player.Owner.Map.Width); y = rand.Next(0, player.Owner.Map.Height); } while (player.Owner.Map[x, y].Region != TileRegion.Spawn); pet.Move(x + 0.5f, y + 0.5f); db.CreatePet(player.Client.Account, item); player.Owner.EnterWorld(pet); player.Client.SendPacket(new HatchEggPacket { PetName = skin.DisplayId, PetSkinId = skin.ObjectType }); player.Client.SendPacket(new UpdatePacket { Tiles = new UpdatePacket.TileData[0], NewObjects = new ObjectDef[1] { pet.ToDefinition() }, RemovedObjectIds = new int[0] }); }); }
public IEnumerable<Entity> InstantiateEntities(RealmManager manager) { foreach (var i in entities) { var entity = Entity.Resolve(i.Item2); entity.Move(i.Item1.X + 0.5f, i.Item1.Y + 0.5f); if (i.Item3 != null) foreach (var item in i.Item3.Split(';')) { string[] kv = item.Split(':'); switch (kv[0]) { case "name": entity.Name = kv[1]; break; case "size": entity.Size = Utils.FromString(kv[1]); break; case "eff": entity.ConditionEffects = (ConditionEffects)Utils.FromString(kv[1]); break; case "conn": (entity as ConnectedObject).Connection = ConnectionInfo.Infos[(uint)Utils.FromString(kv[1])]; break; case "mtype": (entity as Merchants).custom = true; (entity as Merchants).mType = Utils.FromString(kv[1]); break; //case "mcount": // entity.Stats[StatsType.MerchantRemainingCount] = Utils.FromString(kv[1]); break; NOT NEEDED FOR NOW //case "mtime": // entity.Stats[StatsType.MerchantRemainingMinute] = Utils.FromString(kv[1]); break; case "mcost": (entity as SellableObject).Price = Utils.FromString(kv[1]); break; case "mcur": (entity as SellableObject).Currency = (CurrencyType)Utils.FromString(kv[1]); break; //case "nstar": // entity.Stats[StatsType.NameChangerStar] = Utils.FromString(kv[1]); break; } } yield return entity; } }
public ClosedVaultChest(RealmManager manager, ushort objType) : base(manager, objType) { Price = 1000; Currency = CurrencyType.Gold; }
public static async void Create(RealmManager manager, Player player, Item egg) { await manager.Database.DoActionAsync(db => { PetStruct petStruct = GetPetStruct(manager, egg.Family, (Rarity)egg.Rarity); PetSkin skin = manager.GameData.IdToPetSkin[petStruct.DefaultSkin]; PetItem item = new PetItem { InstanceId = db.GetNextPetId(player.AccountId), Rarity = (int)egg.Rarity, Family = egg.Family.ToString(), SkinName = skin.DisplayId, Skin = skin.ObjectType, Type = petStruct.ObjectType, Abilities = GetPetAbilites(egg, petStruct), }; switch (item.Rarity) { case 1: item.MaxAbilityPower = 50; item.Abilities[0].Power = 30; item.Abilities[0].Points = 2080; item.Abilities[1].Power = 11; item.Abilities[1].Points = 290; item.Abilities[2].Power = 0; item.Abilities[2].Points = 0; break; case 2: item.MaxAbilityPower = 70; item.Abilities[0].Power = 50; item.Abilities[0].Points = 10607; item.Abilities[1].Power = 30; item.Abilities[1].Points = 2080; item.Abilities[2].Power = 0; item.Abilities[2].Points = 0; break; case 3: item.MaxAbilityPower = 90; item.Abilities[0].Power = 70; item.Abilities[0].Points = 50355; item.Abilities[1].Power = 50; item.Abilities[1].Points = 10607; item.Abilities[2].Power = 30; item.Abilities[2].Points = 2080; break; case 4: item.MaxAbilityPower = 100; item.Abilities[0].Power = 90; item.Abilities[0].Points = 235610; item.Abilities[1].Power = 70; item.Abilities[1].Points = 50354; item.Abilities[2].Power = 50; item.Abilities[2].Points = 10607; break; default: item.MaxAbilityPower = 30; item.Abilities[0].Power = 1; item.Abilities[0].Points = 0; item.Abilities[1].Power = 0; item.Abilities[1].Points = 0; item.Abilities[2].Power = 0; item.Abilities[2].Points = 0; break; } Pet pet = new Pet(manager, item, null); int x; int y; Random rand = new Random((int)DateTime.Now.Ticks); do { x = rand.Next(0, player.Owner.Map.Width); y = rand.Next(0, player.Owner.Map.Height); } while (player.Owner.Map[x, y].Region != TileRegion.Spawn); pet.Move(x + 0.5f, y + 0.5f); db.CreatePet(player.Client.Account, item); player.Owner.EnterWorld(pet); player.Client.SendPacket(new HatchEggPacket { PetName = skin.DisplayId, PetSkinId = skin.ObjectType }); player.Client.SendPacket(new UpdatePacket { Tiles = new UpdatePacket.TileData[0], NewObjects = new ObjectDef[1] { pet.ToDefinition() }, RemovedObjectIds = new int[0] }); }); }
public Wall(RealmManager manager, ushort objType, XElement node) : base(manager, objType, GetHP(node), true, false, true) { }
public override World GetInstance(ClientProcessor psr) { return(RealmManager.AddWorld(new LairofDraconis())); }
public Projectile(RealmManager manager, ProjectileDesc desc) : base(manager, manager.GameData.IdToObjectType[desc.ObjectId]) { Descriptor = desc; }
public Sign(RealmManager manager, ushort objType) : base(manager, objType, null, true, false, false) { }
private Portal(RealmManager manager, PortalDesc desc, int? life) : base(manager, desc.ObjectType, life, false, true, false) { ObjectDesc = desc; Name = desc.DisplayId; }
public Container(RealmManager manager, ushort id) : base(manager, id, null, false, false, false) { BagOwners = new int[0]; }
public static PetStruct GetPetStruct(RealmManager manager, Family? petFamily, Rarity rarity) { Random rand = new Random((int)DateTime.Now.Ticks); List<PetStruct> structs = new List<PetStruct>(); Rarity petRarity = rarity; if (rarity == Rarity.Uncommon) petRarity = Rarity.Common; else if (rarity == Rarity.Legendary) petRarity = Rarity.Rare; foreach (var x in manager.GameData.TypeToPet) { if (petFamily == null && x.Value.PetRarity == petRarity) { structs.Add(x.Value); continue; } if (x.Value.PetFamily == petFamily && x.Value.PetRarity == petRarity) structs.Add(x.Value); } PetStruct petStruct = structs[rand.Next(structs.Count)]; return petStruct; }
public static void Initialize() { Module = ModuleManager.GetInstance(); Realm = RealmManager.GetInstance(); }
public Wall(RealmManager manager, ushort objType, XElement node) : base(manager, objType, GetHP(node), true, false, true) { }
public void ChangeGuildRank(RealmTime t, ChangeGuildRankPacket pkt) { var pname = pkt.Name; var rank = pkt.GuildRank; if (GuildRank >= 20) { var other = RealmManager.FindPlayer(pname); if (other != null && other.Guild == Guild) { var rankname = ResolveRankName(other.GuildRank); var rankname2 = ResolveRankName(rank); other.GuildRank = rank; other.Client.Account.Guild.Rank = rank; new Database().ChangeGuild(other.Client.Account, other.Client.Account.Guild.Id, other.GuildRank, other.Client.Account.Guild.Fame, false); other.UpdateCount++; foreach (var p in RealmManager.GuildMembersOf(Guild)) { p.Client.SendPacket(new TextPacket() { BubbleTime = 0, Stars = -1, Name = "", Recipient = "*Guild*", Text = other.Client.Account.Name + " has been demoted to " + rankname2 + "." }); } } else { try { var db = new Database(); var acc = db.GetAccount(pname); if (acc.Guild.Name == Guild) { var rankname = ResolveRankName(acc.Guild.Rank); var rankname2 = ResolveRankName(rank); db.ChangeGuild(acc, acc.Guild.Id, rank, acc.Guild.Fame, false); foreach (var p in RealmManager.GuildMembersOf(Guild)) { p.Client.SendPacket(new TextPacket() { BubbleTime = 0, Stars = -1, Name = "", Recipient = "*Guild*", Text = acc.Name + " has been promoted to " + rankname2 + "." }); } } else { psr.SendPacket(new TextPacket() { BubbleTime = 0, Stars = -1, Name = "*Error*", Text = "You can only change a player in your guild." }); } } catch (Exception e) { psr.SendPacket(new TextPacket() { BubbleTime = 0, Stars = -1, Name = "*Error*", Text = e.Message }); } } } else { psr.SendPacket(new TextPacket() { BubbleTime = 0, Stars = -1, Name = "", Text = "Members and initiates cannot promote!" }); } }