Ejemplo n.º 1
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);
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
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);
        }
Ejemplo n.º 5
0
        protected override void Sign(MsgInformationEx MsgDTO)
        {
            var sign     = SignInSuccessiveRecord.Sign(MsgDTO.FromGroup, MsgDTO.FromQQ);
            var goldsGen = Math.Min(sign.SuccessiveDays * 5, 50);

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

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

            MsgSender.PushMsg(MsgDTO, msg, true);
        }
Ejemplo n.º 6
0
        public bool GoldBonus(MsgInformationEx MsgDTO, object[] param)
        {
            var qqNum = (long)param[0];
            var golds = (int)(long)param[1];

            var osPerson = OSPerson_Doremi.GetPerson(qqNum);

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

            MsgSender.PushMsg(MsgDTO, "奖励已生效!");
            return(true);
        }
Ejemplo n.º 7
0
        public bool MyStatus(MsgInformationEx MsgDTO, object[] param)
        {
            var osPerson    = OSPerson_Doremi.GetPerson(MsgDTO.FromQQ);
            var level       = LevelSvc.GetByLevel(osPerson.Level);
            var exp         = MsgCounterSvc.Get(MsgDTO.FromQQ);
            var armerRecord = PersonArmerRecord.Get(MsgDTO.FromQQ);

            var session = new MsgSession(MsgDTO);

            session.Add($"等级:{level.Name}{(level.Level == LevelSvc.TopLevel ? "(满级)" : "")}");
            session.Add($"经验值:{exp}/{level.Exp}{(exp   >= level.Exp ? "(可渡劫)" : "")}");
            session.Add($"{Emoji.心}:{level.HP}(+{ArmerSvc.CountHP(armerRecord.Armers)})");
            session.Add($"{Emoji.剑}:{level.Atk}(+{ArmerSvc.CountAtk(armerRecord.Armers)})");
            session.Add($"金币:{osPerson.Golds}");

            session.Send();
            return(true);
        }
Ejemplo n.º 8
0
        public bool Exchange(MsgInformationEx MsgDTO, object[] param)
        {
            var exp   = MsgCounterSvc.Get(MsgDTO.FromQQ);
            var golds = exp / 2;

            if (golds == 0)
            {
                MsgSender.PushMsg(MsgDTO, "你没有足够的经验值兑换!");
                return(false);
            }

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

            osPerson.Golds += (int)golds;
            osPerson.Update();
            MsgCounterSvc.Consume(MsgDTO.FromQQ, exp);

            MsgSender.PushMsg(MsgDTO, $"兑换成功!你使用 {exp} 点经验值兑换了 {golds}金币,你当前拥有 {osPerson.Golds}金币!");
            return(true);
        }
Ejemplo n.º 9
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);
        }
Ejemplo n.º 10
0
        public void SaveToPerson(long QQNum)
        {
            Simplify();

            var armerRecord = PersonArmerRecord.Get(QQNum);

            foreach (var(name, count) in NormalArmers)
            {
                armerRecord.ArmerGet(name, count);
            }

            foreach (var(name, count) in EscapeArmers)
            {
                armerRecord.EscapeArmerGet(name, count);
            }

            var osPerson = OSPerson_Doremi.GetPerson(QQNum);

            osPerson.Golds += Golds;

            armerRecord.Update();
            osPerson.Update();
        }
Ejemplo n.º 11
0
        public bool Upgrade(MsgInformationEx MsgDTO, object[] param)
        {
            var osPerson = OSPerson_Doremi.GetPerson(MsgDTO.FromQQ);
            var level    = LevelSvc.GetByLevel(osPerson.Level);
            var exp      = MsgCounterSvc.Get(MsgDTO.FromQQ);

            if (exp < level.Exp)
            {
                MsgSender.PushMsg(MsgDTO, "你没有足够的经验值升级!", true);
                return(false);
            }

            if (level.Level == LevelSvc.TopLevel)
            {
                MsgSender.PushMsg(MsgDTO, "你已满级,无需渡劫!", true);
                return(false);
            }

            MsgSender.PushMsg(MsgDTO, "渡劫开始!你需要回答对全部问题才能成功渡劫!");

            var qas = DujieSvc.RandQAs(DujieQACount);
            int i;

            for (i = 0; i < DujieQACount; i++)
            {
                var randAs = qas[i].RandAs;
                var msg    = $"题目({i + 1}/{DujieQACount}):\r\n" +
                             $"{qas[i].Q}\r\n" +
                             $"{string.Join("\r\n", randAs.Select((p, idx) => $"{idx + 1}:{p}"))}";
                var i1   = i;
                var info = WaiterSvc.WaitForInformation(MsgDTO, msg, information => information.FromGroup == MsgDTO.FromGroup &&
                                                        information.FromQQ == MsgDTO.FromQQ &&
                                                        int.TryParse(information.Msg, out var idx) &&
                                                        idx > 0 && idx <= qas[i1].A.Length, 10);
                if (info == null)
                {
                    MsgSender.PushMsg(MsgDTO, "回答超时!");
                    break;
                }

                var aidx = int.Parse(info.Msg) - 1;
                if (!qas[i].IsCorrect(randAs[aidx]))
                {
                    MsgSender.PushMsg(MsgDTO, "回答错误!");
                    break;
                }

                MsgSender.PushMsg(MsgDTO, "回答正确!");
            }

            MsgCounterSvc.Consume(MsgDTO.FromQQ, level.Exp);
            if (i != DujieQACount)
            {
                MsgSender.PushMsg(MsgDTO, "渡劫失败,请重新来过!", true);
                return(true);
            }

            osPerson.Level++;
            osPerson.Update();

            MsgSender.PushMsg(MsgDTO, "升级成功!");
            return(true);
        }