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;
 }
Ejemplo n.º 3
0
 public static void Initialize()
 {
     ModuleMgr  = ModuleManager.GetInstance();
     PatchMgr   = PatchManager.GetInstance();
     RealmMgr   = RealmManager.GetInstance();
     SessionMgr = SessionManager.GetInstance();
 }
Ejemplo n.º 4
0
 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);
 }
Ejemplo n.º 5
0
 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;
        }
Ejemplo n.º 7
0
 //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;
 }
Ejemplo n.º 8
0
 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);
        }
Ejemplo n.º 10
0
 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;
 }
Ejemplo n.º 12
0
        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;
     }
 }
Ejemplo n.º 14
0
        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);
            }
        }
Ejemplo n.º 15
0
        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;
        }
Ejemplo n.º 18
0
        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();
            }
        }
Ejemplo n.º 19
0
        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));
            }
        }
Ejemplo n.º 20
0
 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;
 }
Ejemplo n.º 22
0
        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,
            });
        }
Ejemplo n.º 23
0
 private void UxLogoutButton_Clicked(object sender, RoutedEventArgs e)
 {
     RealmManager.RemoveAll <Employee>();
     RealmManager.RemoveAll <Ingredient>();
     On_BackRequested();
 }
Ejemplo n.º 24
0
 public override World GetInstance(ClientProcessor psr)
 {
     return(RealmManager.AddWorld(new Vault(false, psr)));
 }
Ejemplo n.º 25
0
        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);
            }
        }
Ejemplo n.º 26
0
 public ConnectedObject(RealmManager manager, ushort objType)
     : base(manager, objType, null, true, false, true)
 {
 }
Ejemplo n.º 27
0
 public override World GetInstance(ClientProcessor psr)
 {
     return RealmManager.AddWorld(new Abyss());
 }
Ejemplo n.º 28
0
 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);
 }
Ejemplo n.º 30
0
 public ConnectedObject(RealmManager manager, ushort objType)
     : base(manager, objType, null, true, false, true)
 {
 }
Ejemplo n.º 31
0
 public Enemy(RealmManager manager, ushort objType)
     : base(manager, objType)
 {
     stat    = ObjectDesc.MaxHP == 0;
     counter = new DamageCounter(this);
 }
Ejemplo n.º 32
0
 public override World GetInstance(ClientProcessor psr)
 {
     return(RealmManager.AddWorld(new ExportedMap(js, name)));
 }
Ejemplo n.º 33
0
        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();
            }
        }
Ejemplo n.º 34
0
 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;
 }
Ejemplo n.º 35
0
 public override World GetInstance(Client client)
 {
     return(RealmManager.AddWorld(new ZombieMap()));
 }
Ejemplo n.º 36
0
        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);
            }
        }
Ejemplo n.º 37
0
 public override World GetInstance(ClientProcessor psr)
 {
     return(RealmManager.AddWorld(new ElderUndeadL()));
 }
Ejemplo n.º 38
0
 public Sign(RealmManager manager, ushort objType)
     : base(manager, objType, null, true, false, false)
 {
 }
Ejemplo n.º 39
0
 public TowerPortal(RealmManager manager, int floor)
     : base(manager, manager.GameData.IdToObjectType["Tower Portal"], null)
 {
     Floor = floor;
 }
Ejemplo n.º 40
0
        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);
            }
        }
Ejemplo n.º 41
0
        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);
 }
Ejemplo n.º 43
0
 public override World GetInstance(ClientProcessor psr)
 {
     return(RealmManager.AddWorld(new SpriteWorld()));
 }
Ejemplo n.º 44
0
 public override World GetInstance(ClientProcessor psr)
 {
     return(RealmManager.AddWorld(new GauntletMap()));
 }
Ejemplo n.º 45
0
        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();
        }
Ejemplo n.º 46
0
 public Projectile(RealmManager manager, ProjectileDesc desc)
     : base(manager, manager.Resources.GameData.IdToObjectType[desc.ObjectId])
 {
     ProjDesc = desc;
 }
Ejemplo n.º 47
0
        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]
                });
            });
        }
Ejemplo n.º 48
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;
     }
 }
Ejemplo n.º 49
0
 public ClosedVaultChest(RealmManager manager, ushort objType) : base(manager, objType)
 {
     Price    = 1000;
     Currency = CurrencyType.Gold;
 }
Ejemplo n.º 50
0
        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]
                });
            });
        }
Ejemplo n.º 51
0
 public Wall(RealmManager manager, ushort objType, XElement node)
     : base(manager, objType, GetHP(node), true, false, true)
 {
 }
Ejemplo n.º 52
0
 public override World GetInstance(ClientProcessor psr)
 {
     return(RealmManager.AddWorld(new LairofDraconis()));
 }
Ejemplo n.º 53
0
 public Projectile(RealmManager manager, ProjectileDesc desc)
     : base(manager, manager.GameData.IdToObjectType[desc.ObjectId])
 {
     Descriptor = desc;
 }
Ejemplo n.º 54
0
 public Sign(RealmManager manager, ushort objType) : base(manager, objType, null, true, false, false) { }
Ejemplo n.º 55
0
 private Portal(RealmManager manager, PortalDesc desc, int? life)
     : base(manager, desc.ObjectType, life, false, true, false)
 {
     ObjectDesc = desc;
     Name = desc.DisplayId;
 }
Ejemplo n.º 56
0
 public Container(RealmManager manager, ushort id)
     : base(manager, id, null, false, false, false)
 {
     BagOwners = new int[0];
 }
Ejemplo n.º 57
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;
        }
Ejemplo n.º 58
0
 public static void Initialize()
 {
     Module = ModuleManager.GetInstance();
     Realm  = RealmManager.GetInstance();
 }
Ejemplo n.º 59
0
 public Wall(RealmManager manager, ushort objType, XElement node)
     : base(manager, objType, GetHP(node), true, false, true)
 {
 }
Ejemplo n.º 60
0
        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!"
                });
            }
        }