Exemple #1
0
        private bool SellItem(MsgInformationEx MsgDTO, DriftBottleItemModel item, int count = 1)
        {
            var record = ItemCollectionRecord.Get(MsgDTO.FromQQ);

            if (!record.CheckItem(item.Name, count))
            {
                MsgSender.PushMsg(MsgDTO, "你的背包里没有足够多的该物品!");
                return(false);
            }

            var price = HonorSvc.GetItemPrice(item, MsgDTO.FromQQ);
            var msg   = $"贩卖 {item.Name}*{count} 将获得 {(price * count).CurencyFormat()},是否确认贩卖?";

            if (!WaiterSvc.WaitForConfirm(MsgDTO, msg))
            {
                MsgSender.PushMsg(MsgDTO, "交易取消!");
                return(false);
            }

            var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);

            TransHelper.SellItemToShop(item.Name, osPerson, count);
            osPerson.Update();

            MsgSender.PushMsg(MsgDTO, $"贩卖成功!你当前拥有金币 {osPerson.Golds.CurencyFormat()}");
            return(true);
        }
Exemple #2
0
        public bool Reborn(MsgInformationEx MsgDTO, object[] param)
        {
            var archaeologist = Archaeologist.Get(MsgDTO.FromQQ);

            if (!archaeologist.IsDead)
            {
                MsgSender.PushMsg(MsgDTO, "活着的人,是不需要复活的!");
                return(false);
            }

            var asset = ArchAsset.Get(MsgDTO.FromQQ);

            if (asset.RedStarStone < 1)
            {
                MsgSender.PushMsg(MsgDTO, $"你没有足够的赤星石来复活!({asset.RedStarStone}/1)");
                return(false);
            }

            var msg = $"此操作将会花费赤星石*1,你当前剩余赤星石({asset.RedStarStone})颗,是否确认?";

            if (!WaiterSvc.WaitForConfirm(MsgDTO, msg, 10))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            asset.RedStarStone--;
            archaeologist.RebornTime = DateTime.Now;

            asset.Update();
            archaeologist.Update();

            MsgSender.PushMsg(MsgDTO, "祈愿成功!");
            return(true);
        }
Exemple #3
0
        public bool BlackJadeExchange(MsgInformationEx MsgDTO, object[] param)
        {
            var ratio = BlackJadeExchangeRec.RealTimeRatio(MsgDTO.FromGroup);
            var count = WaiterSvc.WaitForNum(MsgDTO.FromGroup, MsgDTO.FromQQ, $"当前墨玉汇率为:{ratio}金币 = 1墨玉,请输入兑换墨玉数量!(单次限购100枚墨玉)", bjCount => bjCount > 0 && bjCount <= 100,
                                             MsgDTO.BindAi);

            if (count <= 0)
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var consumeTotal = count * ratio;
            var osPerson     = OSPerson.GetPerson(MsgDTO.FromQQ);

            if (osPerson.Golds < consumeTotal)
            {
                MsgSender.PushMsg(MsgDTO, $"你的金币余额不足!({consumeTotal.CurencyFormat()}/{osPerson.Golds.CurencyFormat()})");
                return(false);
            }

            var asset = ArchAsset.Get(MsgDTO.FromQQ);

            asset.BlackJade += count;
            osPerson.Golds  -= consumeTotal;

            asset.Update();
            osPerson.Update();

            MsgSender.PushMsg(MsgDTO, $"兑换成功!你当前剩余墨玉 {asset.BlackJade}枚,金币 {osPerson.Golds.CurencyFormat()}!");
            return(true);
        }
Exemple #4
0
        public bool Reborn(MsgInformationEx MsgDTO, object[] param)
        {
            var aimQQ = (long)param[0];

            var key   = $"AliveState-{MsgDTO.FromGroup}-{aimQQ}";
            var cache = SCacheService.Get <AliveStateCache>(key);

            if (cache == null)
            {
                MsgSender.PushMsg(MsgDTO, "该成员不需要复活!", true);
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, 100))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var osPerson = OSPerson_Doremi.GetPerson(MsgDTO.FromQQ);

            osPerson.Golds -= 100;
            osPerson.Update();

            SCacheService.Cache(key, cache, DateTime.Now);

            MsgSender.PushMsg(MsgDTO, $"复活成功!你当前剩余金币:{osPerson.Golds}", true);
            return(true);
        }
Exemple #5
0
        public bool ResetPetSkill(MsgInformationEx MsgDTO, object[] param)
        {
            const int ResetSkillCost = 100;
            var       osPerson       = OSPerson.GetPerson(MsgDTO.FromQQ);

            if (osPerson.Golds < ResetSkillCost)
            {
                MsgSender.PushMsg(MsgDTO, $"金币余额不足({osPerson.Golds.CurencyFormat()}/{ResetSkillCost.CurencyFormat()})");
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, ResetSkillCost, 10))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var pet    = PetRecord.Get(MsgDTO.FromQQ);
            var expRec = ExpeditionRecord.GetLastest(MsgDTO.FromQQ);

            if (expRec != null && expRec.IsExpediting)
            {
                MsgSender.PushMsg(MsgDTO, $"{pet.Name}正在【{expRec.Scene}】进行一项伟大的远征,请于{expRec.EndTime:yyyy-MM-dd HH:mm:ss}后再试!");
                return(false);
            }

            pet.SkillReset();
            pet.Update();

            osPerson.Golds -= ResetSkillCost;
            osPerson.Update();

            MsgSender.PushMsg(MsgDTO, "重置成功!");
            return(true);
        }
