Example #1
0
        private void ShowResult()
        {
            var msg = "对决结束!\r\n";

            if (Winner == null)
            {
                Winner = SelfPet.HP > AimPet.HP ? SelfPet : AimPet;
            }

            msg += $"恭喜{Winner.Name} 获得了胜利!奖励捞瓶子机会一次(当日有效)!";
            var dailyLimit = DailyLimitRecord.Get(Winner.QQNum, "DriftBottleAI_FishingBottle");

            dailyLimit.Decache();
            dailyLimit.Update();

            msg += $"\r\n很遗憾,{Loser.Name}输掉了比赛,在12小时内无法捞瓶子!";
            var buff = new OSPersonBuff
            {
                QQNum       = Loser.QQNum,
                Name        = "昙天",
                Description = "不可以捞瓶子",
                ExpiryTime  = DateTime.Now.AddHours(12),
                IsPositive  = false,
                Data        = 1,
                Source      = Winner.QQNum
            };

            buff.Add();

            SendMessage(msg);
        }
Example #2
0
        public void 凪()
        {
            var dailyLimit = DailyLimitRecord.Get(SelfQQNum, "DriftBottleAI_FishingBottle");

            dailyLimit.Decache();
            dailyLimit.Update();
        }
Example #3
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);
        }
Example #4
0
        public bool RefreshCommand(MsgInformationEx MsgDTO, object[] param)
        {
            var aimQQ   = (long)param[0];
            var command = param[1] as string;
            var enter   = CrossWorldAiSvc[MsgDTO.FromGroup].AllAvailableGroupCommands.FirstOrDefault(p => p.CommandsList.Contains(command));

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

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

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

            MsgSender.PushMsg(MsgDTO, "刷新成功!");

            return(true);
        }
Example #5
0
        public bool FishingBonus(MsgInformationEx MsgDTO, object[] param)
        {
            var command = param[0] as string;
            var qqNum   = (long)param[1];
            var count   = (int)(long)param[2];

            var enter = CrossWorldAiSvc[MsgDTO.FromGroup].AllAvailableGroupCommands.FirstOrDefault(p => p.CommandsList.Contains(command));

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

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

            dailyLimit.Decache(count);
            dailyLimit.Update();

            MsgSender.PushMsg(MsgDTO, "奖励已生效!");
            return(true);
        }
Example #6
0
        public bool FunctionBonus(MsgInformationEx MsgDTO, object[] param)
        {
            var command = param[0] as string;
            var qqNum   = (long)param[1];
            var count   = (int)(long)param[2];

            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(qqNum, enter.ID);

            dailyLimit.Decache(count);
            dailyLimit.Update();

            MsgSender.PushMsg(MsgDTO, "奖励已生效!");
            return(true);
        }
Example #7
0
        public bool OpenFinalTreasure(MsgInformationEx MsgDTO, object[] param)
        {
            var record = SegmentRecord.Get(MsgDTO.FromQQ);

            if (!record.CanOpenFinalTreasure)
            {
                MsgSender.PushMsg(MsgDTO, "很遗憾,你还不能开启终极宝藏,继续努力吧!(开启过所有其他宝藏才能开启终极宝藏!)", true);
                return(false);
            }

            var options     = new[] { "获取500金币", "随机获取商店售卖的一件商品*5", "宠物获取50点经验值", "捞瓶子机会*5(仅当日有效)" };
            var selectedIdx = WaiterSvc.WaitForOptions(MsgDTO.FromGroup, MsgDTO.FromQQ, "请选择你要开启的宝藏:", options, MsgDTO.BindAi);

            if (selectedIdx < 0)
            {
                MsgSender.PushMsg(MsgDTO, "你已经放弃了思考!");
                return(false);
            }

            switch (selectedIdx)
            {
            case 0:
            {
                var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);
                osPerson.Golds += 500;
                osPerson.Update();

                MsgSender.PushMsg(MsgDTO, $"恭喜你获得了 {500.CurencyFormat()}!");
                break;
            }

            case 1:
            {
                var items    = TransHelper.GetDailySellItems();
                var randItem = items.RandElement();

                MsgSender.PushMsg(MsgDTO, $"恭喜你获得了 {randItem.Name}*5!");

                var collo = ItemCollectionRecord.Get(MsgDTO.FromQQ);
                var msg   = collo.ItemIncome(randItem.Name, 5);
                if (!string.IsNullOrEmpty(msg))
                {
                    MsgSender.PushMsg(MsgDTO, msg);
                }
                break;
            }

            case 2:
            {
                var pet = PetRecord.Get(MsgDTO.FromQQ);
                var msg = pet.ExtGain(MsgDTO, 50);
                MsgSender.PushMsg(MsgDTO, msg);
                break;
            }

            case 3:
            {
                var dailyLimit = DailyLimitRecord.Get(MsgDTO.FromQQ, "DriftBottleAI_FishingBottle");
                dailyLimit.Decache(5);
                dailyLimit.Update();

                MsgSender.PushMsg(MsgDTO, "恭喜你获取 捞瓶子机会*5(仅当日有效) !");
                break;
            }
            }

            record.FinalTreasureCount++;
            record.Update();

            return(true);
        }
