Beispiel #1
0
 public static Vault FromDb(DbAccount acc, DbVault vault)
 {
     return(new Vault()
     {
         chests = Enumerable.Range(0, acc.VaultCount - 1).
                  Select(x => vault[x] ?? Enumerable.Repeat((ushort)0xffff, 8).ToArray()).ToArray()
     });
 }
Beispiel #2
0
        private void InitVault()
        {
            List <IntPoint> vaultChestPosition = new List <IntPoint>();
            IntPoint        spawn = new IntPoint(0, 0);

            int w = Map.Width;
            int h = Map.Height;

            for (int y = 0; y < h; y++)
            {
                for (int x = 0; x < w; x++)
                {
                    var tile = Map[x, y];
                    if (tile.Region == TileRegion.Spawn)
                    {
                        spawn = new IntPoint(x, y);
                    }
                    else if (tile.Region == TileRegion.Vault)
                    {
                        vaultChestPosition.Add(new IntPoint(x, y));
                    }
                }
            }
            vaultChestPosition.Sort((x, y) => Comparer <int> .Default.Compare(
                                        (x.X - spawn.X) * (x.X - spawn.X) + (x.Y - spawn.Y) * (x.Y - spawn.Y),
                                        (y.X - spawn.X) * (y.X - spawn.X) + (y.Y - spawn.Y) * (y.Y - spawn.Y)));

            dbVault = new DbVault(client.Account);
            for (int i = 0; i < client.Account.VaultCount; i++)
            {
                Container con = new Container(client.Manager, 0x0504, null, false);
                var       inv = dbVault[i].Select(x => x == 0xffff ? null : client.Manager.GameData.Items[(ushort)x]).ToArray();
                for (int j = 0; j < 8; j++)
                {
                    con.Inventory[j] = inv[j];
                }
                con.Move(vaultChestPosition[0].X + 0.5f, vaultChestPosition[0].Y + 0.5f);
                EnterWorld(con);
                vaultChestPosition.RemoveAt(0);

                vaultChests[Tuple.Create(con, i)] = con.UpdateCount;
            }
            foreach (var i in vaultChestPosition)
            {
                SellableObject x = new SellableObject(client.Manager, 0x0505);
                x.Move(i.X + 0.5f, i.Y + 0.5f);
                EnterWorld(x);
            }
        }
Beispiel #3
0
        private void Init(Client psr)
        {
            if (psr == null)
            {
                return;
            }
            AccountId       = psr.Account.AccountId;
            PlayerOwnerName = psr.Account.Name;

            List <IntPoint> vaultChestPosition = new List <IntPoint>();
            List <IntPoint> giftChestPosition  = new List <IntPoint>();
            IntPoint        spawn = new IntPoint(0, 0);

            int w = Map.Width;
            int h = Map.Height;

            for (int y = 0; y < h; y++)
            {
                for (int x = 0; x < w; x++)
                {
                    WmapTile tile = Map[x, y];
                    if (tile.Region == TileRegion.Spawn)
                    {
                        spawn = new IntPoint(x, y);
                    }
                    else if (tile.Region == TileRegion.Vault)
                    {
                        vaultChestPosition.Add(new IntPoint(x, y));
                    }
                    else if (tile.Region == TileRegion.Gifting_Chest)
                    {
                        giftChestPosition.Add(new IntPoint(x, y));
                    }
                }
            }
            vaultChestPosition.Sort((x, y) => Comparer <int> .Default.Compare(
                                        (x.X - spawn.X) * (x.X - spawn.X) + (x.Y - spawn.Y) * (x.Y - spawn.Y),
                                        (y.X - spawn.X) * (y.X - spawn.X) + (y.Y - spawn.Y) * (y.Y - spawn.Y)));

            if (psr.Account.Gifts != null)
            {
                List <GiftChest> giftChests = new List <GiftChest>();
                GiftChest        c          = new GiftChest
                {
                    Items = new List <Item>(8)
                };
                bool  wasLastElse = false;
                int[] gifts       = psr.Account.Gifts.ToArray();
                gifts.Shuffle();
                for (int i = 0; i < gifts.Count(); i++)
                {
                    if (GameServer.Manager.GameData.Items.ContainsKey((ushort)gifts[i]))
                    {
                        if (c.Items.Count < 8)
                        {
                            c.Items.Add(GameServer.Manager.GameData.Items[(ushort)gifts[i]]);
                            wasLastElse = false;
                        }
                        else
                        {
                            giftChests.Add(c);
                            c = new GiftChest
                            {
                                Items = new List <Item>(8)
                            };
                            c.Items.Add(GameServer.Manager.GameData.Items[(ushort)gifts[i]]);
                            wasLastElse = true;
                        }
                    }
                }
                if (!wasLastElse)
                {
                    giftChests.Add(c);
                }

                foreach (GiftChest chest in giftChests)
                {
                    if (giftChestPosition.Count == 0)
                    {
                        break;
                    }
                    while (chest.Items.Count < 8)
                    {
                        chest.Items.Add(null);
                    }
                    OneWayContainer con = new OneWayContainer(0x0744, null, false);
                    List <Item>     inv = chest.Items;
                    for (int j = 0; j < 8; j++)
                    {
                        con.Inventory[j] = inv[j];
                    }
                    con.Move(giftChestPosition[0].X + 0.5f, giftChestPosition[0].Y + 0.5f);
                    EnterWorld(con);
                    giftChestPosition.RemoveAt(0);
                }
            }
            dbVault = new DbVault(psr.Account);
            for (int i = 0; i < psr.Account.VaultCount; i++)
            {
                if (vaultChestPosition.Count == 0)
                {
                    break;
                }
                Container con = new Container(0x0504, null, false);
                var       inv = dbVault[i].Select(_ => _ == -1 ? null : (GameServer.Manager.GameData.Items.ContainsKey((ushort)_) ? GameServer.Manager.GameData.Items[(ushort)_] : null)).ToArray();
                for (int j = 0; j < 8; j++)
                {
                    con.Inventory[j] = inv[j];
                }
                con.Move(vaultChestPosition[0].X + 0.5f, vaultChestPosition[0].Y + 0.5f);
                EnterWorld(con);
                vaultChestPosition.RemoveAt(0);

                _vaultChests[Tuple.Create(con, i)] = con.UpdateCount;
            }

            foreach (IntPoint i in giftChestPosition)
            {
                GameObject x = new GameObject(0x0743, null, true, false, false);
                x.Move(i.X + 0.5f, i.Y + 0.5f);
                EnterWorld(x);
            }

            foreach (IntPoint i in vaultChestPosition)
            {
                SellableObject x = new SellableObject(0x0505);
                x.Move(i.X + 0.5f, i.Y + 0.5f);
                EnterWorld(x);
            }
        }