Exemple #6
0
        public bool Dispel(MsgInformationEx MsgDTO, object[] param)
        {
            var qqNum = (long)param[0];

            var sourcePerson = OSPerson_Doremi.GetPerson(MsgDTO.FromQQ);

            if (sourcePerson.Golds < 500)
            {
                MsgSender.PushMsg(MsgDTO, "驱散全部buff需要500金币,你没有足够的金币!");
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, 500))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            OSPersonBuff.RemoveAll(qqNum);

            sourcePerson.Golds -= 500;
            sourcePerson.Update();

            MsgSender.PushMsg(MsgDTO, "驱散成功!");
            return(true);
        }
Exemple #7
0
        public bool GoldLimitBonus(MsgInformationEx MsgDTO, object[] param)
        {
            var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);

            if (osPerson.Golds < 500)
            {
                MsgSender.PushMsg(MsgDTO, $"你没有足够的金币兑换({osPerson.Golds.CurencyFormat()}/{500.CurencyFormat()})", true);
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, 500))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消");
                return(false);
            }

            osPerson.Golds -= 500;

            var cache = PersonCacheRecord.Get(MsgDTO.FromQQ, "抽奖");

            if (!int.TryParse(cache.Value, out var times))
            {
                times = 0;
            }

            times++;
            cache.Value = times.ToString();

            osPerson.Update();
            cache.Update();

            MsgSender.PushMsg(MsgDTO, $"兑换成功,你现在共有{times}次抽奖机会,快使用 【抽奖】 命令试试看吧!", true);

            return(true);
        }
Exemple #8
0
        public bool StoryContribute(MsgInformationEx MsgDTO, object[] param)
        {
            var info = WaiterSvc.WaitForInformation(MsgDTO, "请上传图片!",
                                                    information => information.FromGroup == MsgDTO.FromGroup && information.FromQQ == MsgDTO.FromQQ &&
                                                    !string.IsNullOrEmpty(Utility.ParsePicGuid(information.Msg)), 10);

            if (info == null)
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var bindai = BindAiSvc[MsgDTO.BindAi];

            var picGuid    = Utility.ParsePicGuid(info.Msg);
            var imageCache = Utility.ReadImageCacheInfo(picGuid, bindai.ImagePath);

            if (imageCache == null)
            {
                MsgSender.PushMsg(MsgDTO, "文件缓存读取失败!");
                return(false);
            }

            var fileName = $"MiniStory{DateTime.Now:yyyyMMddHHmmss}.{imageCache.type}";

            if (!Utility.DownloadImage(imageCache.url, CachePath + fileName))
            {
                MsgSender.PushMsg(MsgDTO, "图片下载失败,请稍后再试!");
                return(false);
            }
            ArknightsMiniStoryRecord.Insert(fileName);

            MsgSender.PushMsg(MsgDTO, "保存成功!");
            return(true);
        }
Exemple #9
0
        public bool Reborn(MsgInformationEx MsgDTO, object[] param)
        {
            var aimQQ = (long)param[0];

            var cache = AliveStateSvc.GetState(MsgDTO.FromGroup, aimQQ);

            if (cache == null)
            {
                MsgSender.PushMsg(MsgDTO, "该成员不需要复活!", true);
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, 100))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);

            osPerson.Golds -= 100;
            osPerson.Update();

            cache.RebornTime = DateTime.Now;
            AliveStateSvc.Cache(cache);

            MsgSender.PushMsg(MsgDTO, $"复活成功!你当前剩余金币:{osPerson.Golds}", true);
            return(true);
        }
Exemple #10
0
        public bool DispelOneBuff(MsgInformationEx MsgDTO, object[] param)
        {
            var qqNum    = (long)param[0];
            var buffName = param[1] as string;

            if (!OSPersonBuff.CheckBuff(qqNum, buffName))
            {
                MsgSender.PushMsg(MsgDTO, "目标身上没有指定buff!");
                return(false);
            }

            var sourcePerson = OSPerson_Doremi.GetPerson(MsgDTO.FromQQ);

            if (sourcePerson.Golds < 100)
            {
                MsgSender.PushMsg(MsgDTO, "驱散该buff需要100金币,你没有足够的金币!");
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, 100))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            OSPersonBuff.Remove(qqNum, buffName);

            sourcePerson.Golds -= 100;
            sourcePerson.Update();

            MsgSender.PushMsg(MsgDTO, "驱散成功!");
            return(true);
        }
