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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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 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); }
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); }
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); }
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}张待审核的图片!"); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }