Пример #1
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);
        }
Пример #2
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);
        }
Пример #3
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);
        }
Пример #4
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.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);
        }
Пример #5
0
        public void 雹()
        {
            var record = ItemCollectionRecord.Get(SelfQQNum);

            if (record.HonorCollections.IsNullOrEmpty())
            {
                MsgSender.PushMsg(GroupNum, 0, "你没有任何物品", BindAi);
                return;
            }

            var commonItems = record.HonorCollections.Where(p => p.Value.Type == HonorType.Normal).SelectMany(p => p.Value.Items).ToList();

            if (commonItems.IsNullOrEmpty())
            {
                MsgSender.PushMsg(GroupNum, 0, "你没有任何非限定物品", BindAi);
                return;
            }

            var(key, _) = commonItems.RandElement();

            var osPerson = OSPerson.GetPerson(SelfQQNum);

            TransHelper.SellItemToShop(key, osPerson);
            osPerson.Update();

            MsgSender.PushMsg(GroupNum, 0, $"你贩卖了 {key}\r\n你当前拥有金币 {osPerson.Golds}", BindAi);
        }
Пример #6
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);
        }
Пример #7
0
        public bool Dispel(MsgInformationEx MsgDTO, object[] param)
        {
            var qqNum = (long)param[0];

            var sourcePerson = OSPerson.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);
        }
Пример #8
0
        public bool SelfExcharge(MsgInformationEx MsgDTO, object[] param)
        {
            var days = (int)(long)param[0];

            if (days <= 0)
            {
                MsgSender.PushMsg(MsgDTO, "天数错误,请重新输入命令!");
                return(false);
            }

            var osPerson    = OSPerson.GetPerson(MsgDTO.FromQQ);
            var diamondNeed = days * 10;

            if (osPerson.Diamonds < diamondNeed)
            {
                MsgSender.PushMsg(MsgDTO, "你的钻石余额不足,请添加能天使(2731544408)为好友后,使用【转账】功能转任意金额后将会获得金额*100的钻石,可以【我的状态】命令查看余额!");
                return(false);
            }

            ChargeTime(MsgDTO, new object[] { MsgDTO.FromGroup, (long)days });
            osPerson.Diamonds -= diamondNeed;
            osPerson.Update();

            return(true);
        }
Пример #9
0
        public override bool OnMoneyReceived(ChargeModel model)
        {
            var diamonds  = (int)(Math.Round(model.Amount, 2) * 100);
            var chargeRec = new VipChargeRecord()
            {
                QQNum         = model.QQNum,
                ChargeAmount  = model.Amount,
                ChargeTime    = DateTime.Now,
                DiamondAmount = diamonds,
                Message       = model.Message,
                OrderID       = model.OrderID
            };

            chargeRec.Insert();

            var osPerson = OSPerson.GetPerson(model.QQNum);

            osPerson.Diamonds += diamonds;
            osPerson.Update();

            MsgSender.PushMsg(0, model.QQNum, $"恭喜充值成功!当前余额:{osPerson.Diamonds}{Emoji.钻石}", model.BindAi);
            MsgSender.PushMsg(0, Global.DeveloperNumber, $"{model.QQNum}充值{model.Amount}元!", Global.DefaultConfig.MainAi);

            return(true);
        }
Пример #10
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);
        }
Пример #11
0
        public bool ShopInfo_Rare(MsgInformationEx MsgDTO, object[] param)
        {
            var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);
            var golds    = osPerson.Golds;

            var todayRec    = DailySellItemRareRecord.GetToday();
            var tomorrowRec = DailySellItemRareRecord.GetTomorrow();

            if (todayRec.IsOver)
            {
                MsgSender.PushMsg(MsgDTO,
                                  $"稀有商店休息中~\r\n下次开放时间:明天 {tomorrowRec.Hour}:00:00 ~ {tomorrowRec.Hour + 3}:00:00");
                return(false);
            }

            if (todayRec.IsBefore)
            {
                MsgSender.PushMsg(MsgDTO,
                                  $"稀有商店休息中~\r\n下次开放时间:今天 {todayRec.Hour}:00:00 ~ {todayRec.Hour + 3}:00:00");
                return(false);
            }

            var sellItems = todayRec.Items;
            var record    = ItemCollectionRecord.Get(MsgDTO.FromQQ);
            var itemsStr  = string.Join("\r\n", sellItems.Select(si =>
                                                                 $"{si.Name}({HonorSvc.FindHonorFullName(si.Name)})({record.GetCount(si.Name)})({si.Attr}):{si.Price.CurencyFormat()}"));

            var msg = $"当前售卖的商品:\r\n{itemsStr}\r\n你当前持有 {golds.CurencyFormat()}";

            MsgSender.PushMsg(MsgDTO, msg);

            return(true);
        }