Exemple #11
0
        public bool Fight(MsgInformationEx MsgDTO, object[] param)
        {
            var aimNum = (long)param[0];

            if (MsgDTO.FromQQ == aimNum)
            {
                MsgSender.PushMsg(MsgDTO, "你无法跟自己对决!");
                return(false);
            }

            if (BindAiSvc.AllAiNums.Contains(aimNum))
            {
                MsgSender.PushMsg(MsgDTO, "鱼唇的人类,你无法挑战ai的威严!");
                return(false);
            }

            if (ChessSvc.IsGroupInPlaying(MsgDTO.FromGroup))
            {
                MsgSender.PushMsg(MsgDTO, "本群正在进行一场对决,请稍后再试!");
                return(false);
            }

            if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "黄砂"))
            {
                MsgSender.PushMsg(MsgDTO, "你当前无法进行挑战!(黄砂)");
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm(MsgDTO.FromGroup, aimNum, $"{CodeApi.Code_At(MsgDTO.FromQQ)} 正在向你发起一场对决,是否接受?", MsgDTO.BindAi, 10))
            {
                MsgSender.PushMsg(MsgDTO, "对决取消!");
                return(false);
            }

            if (ChessSvc.IsQQInPlaying(MsgDTO.FromQQ))
            {
                MsgSender.PushMsg(MsgDTO, "你正在进行一场对决,请稍后再试!");
                return(false);
            }

            if (ChessSvc.IsQQInPlaying(aimNum))
            {
                MsgSender.PushMsg(MsgDTO, "你的对手正在进行一场对决,请稍后再试!");
                return(false);
            }

            ChessSvc.StartAGame(MsgDTO.FromGroup, MsgDTO.FromQQ, aimNum, (GroupNum, QQNum, Msg, judge) =>
            {
                var msg       = MsgDTO.Clone();
                msg.FromQQ    = QQNum;
                msg.FromGroup = GroupNum;

                var info = WaiterSvc.WaitForInformation(msg, Msg,
                                                        information => information.FromGroup == GroupNum && information.FromQQ == QQNum && judge(information.Msg), 10, true);
                return(info == null ? string.Empty : info.Msg);
            }, MsgDTO.BindAi);

            return(true);
        }
Exemple #12
0
        private bool DealDiet(MsgInformationEx MsgDTO, string name, long aimQQ, int price)
        {
            var aimDietRec = CookingRecord.Get(aimQQ);

            if (!aimDietRec.CheckDiet(name))
            {
                MsgSender.PushMsg(MsgDTO, "对方没有该菜肴!");
                return(false);
            }

            var dietModel = CookingDietSvc[name];

            if (dietModel.EstimatedPrice < price)
            {
                MsgSender.PushMsg(MsgDTO, $"交易价格不能低于该菜肴的成本价格({dietModel.EstimatedPrice.CurencyFormat()})!");
                return(false);
            }

            var sourceOSPerson = OSPerson.GetPerson(MsgDTO.FromQQ);
            var fee            = OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "苍天") ? 0 : price / 20;

            if (sourceOSPerson.Golds < price + fee)
            {
                MsgSender.PushMsg(MsgDTO, "你没有足够的金币来支付!");
                return(false);
            }

            var count = aimDietRec.CookedDietDic[name];
            var msg   = $"收到来自 {CodeApi.Code_At(MsgDTO.FromQQ)} 的交易请求:\r\n" +
                        $"希望得到的菜肴:{name}\r\n" +
                        $"价格:{price.CurencyFormat()}({dietModel.EstimatedPrice.CurencyFormat()})\r\n" +
                        $"你当前持有:{count}个,是否确认交易?";

            if (!WaiterSvc.WaitForConfirm(MsgDTO.FromGroup, aimQQ, msg, MsgDTO.BindAi, 10))
            {
                MsgSender.PushMsg(MsgDTO, "交易取消!");
                return(false);
            }

            var sourceDietRec = CookingRecord.Get(MsgDTO.FromQQ);

            sourceDietRec.AddDiet(name);
            sourceDietRec.Update();

            aimDietRec.DietConsume(name);
            aimDietRec.Update();

            sourceOSPerson.Golds -= price + fee;
            sourceOSPerson.Update();

            var aimOSPerson = OSPerson.GetPerson(aimQQ);

            aimOSPerson.Golds += price;
            aimOSPerson.Update();

            MsgSender.PushMsg(MsgDTO, "交易完毕!");
            return(true);
        }
Exemple #13
0
        public bool Xunyuan(MsgInformationEx MsgDTO, object[] param)
        {
            var aimQQ = (long)param[0];

            if (aimQQ == MsgDTO.FromQQ)
            {
                MsgSender.PushMsg(MsgDTO, "你无法和自己寻缘!");
                return(false);
            }

            if (!XunYuanMgr.CheckGroup(MsgDTO.FromGroup))
            {
                MsgSender.PushMsg(MsgDTO, "此群正在进行一场寻缘,请稍候再试!");
                return(false);
            }

            if (!XunYuanMgr.CheckQQNum(MsgDTO.FromQQ))
            {
                MsgSender.PushMsg(MsgDTO, "你正在进行一场寻缘,请稍候再试!");
                return(false);
            }

            if (!XunYuanMgr.CheckQQNum(aimQQ))
            {
                MsgSender.PushMsg(MsgDTO, "对方正在进行一场寻缘,请稍候再试!");
                return(false);
            }

            var msg = $"{CodeApi.Code_At(aimQQ)} 你正被邀请参加一次寻缘,是否同意?";

            if (!WaiterSvc.WaitForConfirm(MsgDTO.FromGroup, aimQQ, msg, MsgDTO.BindAi))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var Gamers = new[] { MsgDTO.FromQQ, aimQQ }.Select(p =>
            {
                var armerRecord = PersonArmerRecord.Get(p);
                var osPerson    = OSPerson_Doremi.GetPerson(p);
                var levelModel  = LevelSvc.GetByLevel(osPerson.Level);

                var battleArmers = Rander.RandSort(armerRecord.Armers.ToArray()).Take(10).ToDictionary(a => a.Key, a => a.Value);
                return(new XunYuanGamingModel()
                {
                    QQNum = p,
                    Armers = battleArmers,
                    EscapeArmers = armerRecord.EscapeArmers,
                    BasicHP = levelModel.HP,
                    HP = levelModel.HP + ArmerSvc.CountHP(battleArmers),
                    BasicAttack = levelModel.Atk,
                    Attack = levelModel.Atk + ArmerSvc.CountAtk(battleArmers)
                });
            }).ToArray();

            XunYuanMgr.StartGame(Gamers, MsgDTO.FromGroup, MsgDTO.BindAi);
            return(true);
        }
