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); }
public void 凪() { var dailyLimit = DailyLimitRecord.Get(SelfQQNum, "DriftBottleAI_FishingBottle"); dailyLimit.Decache(); dailyLimit.Update(); }
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); }
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); }
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); }
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); }
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); }
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); }
/// <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)); }
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); }