Пример #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);
        }
Пример #13
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);
        }
Пример #14
0
        public bool Purchase(MsgInformationEx MsgDTO)
        {
            var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);

            osPerson.Golds += 10000;
            osPerson.Update();

            MsgSender.PushMsg(MsgDTO, $"兑换成功,你当前持有的金币为:{osPerson.Golds.CurencyFormat()}");
            return(true);
        }
Пример #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);
        }
Пример #16
0
        public void Serve(MsgInformationEx MsgDTO, string serviceName)
        {
            var armer = Armers.FirstOrDefault(p => p.Name == serviceName);

            if (armer == null)
            {
                MsgSender.PushMsg(MsgDTO, $"未找到相关内容:{serviceName}");
                return;
            }

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

            if (osPerson.Diamonds < armer.DiamondsNeed)
            {
                MsgSender.PushMsg(MsgDTO, $"钻石余额不足({osPerson.Diamonds.CurencyFormat("Diamond")}/{armer.DiamondsNeed.CurencyFormat("Diamond")})!");
                return;
            }

            if (!CheckLimit(MsgDTO, armer))
            {
                return;
            }

            if (!CheckMaxContains(MsgDTO, armer))
            {
                return;
            }

            if (!WaiterSvc.WaitForConfirm(MsgDTO, $"此操作将花费{armer.DiamondsNeed.CurencyFormat("Diamond")},是否继续?"))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return;
            }

            if (!armer.Purchase(MsgDTO))
            {
                return;
            }

            osPerson           = OSPerson.GetPerson(MsgDTO.FromQQ);
            osPerson.Diamonds -= armer.DiamondsNeed;
            osPerson.Update();

            var purchaseRec = new VipSvcPurchaseRecord()
            {
                QQNum        = MsgDTO.FromQQ,
                SvcName      = armer.Name,
                PurchaseTime = DateTime.Now,
                Diamonds     = armer.DiamondsNeed
            };

            purchaseRec.Insert();
        }
Пример #17
0
        public bool DiamondBonus(MsgInformationEx MsgDTO, object[] param)
        {
            var qqNum    = (long)param[0];
            var diamonds = (int)(long)param[1];

            var osPerson = OSPerson.GetPerson(qqNum);

            osPerson.Diamonds += diamonds;
            osPerson.Update();

            MsgSender.PushMsg(MsgDTO, "奖励已生效!");
            return(true);
        }
Пример #18
0
        public bool DrawLottery(MsgInformationEx MsgDTO, object[] param)
        {
            var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);

            if (osPerson.Golds < LotterySvc.LotteryFee)
            {
                MsgSender.PushMsg(MsgDTO, $"你没有足够的金币开箱子({osPerson.Golds.CurencyFormat()}/{LotterySvc.LotteryFee.CurencyFormat()})", true);
                return(false);
            }

            RandomLottery(MsgDTO);

            return(true);
        }
Пример #19
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);
        }
Пример #20
0
        public bool ShopInfo(MsgInformationEx MsgDTO, object[] param)
        {
            var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);
            var golds    = osPerson.Golds;

            var sellItems = TransHelper.GetDailySellItems();
            var record    = ItemCollectionRecord.Get(MsgDTO.FromQQ);
            var itemsStr  = string.Join("\r\n", sellItems.Select(si =>
                                                                 $"{si.Name}({HonorSvc.FindHonorFullName(si.Name)})({record.GetCount(si.Name)})({si.Attr}):{si.Price.CurencyFormat()}"));

            var msg = $"今日售卖的商品:\r\n{itemsStr}\r\n你当前持有 {golds.CurencyFormat()}";

            MsgSender.PushMsg(MsgDTO, msg);

            return(true);
        }
Пример #21
0
        public bool MyGifts(MsgInformationEx MsgDTO, object[] param)
        {
            var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);

            if (osPerson.GiftDic.IsNullOrEmpty())
            {
                MsgSender.PushMsg(MsgDTO, "你当前没有任何礼物!", true);
                return(false);
            }

            var msg = string.Join(",", osPerson.GiftDic.Select(p => $"{p.Key}*{p.Value}"));

            MsgSender.PushMsg(MsgDTO, $"你当前持有的礼物:\r\n{msg}");

            return(true);
        }
Пример #22
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);
        }