Exemple #14
0
        public bool Buy(MsgInformationEx MsgDTO, object[] param)
        {
            var name   = param[0] as string;
            var vipSvc = DailyVipShopSvc[name];

            if (vipSvc != null)
            {
                DailyVipShopSvc.Serve(MsgDTO, name);
                return(false);
            }

            if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "快晴"))
            {
                MsgSender.PushMsg(MsgDTO, "你无法进行该操作!(快晴)");
                return(false);
            }

            var sellingItems = TransHelper.GetDailySellItems();
            var todayRec     = DailySellItemRareRecord.GetToday();

            if (DateTime.Now.Hour >= todayRec.Hour && DateTime.Now.Hour <= todayRec.Hour + 2)
            {
                sellingItems = sellingItems.Concat(todayRec.Items);
            }

            var sellItem = sellingItems.FirstOrDefault(si => si.Name == name);

            if (sellItem == null)
            {
                MsgSender.PushMsg(MsgDTO, "此物品未在商店中售卖!");
                return(false);
            }

            var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);

            if (osPerson.Golds < sellItem.Price)
            {
                MsgSender.PushMsg(MsgDTO, "你持有的金币不足以购买此物品!");
                return(false);
            }

            var price = OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "极光") ? sellItem.Price * 80 / 100 : sellItem.Price;

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, price))
            {
                MsgSender.PushMsg(MsgDTO, "交易取消!");
                return(false);
            }

            var record    = ItemCollectionRecord.Get(MsgDTO.FromQQ);
            var incomeMsg = record.ItemIncome(sellItem.Name);

            OSPerson.GoldConsume(osPerson.QQNum, price);

            MsgSender.PushMsg(MsgDTO, $"{incomeMsg}\r\n购买成功!你当前剩余的金币为 {(osPerson.Golds - sellItem.Price).CurencyFormat()}");
            return(true);
        }
Exemple #15
0
        public bool Reborn(MsgInformationEx MsgDTO, object[] param)
        {
            var itemColl = ItemCollectionRecord.Get(MsgDTO.FromQQ);

            if (itemColl.HonorCollections.IsNullOrEmpty())
            {
                MsgSender.PushMsg(MsgDTO, "你尚未集齐所有非限定物品!", true);
                return(false);
            }

            var normalHonors = itemColl.HonorCollections.Where(h => h.Value.Type == HonorType.Normal).ToList();
            var items        = normalHonors.Select(p => p.Value).SelectMany(h => h.Items.Keys).ToList();

            var allItems = HonorSvc.HonorList.Where(h => !(h is LimitHonorModel)).SelectMany(h => h.Items).Select(p => p.Name);

            if (items.Count != allItems.Count())
            {
                MsgSender.PushMsg(MsgDTO, "你尚未集齐所有非限定物品!", true);
                return(false);
            }

            var response = WaiterSvc.WaitForInformation(MsgDTO, $"请输入想获取的荣誉称号名称(不能超过{RebornHonorLimit}个字)",
                                                        info => info.FromQQ == MsgDTO.FromQQ && info.FromGroup == MsgDTO.FromGroup && info.Msg != null && info.Msg.Length <= RebornHonorLimit, 10);

            if (response == null)
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var honorName = response.Msg;
            var osPerson  = OSPerson.GetPerson(MsgDTO.FromQQ);

            if (osPerson.HonorNames.Contains(honorName))
            {
                MsgSender.PushMsg(MsgDTO, "你已经获取了该荣誉称号,操作取消!");
                return(false);
            }

            osPerson.Level++;
            osPerson.HonorNames.Add(honorName);

            foreach (var honor in normalHonors.Select(p => p.Key))
            {
                TransHelper.SellHonorToShop(itemColl, honor, osPerson);
            }

            itemColl.Update();
            osPerson.Update();

            MsgSender.PushMsg(MsgDTO, $"恭喜【{honorName}】,转生成功!");
            return(true);
        }
