public List<int> Create(string modelId, int groupId, int quantity) { var ret = new List<int>(); Guid modelGuid; if (!Guid.TryParse(modelId, out modelGuid)) return ret; var model = Program.GameEngine.Definition.GetCardById(modelGuid); if (model == null) return ret; var group = Group.Find(groupId); if (group == null) return ret; _engine.Invoke( () => { var gt = new GameEngine.GrpTmp(group, group.Visibility, group.Viewers.ToList()); group.SetVisibility(false, false); var ids = new int[quantity]; var keys = new ulong[quantity]; for (int i = 0; i < quantity; ++i) { ulong key = (ulong)Crypto.PositiveRandom() << 32 | model.Id.Condense(); int id = Program.GameEngine.GenerateCardId(); ids[i] = id; keys[i] = Crypto.ModExp(key); ret.Add(id); var card = new Card(Player.LocalPlayer, id, key, model, true); group.AddAt(card, group.Count); } string pictureUri = model.GetPicture(); Dispatcher.CurrentDispatcher.BeginInvoke( new Func<string, BitmapImage>(ImageUtils.CreateFrozenBitmap), DispatcherPriority.ApplicationIdle, pictureUri); Program.Client.Rpc.CreateCard(ids, keys, group); switch (gt.Visibility) { case DataNew.Entities.GroupVisibility.Everybody: group.SetVisibility(true, false); break; case DataNew.Entities.GroupVisibility.Nobody: group.SetVisibility(false, false); break; default: foreach (Player p in gt.Viewers) { group.AddViewer(p, false); } break; } }); return ret; // Comment for a test. }
public List <int> Create(string modelId, int groupId, int quantity) { var ret = new List <int>(); Guid modelGuid; if (!Guid.TryParse(modelId, out modelGuid)) { return(ret); } var model = Program.GameEngine.Definition.GetCardById(modelGuid); if (model == null) { return(ret); } var group = Group.Find(groupId); if (group == null) { return(ret); } if (group.Controller != Player.LocalPlayer) { Program.GameMess.Warning(String.Format("{0} Can't create card in {1} because they don't control it.", Player.LocalPlayer.Name, group.Name)); } QueueAction( () => { var gt = new GameEngine.GrpTmp(group, group.Visibility, group.Viewers.ToList()); group.SetVisibility(false, false); var ids = new int[quantity]; var keys = new Guid[quantity]; var sizes = new string[quantity]; for (int i = 0; i < quantity; ++i) { var card = model.ToPlayCard(Player.LocalPlayer); //ulong key = (ulong)Crypto.PositiveRandom() << 32 | model.Id.Condense(); //int id = Program.GameEngine.GenerateCardId(); ids[i] = card.Id; keys[i] = card.Type.Model.Id; sizes[i] = card.Size.Name; ret.Add(card.Id); group.AddAt(card, group.Count); } string pictureUri = model.GetPicture(); Dispatcher.CurrentDispatcher.BeginInvoke( new Func <string, BitmapImage>(ImageUtils.CreateFrozenBitmap), DispatcherPriority.Background, pictureUri); Program.Client.Rpc.CreateCard(ids, keys, sizes, group); switch (gt.Visibility) { case DataNew.Entities.GroupVisibility.Everybody: group.SetVisibility(true, false); break; case DataNew.Entities.GroupVisibility.Nobody: group.SetVisibility(false, false); break; default: foreach (Player p in gt.Viewers) { group.AddViewer(p, false); } break; } }); return(ret); // Comment for a test. }