Пример #23
0
        private void FishItem(MsgInformationEx MsgDTO)
        {
            if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "梅雨") && Rander.RandInt(100) < 30)
            {
                MsgSender.PushMsg(MsgDTO, "欸呀呀,捞瓶子失败了!(梅雨)", true);
                return;
            }

            var item      = HonorSvc.RandItem();
            var record    = ItemCollectionRecord.Get(MsgDTO.FromQQ);
            var honorName = HonorSvc.FindHonorName(item.Name);

            var count     = 1;
            var vipArmers = VipArmerRecord.Get(MsgDTO.FromQQ);

            if (vipArmers.CheckArmer("安妮的镜子"))
            {
                count = 2;
            }
            vipArmers.Armers.Remove(p => p.Name == "安妮的镜子");
            vipArmers.Update();

            DriftBottleAnalyzeRecord.Record(item.Name, count);

            var s   = record.ItemIncome(item.Name, count);
            var msg = "你捞到了 \r\n" +
                      $"{(string.IsNullOrEmpty(item.PicPath) ? string.Empty : $"{CodeApi.Code_Image_Relational(item.PicPath)}\r\n")}" +
                      $"{item.Name}{(count > 1 ? $"*{count}" : string.Empty)} \r\n" +
                      $"    {item.Description} \r\n" +
                      $"稀有率为 {HonorSvc.ItemRate(item)}%\r\n" +
                      $"售价为:{item.Price} 金币\r\n" +
                      $"特性:{(item.Attributes == null ? "无" : string.Join(",", item.Attributes))}\r\n" +
                      $"你总共拥有该物品 {record.HonorCollections[honorName].Items[item.Name]}个";

            if (!string.IsNullOrEmpty(s))
            {
                msg += $"\r\n{s}";
            }

            if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "钻石尘") && Rander.RandInt(100) < 50)
            {
                OSPerson.GoldConsume(MsgDTO.FromQQ, 40);
                msg += "\r\n欸呀呀,你丢失了40金币(钻石尘)";
            }

            MsgSender.PushMsg(MsgDTO, msg, true);
        }
Пример #24
0
        public bool PresentGift(MsgInformationEx MsgDTO, object[] param)
        {
            var aimQQ = (long)param[0];
            var name  = param[1] as string;

            if (aimQQ == MsgDTO.FromQQ)
            {
                MsgSender.PushMsg(MsgDTO, "你居然给自己送礼物!", true);
                return(false);
            }

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

            if (osPerson.GiftDic == null || !osPerson.GiftDic.ContainsKey(name))
            {
                MsgSender.PushMsg(MsgDTO, "你没有这个礼物!", true);
                return(false);
            }

            var gift = GiftSvc[name];

            osPerson.GiftDic[name]--;
            osPerson.Update();

            var glamourRecord = GlamourRecord.Get(MsgDTO.FromGroup, aimQQ);

            glamourRecord.Glamour += gift.Glamour;
            glamourRecord.Update();

            var relationship = new IntimateRelationshipRecord()
            {
                GroupNum = MsgDTO.FromGroup,
                QQPair   = new [] { MsgDTO.FromQQ, aimQQ },
                Value    = gift.Intimate,
                Name     = gift.Name
            };

            relationship.Insert();

            var msg = $"赠送成功!对方增加了 {gift.Glamour} 点魅力值,你们之间的羁绊值增加了 {gift.Intimate} 点!";

            MsgSender.PushMsg(MsgDTO, msg, true);

            return(true);
        }
Пример #25
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);
        }
Пример #26
0
        public bool VipShop(MsgInformationEx MsgDTO, object[] param)
        {
            var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);

            if (osPerson.Diamonds <= 0)
            {
                MsgSender.PushMsg(MsgDTO, "很抱歉,你当前的钻石余额不足,无法打开vip商店!");
                return(false);
            }

            var goodsName = DailyVipGoodsRecord.GetToday(MsgDTO.FromQQ).GoodsName;
            var goods     = goodsName.Select(g => DailyVipShopSvc[g]).ToList();
            var goodsMsg  = string.Join("\r\n", goods.Select(g => $"{g.Name}({g.DiamondsNeed.CurencyFormat("Diamond")}):{g.Description}"));
            var msg       = $"今天提供的vip服务有:\r\n{goodsMsg}\r\n你当前余额为:{osPerson.Diamonds.CurencyFormat("Diamond")}";

            MsgSender.PushMsg(MsgDTO, msg);
            return(true);
        }