Exemple #16
0
        public bool Recruit(MsgInformationEx MsgDTO, object[] param)
        {
            var castle = KindomCastle.Get(MsgDTO.FromGroup, MsgDTO.FromQQ);

            var soldierGroups = SoldierGroup.Get(MsgDTO.FromQQ);
            var curTotal      = soldierGroups.Sum(g => g.Count);

            var remain = Math.Max(castle.SoldierMaxVolume - curTotal, 0);
            var msg    = $"你当前共拥有士兵 {curTotal}人,还可招募 {remain}人";

            if (remain == 0)
            {
                msg += "\r\n无法招募新的士兵!";
                MsgSender.PushMsg(MsgDTO, msg, true);
                return(false);
            }

            var golds = castle.Golds;

            msg += $"\r\n你当前拥有金钱 {golds},最多招募等量的士兵";
            if (golds == 0)
            {
                msg += "\r\n无法招募新的士兵!";
                MsgSender.PushMsg(MsgDTO, msg, true);
                return(false);
            }

            var maxRecruit = Math.Min(remain, golds);
            var num        = WaiterSvc.WaitForNum(MsgDTO.FromGroup, MsgDTO.FromQQ, $"请输入招募士兵的数量!(1~{maxRecruit})", p => p >= 1 && p <= maxRecruit, MsgDTO.BindAi);

            if (num <= 0)
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var group = new SoldierGroup()
            {
                Owner = MsgDTO.FromQQ,
                Count = num,
                State = SoldierState.Working,
                Name  = $"第{GroupNamingRec.GetNextNo(MsgDTO.FromQQ)}军"
            };

            group.Insert();

            castle.Golds -= num;
            castle.Update();

            MsgSender.PushMsg(MsgDTO, "招募成功!");
            return(true);
        }
Exemple #17
0
        public bool SellRedundant(MsgInformationEx MsgDTO, object[] param)
        {
            if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "快晴"))
            {
                MsgSender.PushMsg(MsgDTO, "你无法进行该操作!(快晴)");
                return(false);
            }

            var record = ItemCollectionRecord.Get(MsgDTO.FromQQ);
            var ics    = record.HonorCollections.Values.SelectMany(hc => hc.Items.Where(p => p.Value > 1)).ToList();

            if (ics.IsNullOrEmpty())
            {
                MsgSender.PushMsg(MsgDTO, "你没有任何多余的物品!");
                return(false);
            }

            var ictm = ics.Select(p => new
            {
                p.Key,
                Count   = p.Value - 1,
                IsLimit = HonorSvc.IsLimitItem(p.Key),
                Price   = HonorSvc.GetItemPrice(HonorSvc.FindItem(p.Key), MsgDTO.FromQQ)
            }).ToList();
            var msg = $"你即将贩卖{ictm.Sum(i => i.Count)}件物品," +
                      $"其中有{ictm.Count(i => i.IsLimit)}件限定物品," +
                      $"共价值{ictm.Sum(p => p.Price * p.Count).CurencyFormat()},是否继续?";

            if (!WaiterSvc.WaitForConfirm(MsgDTO, msg))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            foreach (var ic in ictm)
            {
                record.ItemConsume(ic.Key, ic.Count);
            }
            record.Update();

            var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);

            osPerson.Golds += ictm.Sum(p => p.Price * p.Count);
            osPerson.Update();

            MsgSender.PushMsg(MsgDTO, $"贩卖成功,你当前拥有{osPerson.Golds.CurencyFormat()}!");
            return(true);
        }
Exemple #18
0
        public bool SetPetAttr(MsgInformationEx MsgDTO, object[] param)
        {
            var      pet       = PetRecord.Get(MsgDTO.FromQQ);
            var      needGolds = false;
            OSPerson osPerson  = null;

            if (!string.IsNullOrEmpty(pet.Attribute))
            {
                osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);

                if (osPerson.Golds < 300)
                {
                    MsgSender.PushMsg(MsgDTO, $"金币余额不足!({osPerson.Golds.CurencyFormat()}/{300.CurencyFormat()})");
                    return(false);
                }

                if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, 300))
                {
                    MsgSender.PushMsg(MsgDTO, "操作取消");
                    return(false);
                }

                needGolds = true;
            }

            var randAttrs   = Rander.RandSort(PetExtent.AllAttributes.ToArray());
            var msg         = $"请选择宠物食性:\r\n{string.Join("\r\n", randAttrs.Select((p, idx) => $"{idx + 1}:{p}"))}";
            var selectedIdx = WaiterSvc.WaitForNum(MsgDTO.FromGroup, MsgDTO.FromQQ, msg, i => i > 0 && i <= randAttrs.Length, MsgDTO.BindAi);

            if (selectedIdx == -1)
            {
                MsgSender.PushMsg(MsgDTO, "操作取消");
                return(false);
            }

            pet.Attribute = randAttrs[selectedIdx - 1];
            pet.Update();

            if (needGolds)
            {
                osPerson.Golds -= 300;
                osPerson.Update();
            }

            MsgSender.PushMsg(MsgDTO, "设定成功!");
            return(true);
        }