Example #8
0
        public override bool OnMsgReceived(MsgInformationEx MsgDTO)
        {
            if (base.OnMsgReceived(MsgDTO))
            {
                return(true);
            }

            if (MsgDTO.Type == MsgType.Group)
            {
                var bindAi = BindAiSvc.AiDic.Values.FirstOrDefault(p => MsgDTO.FullMsg.Contains(CodeApi.Code_At(p.SelfNum)));
                if (bindAi == null)
                {
                    return(false);
                }

                MsgDTO.BindAi = bindAi.Name;
            }

            var stateCache = AliveStateSvc.GetState(MsgDTO.FromGroup, MsgDTO.FromQQ);

            if (stateCache != null)
            {
                MsgSender.PushMsg(MsgDTO, $"你已经死了({stateCache.Name})!复活时间:{stateCache.RebornTime:yyyy-MM-dd HH:mm:ss}", true);
                return(false);
            }

            var limitRecord = DailyLimitRecord.Get(MsgDTO.FromQQ, "Tuling");

            if (!limitRecord.Check(TulingDailyLimit))
            {
                MsgSender.PushMsg(MsgDTO, "今天太累了,明天再找我说话吧~", MsgDTO.Type == MsgType.Group);
                return(false);
            }
            limitRecord.Cache();
            limitRecord.Update();

            foreach (var aiNum in BindAiSvc.AllAiNums)
            {
                MsgDTO.FullMsg = MsgDTO.FullMsg.Replace(CodeApi.Code_At(aiNum), string.Empty);
            }

            string response = null;

            foreach (var tuling in ApiKeys.Select(_ => ApiKeys[CurTulingIndex]))
            {
                response = RequestMsg(MsgDTO, tuling.ApiKey);
                if (!string.IsNullOrEmpty(response))
                {
                    break;
                }

                CurTulingIndex = (CurTulingIndex + 1) % ApiKeys.Count;
            }

            if (string.IsNullOrEmpty(response))
            {
                MsgSender.PushMsg(MsgDTO, "今天太累了,明天再找我说话吧~", MsgDTO.Type == MsgType.Group);
                return(false);
            }

            AIAnalyzer.AddCommandCount(new CmdRec()
            {
                FunctionalAi = AIName,
                Command      = "TulingOverride",
                GroupNum     = MsgDTO.FromGroup,
                BindAi       = MsgDTO.BindAi
            });
            MsgSender.PushMsg(MsgDTO, response, MsgDTO.Type == MsgType.Group);
            return(true);
        }
Example #9
0
        /// <summary>
        /// 每日限制检查
        /// </summary>
        /// <param name="enterAttr"></param>
        /// <param name="MsgDTO"></param>
        /// <param name="limitRecord"></param>
        /// <returns></returns>
        private static bool DailyLimitCheck(EnterCommandAttribute enterAttr, MsgInformation MsgDTO, DailyLimitRecord limitRecord)
        {
            var isTestingGroup = Global.TestGroups.Contains(MsgDTO.FromGroup);
            var timesLimit     = isTestingGroup ? enterAttr.TestingDailyLimit : enterAttr.DailyLimit;

            return(timesLimit == 0 || limitRecord.Check(timesLimit));
        }
Example #10
0
        public virtual bool OnMsgReceived(MsgInformationEx MsgDTO)
        {
            var query = ModuleDels.Where(c => c.Key.Command == MsgDTO.Command).ToList();

            if (query.IsNullOrEmpty())
            {
                return(false);
            }

            var cmdID = string.Empty;

            try
            {
                foreach (var(enterCommandAttribute, moduleDel) in query)
                {
                    if (!Check(enterCommandAttribute, MsgDTO, out var param))
                    {
                        continue;
                    }

                    AIAnalyzer.AddCommandCount(new CmdRec()
                    {
                        FunctionalAi = AIName,
                        Command      = enterCommandAttribute.Command,
                        GroupNum     = MsgDTO.FromGroup,
                        BindAi       = MsgDTO.BindAi
                    });

                    if (!StateCheck(MsgDTO))
                    {
                        return(true);
                    }

                    var limitRecord = DailyLimitRecord.Get(MsgDTO.FromQQ, enterCommandAttribute.ID);
                    var checkResult = DailyLimitCheck(enterCommandAttribute, MsgDTO, limitRecord);
                    if (!checkResult)
                    {
                        MsgSender.PushMsg(MsgDTO, $"你今天 【{enterCommandAttribute.Command}】 的次数已用完");
                        return(true);
                    }

                    cmdID = enterCommandAttribute.ID;
                    if (!CmdLockerSvc.TryLock(MsgDTO.FromQQ, enterCommandAttribute.ID, TimeSpan.FromMinutes(10)))
                    {
                        return(false);
                    }

                    var result = moduleDel(MsgDTO, param);

                    CmdLockerSvc.ReleaseLock(MsgDTO.FromQQ, enterCommandAttribute.ID);

                    if (!result)
                    {
                        return(true);
                    }

                    limitRecord.Cache();
                    limitRecord.Update();

                    return(true);
                }
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
            }
            finally
            {
                if (!string.IsNullOrEmpty(cmdID))
                {
                    CmdLockerSvc.ReleaseLock(MsgDTO.FromQQ, cmdID);
                }
            }

            return(false);
        }