Пример #27
0
        private void Settlement()
        {
            var msg = $"对决结束!{CodeApi.Code_At(Winner.QQNum)}获取了胜利!";

            if (Bonus > 0)
            {
                msg += $"\r\n获得了全部赏金 {Bonus}金币!";
                var osPerson = OSPerson.GetPerson(Winner.QQNum);
                osPerson.Golds += Bonus;
                osPerson.Update();
            }
            MsgSender.PushMsg(GroupNum, 0, msg, BindAi);

            foreach (var player in players)
            {
                var p = AdvPlayer.GetPlayer(player.QQNum);
                p.BattleRecord(p.QQNum == Winner.QQNum);
                p.Update();
                if (p.QQNum != Winner.QQNum)
                {
                    var osPerson = OSPerson.GetPerson(p.QQNum);
                    osPerson.Golds -= 100;
                    osPerson.Update();
                    MsgSender.PushMsg(GroupNum, p.QQNum, $"你不幸输掉了对决,扣除100金币,你剩余金币为 {osPerson.Golds}", BindAi);
                    continue;
                }

                if (p.WinTotal % 10 != 0)
                {
                    continue;
                }

                var items = HonorSvc.CurMonthLimitItems();
                var item  = items.RandElement();
                MsgSender.PushMsg(GroupNum, p.QQNum, $"你已经累计赢得 {p.WinTotal}场对决,获取额外奖励 {item.Name}*1", BindAi);

                var record   = ItemCollectionRecord.Get(p.QQNum);
                var honorMsg = record.ItemIncome(item.Name);
                if (!string.IsNullOrEmpty(honorMsg))
                {
                    MsgSender.PushMsg(GroupNum, 0, honorMsg, BindAi);
                }
            }
        }
Пример #28
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);
        }
Пример #29
0
        public bool ViewItem(MsgInformationEx MsgDTO, object[] param)
        {
            var osPerson      = OSPerson.GetPerson(MsgDTO.FromQQ);
            var itemRecord    = ItemCollectionRecord.Get(MsgDTO.FromQQ);
            var glamourRecord = GlamourRecord.Get(MsgDTO.FromGroup, MsgDTO.FromQQ);

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

            var allNormalItems = HonorSvc.HonorList.Where(h => !h.IsLimit).SelectMany(h => h.Items).Select(p => p.Name).ToArray();

            var msgList = new List <string>();

            if (!osPerson.HonorNames.IsNullOrEmpty())
            {
                msgList.Add(string.Join("", osPerson.HonorNames.Select(h => $"【{h}】")));
            }
            msgList.Add($"等级:{osPerson.EmojiLevel}");
            msgList.Add($"经验值:{items.Count}/{allNormalItems.Length}{(items.Count == allNormalItems.Length ? "(可转生)" : string.Empty)}");

            msgList.Add($"金币:{osPerson.Golds.CurencyFormat()}");
            if (osPerson.Diamonds > 0)
            {
                msgList.Add($"钻石:{osPerson.Diamonds.CurencyFormat("Diamond")}");
            }
            msgList.Add($"物品数量:{itemRecord.TotalItemCount()}");
            msgList.Add($"成就数量:{itemRecord.HonorList?.Count ?? 0}");
            if (glamourRecord.Glamour > 0)
            {
                msgList.Add($"魅力值:{glamourRecord.Glamour}");
            }

            var buffs = OSPersonBuff.Get(MsgDTO.FromQQ);

            if (!buffs.IsNullOrEmpty())
            {
                msgList.Add("Buff列表:");
                msgList.AddRange(buffs.Select(b => $"{b.Name}:{b.Description}({b.ExpiryTime})"));
            }

            MsgSender.PushMsg(MsgDTO, string.Join("\r\n", msgList), true);
            return(true);
        }
Пример #30
0
        protected override void Sign(MsgInformationEx MsgDTO)
        {
            var sign     = SignInSuccessiveRecord.Sign(MsgDTO.FromGroup, MsgDTO.FromQQ);
            var goldsGen = Math.Min(sign.SuccessiveDays * 5, 50);

            OSPerson.GoldIncome(MsgDTO.FromQQ, goldsGen);
            var indexNo = SignInGroupInfo.GetAndUpdate(MsgDTO.FromGroup);

            var msg = $"签到成功!你已连续签到 {sign.SuccessiveDays}天,获得 {goldsGen.CurencyFormat()}!\r\n本群签到排名:【No.{indexNo}】";

            if (sign.SuccessiveDays % 10 == 0)
            {
                var cache = PersonCacheRecord.Get(MsgDTO.FromQQ, "抽奖");
                cache.Value = !string.IsNullOrEmpty(cache.Value) && int.TryParse(cache.Value, out var times) ? (times + 1).ToString() : 1.ToString();
                cache.Update();

                msg += "\r\n恭喜你获得一次抽奖机会,快去试试吧(当日有效!)";
            }
            MsgSender.PushMsg(MsgDTO, msg, true);
        }