Exemple #19
0
        public bool ConsumeRedStarStone(MsgInformationEx MsgDTO, object[] param)
        {
            var asset = ArchAsset.Get(MsgDTO.FromQQ);

            if (asset.RedStarStone == 0)
            {
                MsgSender.PushMsg(MsgDTO, "赤星石不足!", true);
                return(false);
            }

            var command = param[1] as string;

            var enters = CrossWorldAiSvc[MsgDTO.FromGroup].AllAvailableGroupCommands.Where(p => p.Command == command).ToList();

            if (enters.IsNullOrEmpty())
            {
                MsgSender.PushMsg(MsgDTO, "未找到该功能!", true);
                return(false);
            }

            var enter = enters.First();

            if (enters.Count > 1)
            {
                var options  = enters.Select(p => $"{p.Command} {p.SyntaxHint}").ToArray();
                var response = WaiterSvc.WaitForOptions(MsgDTO.FromGroup, MsgDTO.FromQQ, "请选择需要刷新的功能:", options, MsgDTO.BindAi);
                if (response < 0)
                {
                    MsgSender.PushMsg(MsgDTO, "操作取消!");
                    return(false);
                }

                enter = enters[response];
            }

            var dailyLimit = DailyLimitRecord.Get(MsgDTO.FromQQ, enter.ID);

            dailyLimit.Times = 0;
            dailyLimit.Update();

            asset.RedStarStone--;
            asset.Update();

            MsgSender.PushMsg(MsgDTO, "赤星归元(刷新成功)!");
            return(true);
        }
Exemple #20
0
        public bool MakeGift(MsgInformationEx MsgDTO, object[] param)
        {
            var name = param[0] as string;
            var gift = GiftSvc[name];

            if (gift == null)
            {
                MsgSender.PushMsg(MsgDTO, "未查找到该礼物!");
                return(false);
            }

            var sellingGifts = GiftSvc.SellingGifts;

            if (sellingGifts.All(p => p.Name != name))
            {
                MsgSender.PushMsg(MsgDTO, "该礼物未在礼物商店中出售,请使用 礼物商店 命令查看今日可兑换的礼物!", true);
                return(false);
            }

            var itemRecord = ItemCollectionRecord.Get(MsgDTO.FromQQ);
            var mdic       = itemRecord.HonorCollections.SelectMany(p => p.Value.Items).ToDictionary(p => p.Key, p => p.Value);
            var osPerson   = OSPerson.GetPerson(MsgDTO.FromQQ);

            if (!gift.Check(mdic, osPerson.Golds, out var msg))
            {
                MsgSender.PushMsg(MsgDTO, $"兑换{name}需要:\r\n{msg}材料不足,无法兑换!");
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm(MsgDTO, $"兑换{name}需要:\r\n{msg}是否兑换?"))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            itemRecord.ItemConsume(gift.MaterialDic);
            itemRecord.Update();
            osPerson.Golds -= gift.GoldNeed;
            osPerson.GiftIncome(name);
            osPerson.Update();

            MsgSender.PushMsg(MsgDTO, "兑换成功!可以使用 赠送礼物 命令将礼物送给其他人!", true);

            return(true);
        }
Exemple #21
0
        public bool AdvantureAgainst(MsgInformationEx MsgDTO, object[] param)
        {
            var aimNum = (long)param[0];

            if (MsgDTO.FromQQ == aimNum)
            {
                MsgSender.PushMsg(MsgDTO, "你无法跟自己对决!");
                return(false);
            }

            if (BindAiSvc.AllAiNums.Contains(aimNum))
            {
                MsgSender.PushMsg(MsgDTO, "鱼唇的人类,你无法挑战ai的威严!");
                return(false);
            }

            if (!AdvGameSvc.CheckGroup(MsgDTO.FromGroup))
            {
                MsgSender.PushMsg(MsgDTO, "本群正在进行一场对决,请稍后再试!");
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm(MsgDTO.FromGroup, aimNum,
                                          $"{CodeApi.Code_At(MsgDTO.FromQQ)} 正在向你发起一场冒险对决,是否接受?", MsgDTO.BindAi, 10))
            {
                MsgSender.PushMsg(MsgDTO, "对决取消!");
                return(false);
            }

            if (!AdvGameSvc.CheckPlayer(aimNum))
            {
                MsgSender.PushMsg(MsgDTO, "你的对手正在进行一场对决,请稍后再试!");
                return(false);
            }

            if (!AdvGameSvc.CheckPlayer(MsgDTO.FromQQ))
            {
                MsgSender.PushMsg(MsgDTO, "你正在进行一场对决,请稍后再试!");
                return(false);
            }

            AdvGameSvc.GameStart(MsgDTO.FromGroup, MsgDTO.FromQQ, aimNum, 1, MsgDTO.BindAi);
            return(true);
        }
Exemple #22
0
        public bool Present(MsgInformationEx MsgDTO, object[] param)
        {
            var aimNum = (long)param[0];
            var name   = param[1] as string;

            var sourceRecord = ItemCollectionRecord.Get(MsgDTO.FromQQ);

            if (!sourceRecord.CheckItem(name))
            {
                MsgSender.PushMsg(MsgDTO, "你没有此物品", true);
                return(false);
            }

            var itemModel = HonorSvc.FindItem(name);
            var price     = HonorSvc.GetItemPrice(itemModel, MsgDTO.FromQQ) * 5 / 100;

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, price))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);

            osPerson.Golds -= price;
            osPerson.Update();

            sourceRecord.ItemConsume(name);
            sourceRecord.Update();

            var aimRecord = ItemCollectionRecord.Get(aimNum);
            var msg       = aimRecord.ItemIncome(name);

            var res = "赠送成功!";

            if (!string.IsNullOrEmpty(msg))
            {
                res += $"\r\n{msg}";
            }
            MsgSender.PushMsg(MsgDTO, res);

            return(true);
        }
Exemple #23
0
        public void Review(MsgInformationEx MsgDTO)
        {
            var record = MongoService <PicReviewRecord> .Get(p => p.Status == PicReviewStatus.Waiting).OrderBy(p => p.CreateTime).FirstOrDefault();

            if (record == null)
            {
                MsgSender.PushMsg(MsgDTO, "暂无待审核的图片!");
                return;
            }

            var msg = $"{CodeApi.Code_Image_Relational($"{CachePath}{record.PicName}")}\r\n";

            msg += $"来自 {GroupSettingSvc[record.GroupNum].Name} 的 {record.QQNum}\r\n";
            msg += $"用途:{record.Usage}\r\n";
            msg += "是否通过?";
            var option = WaiterSvc.WaitForOptions(MsgDTO.FromGroup, MsgDTO.FromQQ, msg, new[] { "通过", "不通过", "取消" }, MsgDTO.BindAi);

            if (option < 0 || option == 2)
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return;
            }

            record.Status     = option == 0 ? PicReviewStatus.Passed : PicReviewStatus.Refused;
            record.ReviewTime = DateTime.Now;
            record.Update();

            ReviewCallBack[record.Usage](record);

            msg = record.Status == PicReviewStatus.Passed
                ? $"恭喜你,你在{record.CreateTime:yyyy-MM-dd HH:mm:ss}提交的用于{record.Usage}的图片审核通过!"
                : $"很遗憾,你在{record.CreateTime:yyyy-MM-dd HH:mm:ss}提交的用于{record.Usage}的图片未能审核通过!";
            MsgSender.PushMsg(record.GroupNum, record.QQNum, msg, GroupSettingSvc[record.GroupNum].BindAi);

            var picTempFile = new FileInfo($"{CachePath}{record.PicName}");

            picTempFile.Delete();

            var count = MongoService <PicReviewRecord> .Count(p => p.Status == PicReviewStatus.Waiting);

            MsgSender.PushMsg(MsgDTO, $"审核完毕!还有{count}张待审核的图片!");
        }
Exemple #24
0
        private bool StartExpedite(MsgInformationEx MsgDTO)
        {
            var extEndur = VipArmerRecord.Get(MsgDTO.FromQQ).CheckArmer("耐力护符") ? 10 : 0;

            var pet              = PetRecord.Get(MsgDTO.FromQQ);
            var petLevel         = PetLevelSvc[pet.Level];
            var enduranceConsume = PetEnduranceRecord.Get(MsgDTO.FromQQ);
            var curEndurance     = petLevel.Endurance - enduranceConsume.ConsumeTotal + extEndur;

            var todayExpeditions = ExpeditionSceneSvc.TodayExpedition().Where(p => p.Endurance <= curEndurance).ToList();

            if (todayExpeditions.IsNullOrEmpty())
            {
                MsgSender.PushMsg(MsgDTO, $"{pet.Name}已经累的完全动不了了!");
                return(false);
            }

            var msg       = $"请选择远征副本:\r\n{todayExpeditions.Select((exp, idx) => $"{idx + 1}:{exp.ToString(curEndurance)}").JoinToString("\r\n")}";
            var selection = WaiterSvc.WaitForNum(MsgDTO.FromGroup, MsgDTO.FromQQ, msg, i => i > 0 && i <= todayExpeditions.Count, MsgDTO.BindAi, 12, false);

            if (selection < 0)
            {
                MsgSender.PushMsg(MsgDTO, "操作取消");
                return(false);
            }

            var aimExpedition = todayExpeditions[selection - 1];
            var expRec        = new ExpeditionRecord
            {
                EndTime = DateTime.Now.AddMinutes(aimExpedition.TimeConsume),
                QQNum   = MsgDTO.FromQQ,
                Scene   = aimExpedition.Name
            };

            expRec.Insert();

            enduranceConsume.ConsumeTotal += aimExpedition.Endurance;
            enduranceConsume.Update();

            MsgSender.PushMsg(MsgDTO, $"远征开始!目标:【{aimExpedition.Name}】!(请于{expRec.EndTime:yyyy-MM-dd HH:mm:ss}后使用 宠物远征 命令回收远征奖励!)");
            return(true);
        }
Exemple #25
0
        public bool SwitchWorldLine(MsgInformationEx MsgDTO, object[] param)
        {
            var option = WaiterSvc.WaitForOptions(MsgDTO.FromGroup, MsgDTO.FromQQ, "请选择需要切换的世界线:",
                                                  CrossWorldAiSvc.AllWorlds.Select(w => w.Name).ToArray(), MsgDTO.BindAi);

            if (option < 0)
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var worldLine = CrossWorldAiSvc.AllWorlds[option];
            var group     = GroupSettingSvc[MsgDTO.FromGroup];

            group.WorldLine = worldLine.Name;
            group.Update();

            MsgSender.PushMsg(MsgDTO, "世界线切换成功!");
            return(true);
        }
Exemple #26
0
        public bool ExchangeOwner(MsgInformationEx MsgDTO, object[] param)
        {
            var aimQQ = (long)param[0];

            if (!WaiterSvc.WaitForConfirm(MsgDTO, $"【警告】是否确认将群主移交给 {CodeApi.Code_At(aimQQ)}?(此操作不可逆)"))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var setting = GroupSettingSvc[MsgDTO.FromGroup];

            setting.AuthInfo.Owner = aimQQ;

            setting.Update();

            MsgSender.PushMsg(MsgDTO, "已成功移交群主!");

            return(true);
        }
Exemple #27
0
        public bool Buy(MsgInformationEx MsgDTO, object[] param)
        {
            var name = param[0] as string;

            if (RandShopperSvc.SellingGoods.IsNullOrEmpty())
            {
                MsgSender.PushMsg(MsgDTO, "商店尚未营业!", true);
                return(false);
            }

            if (!RandShopperSvc.SellingGoods.Contains(name))
            {
                MsgSender.PushMsg(MsgDTO, "此商品未在商店中出售!", true);
                return(false);
            }

            var osPerson   = OSPerson_Doremi.GetPerson(MsgDTO.FromQQ);
            var armerModel = ArmerSvc[name];

            if (osPerson.Golds < armerModel.Price)
            {
                MsgSender.PushMsg(MsgDTO, $"你持有的金币不足以购买此物品({osPerson.Golds}/{armerModel.Price})", true);
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, armerModel.Price))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            osPerson.Golds -= armerModel.Price;
            var paRec = PersonArmerRecord.Get(MsgDTO.FromQQ);

            paRec.ArmerGet(name);
            paRec.Update();
            osPerson.Update();

            MsgSender.PushMsg(MsgDTO, "购买成功!");
            return(true);
        }
Exemple #28
0
        public bool StartAdv(MsgInformationEx MsgDTO, object[] param)
        {
            var archaeologist = Archaeologist.Get(MsgDTO.FromQQ);

            if (archaeologist.IsDead)
            {
                MsgSender.PushMsg(MsgDTO, $"你当前处在死亡惩罚时间中,无法进行该操作!复活时间:{archaeologist.RebornTime:yyyy-MM-dd HH:mm:ss}");
                return(false);
            }

            var asset = ArchAsset.Get(MsgDTO.FromQQ);

            if (asset.GreenAmbur == 0 && asset.BlueAmbur == 0)
            {
                MsgSender.PushMsg(MsgDTO, "很抱歉,你没有任何琥珀,无法开启副本!");
                return(false);
            }

            if (asset.GreenAmbur > 0)
            {
                asset.GreenAmbur -= 1;
            }
            else
            {
                if (!WaiterSvc.WaitForConfirm(MsgDTO, $"此操作将消耗 碧蓝琥珀*1 (你当前剩余 {asset.BlueAmbur}),是否继续?"))
                {
                    MsgSender.PushMsg(MsgDTO, "操作取消!");
                    return(false);
                }

                asset.BlueAmbur -= 1;
            }

            asset.Update();

            var engine = new ArchAdvEngine(MsgDTO);

            engine.StartAdv();

            return(true);
        }
Exemple #29
0
        public bool Boom(MsgInformationEx MsgDTO, object[] param)
        {
            var backInfo = WaiterSvc.WaitForInformation(
                new MsgCommand
            {
                Command = CommandType.SendGroup,
                Msg     = "请于5秒内输入指令码!",
                ToGroup = MsgDTO.FromGroup,
                BindAi  = MsgDTO.BindAi
            },
                info => info.Msg == BoomCode.ToString());

            if (backInfo == null)
            {
                MsgSender.PushMsg(MsgDTO, "自爆失败!");
                return(false);
            }

            if (CodeDate.AddMinutes(5) < DateTime.Now)
            {
                MsgSender.PushMsg(MsgDTO, "指令码已失效!");
                return(false);
            }

            MsgSender.PushMsg(MsgDTO, "AI即将自爆!");
            Thread.Sleep(1000);

            for (var i = 5; i > 0; i--)
            {
                MsgSender.PushMsg(MsgDTO, i.ToString());
                Thread.Sleep(1000);
            }

            MsgSender.PushMsg(MsgDTO, CodeApi.Code_Image_Relational("images/boom.jpg"));

            BoomCode = Rander.RandInt(10000);
            Thread.Sleep(1000);

            return(true);
        }
Exemple #30
0
        public bool ConnectiongState(MsgInformationEx MsgDTO, object[] param)
        {
            var command = new MsgCommand()
            {
                Command = CommandType.ConnectionState,
                BindAi  = MsgDTO.BindAi
            };

            var info = WaiterSvc.WaitForRelationId(command);

            if (info == null)
            {
                MsgSender.PushMsg(MsgDTO, "超时!");
                return(false);
            }

            var dic = JsonConvert.DeserializeObject <Dictionary <string, bool> >(info.Msg);
            var msg = string.Join("\r\n", dic.Select(p => $"{p.Key}:{(p.Value ? "连接中" : "已断开")}"));

            MsgSender.PushMsg(MsgDTO, msg);
            return(true);
        }