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 SaveHelloContent(MsgInformationEx MsgDTO, object[] param) { var content = param[0] as string; var query = HelloList.FirstOrDefault(h => h.GroupNum == MsgDTO.FromGroup && h.QQNum == MsgDTO.FromQQ); if (query == null) { var hello = new HelloRecord { Id = Guid.NewGuid().ToString(), GroupNum = MsgDTO.FromGroup, QQNum = MsgDTO.FromQQ, Content = content }; MongoService <HelloRecord> .Insert(hello); HelloList.Add(hello); } else { query.Content = content; MongoService <HelloRecord> .Update(query); } MsgSender.PushMsg(MsgDTO, "招呼内容设定成功"); 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 MyKitchen(MsgInformationEx MsgDTO, object[] param) { var cookingRec = CookingRecord.Get(MsgDTO.FromQQ); var level = CookingLevelSvc.LocationLevel(cookingRec.TotalPrice); var msg = $"【{level.Name}(lv.{level.Level})】\r\n"; var itemColle = ItemCollectionRecord.Get(MsgDTO.FromQQ); var dietList = cookingRec.LearndDietMenu.Select(diet => { var Diet = CookingDietSvc[diet]; if (!Diet.Flavorings.IsNullOrEmpty() && !cookingRec.CheckFlavorings(Diet.Flavorings) || !Diet.Materials.IsNullOrEmpty() && !itemColle.CheckItem(Diet.Materials)) { return($"{diet}(材料不足)"); } return(diet); }); msg += $"已学会的菜谱:{string.Join(",", dietList)}\r\n"; msg += $"当前持有菜肴:{string.Join(",", cookingRec.CookedDietDic.Select(p => $"{p.Key}*{p.Value}"))}\r\n"; msg += $"当前持有调味料:{string.Join(",", cookingRec.FlavoringDic.Select(p => $"{p.Key}*{p.Value}"))}\r\n"; msg += $"推荐学习菜谱:【{CookingDietSvc.SuggestDiet(cookingRec.LearndDietMenu)?.Name}】"; MsgSender.PushMsg(MsgDTO, msg); return(true); }
public bool MyTreasureRecord(MsgInformationEx MsgDTO, object[] param) { var record = SegmentRecord.Get(MsgDTO.FromQQ); if (record.TreasureRecord.IsNullOrEmpty()) { MsgSender.PushMsg(MsgDTO, "你还没有开启过任何宝藏!"); return(false); } var session = new MsgSession(MsgDTO); session.Add(record.TreasureRecord.Select(p => $"{p.Key}:{p.Value}次").ToList()); session.Add($"总计:{record.TreasureRecord.Sum(p => p.Value)}次"); var finalMsg = $"终极宝藏:{record.FinalTreasureCount}次"; if (record.CanOpenFinalTreasure) { finalMsg += $"(还可开启{record.TreasureRecord.Values.Min() - record.FinalTreasureCount}次)"; } session.Add(finalMsg); session.Send(); return(true); }
private static bool FeedPetWithItem(MsgInformationEx MsgDTO, PetRecord pet, DriftBottleItemModel item) { if (item.Attributes == null) { MsgSender.PushMsg(MsgDTO, "该物品无法投喂!"); return(false); } if (!item.Attributes.Contains(pet.Attribute)) { MsgSender.PushMsg(MsgDTO, $"{pet.Name}说不想吃这个东西(请喂食正确特性的物品)"); return(false); } var honorRecord = ItemCollectionRecord.Get(MsgDTO.FromQQ); if (!honorRecord.CheckItem(item.Name)) { MsgSender.PushMsg(MsgDTO, "你没有该物品!", true); return(false); } var resMsg = $"{pet.Name}兴奋的吃掉了 {item.Name},并打了个饱嗝\r\n"; pet.LastFeedTime = DateTime.Now; resMsg += pet.ExtGain(MsgDTO, item.Exp); honorRecord.ItemConsume(item.Name); honorRecord.Update(); MsgSender.PushMsg(MsgDTO, resMsg); return(true); }
public bool StarFortune(MsgInformationEx MsgDTO, object[] param) { var jr = new FortuneRequestor(MsgDTO, (Msg, Report) => MsgSender.PushMsg(Msg, Report)); Task.Run(() => jr.Work()); return(true); }
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); }
public bool TodaySignContent(MsgInformationEx MsgDTO, object[] param) { var content = GroupSignInDic.ContainsKey(MsgDTO.FromGroup) ? GroupSignInDic[MsgDTO.FromGroup].Content : "签到"; MsgSender.PushMsg(MsgDTO, $"今日签到内容是:{content}"); return(true); }
public bool SetSignContent(MsgInformationEx MsgDTO, object[] param) { var content = param[0] as string; if (content != "签到" && CrossWorldAiSvc[MsgDTO.FromGroup].AllAvailableGroupCommands.Any(comm => comm.Command == content)) { MsgSender.PushMsg(MsgDTO, "不能与系统自带命令重复!"); return(false); } if (GroupSignInDic.ContainsKey(MsgDTO.FromGroup)) { var groupSignIn = GroupSignInDic[MsgDTO.FromGroup]; groupSignIn.Content = content; groupSignIn.Update(); } else { var groupSignIn = new SignInGroupRecord() { GroupNum = MsgDTO.FromGroup, Content = content }; MongoService <SignInGroupRecord> .Insert(groupSignIn); GroupSignInDic.Add(MsgDTO.FromGroup, groupSignIn); } MsgSender.PushMsg(MsgDTO, "设置成功!"); return(true); }
public bool Sell(MsgInformationEx MsgDTO, object[] param) { if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "快晴")) { MsgSender.PushMsg(MsgDTO, "你无法进行该操作!(快晴)"); return(false); } var name = param[0] as string; var item = HonorSvc.FindItem(name); if (item != null) { return(SellItem(MsgDTO, item)); } if (HonorSvc.FindHonor(name) != null) { return(SellHonor(MsgDTO, name)); } MsgSender.PushMsg(MsgDTO, "未查找到相关物品或成就!"); return(false); }
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); }
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 SellMulti(MsgInformationEx MsgDTO, object[] param) { if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "快晴")) { MsgSender.PushMsg(MsgDTO, "你无法进行该操作!(快晴)"); return(false); } var name = param[0] as string; var count = (int)(long)param[1]; if (count <= 0) { MsgSender.PushMsg(MsgDTO, "错误的物品数量!"); return(false); } var item = HonorSvc.FindItem(name); if (item != null) { SellItem(MsgDTO, item, count); return(true); } MsgSender.PushMsg(MsgDTO, "未查找到相关物品!"); return(false); }
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); }
private void OnReqFire(UserToken token, SocketModel model) { ReqFire req = SerializeUtil.Deserialize <ReqFire>(model.message); AccountData acc = CacheManager.instance.GetAccount(token.accountid); if (acc == null) { return; } Battle battle = CacheManager.instance.GetBattle(acc.battleid, acc.battleType); Tank t = battle.GetTank(token.accountid); if (t != null && t.hp > 0) { //校验两次攻击间隔 if (Time.time * 0.001f - t.lastFireTime < 1) { return; } t.lastFireTime = Time.time * 0.001f; NotifyFire notify = new NotifyFire(); notify.id = token.accountid; notify.pos = req.pos; notify.rot = req.rot; MsgSender.SendOther <NotifyFire>(battle.accounts, token, (int)MsgID.NotifyFire, notify); } }
public bool GetBoomCode(MsgInformationEx MsgDTO, object[] param) { BoomCode = Rander.RandInt(100000); CodeDate = DateTime.Now; MsgSender.PushMsg(MsgDTO, BoomCode.ToString()); return(true); }
public bool RecentFlash(MsgInformationEx MsgDTO, object[] param) { var picUrl = PicCacher.Random(); MsgSender.PushMsg(MsgDTO, CodeApi.Code_Flash_Relational(picUrl)); return(true); }
private void Broadcast(string msg) { foreach (var group in GroupSettingSvc.AllGroups.Where(p => p.IsPowerOn && p.WorldLine == "Doremi")) { MsgSender.PushMsg(group.GroupNum, 0, msg, BindAi); } }
public bool MySegment(MsgInformationEx MsgDTO, object[] param) { var record = SegmentRecord.Get(MsgDTO.FromQQ); if (string.IsNullOrEmpty(record.Segment)) { MsgSender.PushMsg(MsgDTO, "你尚未持有任何宝藏碎片!", true); return(false); } var segment = SegmentSvc.FindSegmentByName(record.Segment); if (segment == null) { MsgSender.PushMsg(MsgDTO, "未找到指定的宝藏碎片"); return(false); } var treasure = SegmentSvc.FindTreasureBySegment(record.Segment); var session = new MsgSession(MsgDTO); session.Add(segment.ToString()); session.Add($"可开启宝藏:{treasure.Name}"); if (record.IsRare) { session.Add("【稀有】:拼接后将得到双倍奖励!"); } session.Send(); return(true); }
public bool BindAi(MsgInformationEx MsgDTO, object[] param) { var groupNum = (long)param[0]; var name = (string)param[1]; var setting = GroupSettingSvc[groupNum]; if (setting == null) { MsgSender.PushMsg(MsgDTO, "错误的群号"); return(false); } if (!BindAiSvc.AiDic.ContainsKey(name)) { MsgSender.PushMsg(MsgDTO, "错误的机器人名"); return(false); } setting.BindAis ??= new List <string>(); if (!setting.BindAis.Contains(name)) { setting.BindAis.Add(name); } setting.Update(); MsgSender.PushMsg(MsgDTO, "绑定成功!"); return(true); }
private static bool FeedPetWithDiet(MsgInformationEx MsgDTO, PetRecord pet, CookingDietModel diet) { if (!diet.Attributes.Contains(pet.Attribute)) { MsgSender.PushMsg(MsgDTO, $"{pet.Name}说不想吃这个东西(请喂食正确特性的菜肴)"); return(false); } var cookingRec = CookingRecord.Get(MsgDTO.FromQQ); if (!cookingRec.CheckDiet(diet.Name)) { MsgSender.PushMsg(MsgDTO, "你没有该菜肴!"); return(false); } var resMsg = $"{pet.Name}兴奋的吃掉了 {diet.Name},并打了个饱嗝\r\n"; pet.LastFeedTime = DateTime.Now; resMsg += pet.ExtGain(MsgDTO, diet.Exp); cookingRec.DietConsume(diet.Name); cookingRec.Update(); MsgSender.PushMsg(MsgDTO, resMsg); return(true); }
public bool DataRefresh(MsgInformationEx MsgDTO, object[] param) { var count = DataRefreshSvc.RefreshAll(); MsgSender.PushMsg(MsgDTO, $"刷新成功!共刷新 {count}个数据项!"); return(true); }
public bool MyCookingHistory(MsgInformationEx MsgDTO, object[] param) { var cookingRec = CookingRecord.Get(MsgDTO.FromQQ); var history = cookingRec.CookingHistory; if (history.IsNullOrEmpty()) { MsgSender.PushMsg(MsgDTO, "你尚未烹饪过任何东西!"); return(false); } var sumDietCount = history.Sum(p => p.Value); var totalPrice = cookingRec.TotalPrice; var curLevel = CookingLevelSvc.LocationLevel(totalPrice); var nextLevel = CookingLevelSvc[curLevel.Level + 1]; var msg = $"你总共烹饪过 {sumDietCount} 道菜肴\r\n" + $"总共消耗了物品 {cookingRec.ItemConsumeDic.Sum(p => p.Value)} 个,调味料 {cookingRec.FlavoringTotal} 个\r\n" + $"总价值:{totalPrice.CurencyFormat()}\r\n" + $"当前烹饪评级为:【{curLevel.Name}(lv.{curLevel.Level})】,距离下一等级【{nextLevel.Name}({nextLevel.Level})】还差 {(nextLevel.NeedPrice - totalPrice).CurencyFormat()}"; MsgSender.PushMsg(MsgDTO, msg); return(true); }
public bool CurrentRestrictor(MsgInformationEx MsgDTO, object[] param) { var limitDic = RestrictorSvc.BindAiLimit; MsgSender.PushMsg(MsgDTO, string.Join("\r\n", limitDic.Select(p => $"{p.Key}:{p.Value}"))); return(true); }
public bool MyArmers_Paged(MsgInformationEx MsgDTO, object[] param) { var pageNo = (int)(long)param[0]; var paRec = PersonArmerRecord.Get(MsgDTO.FromQQ); if (paRec.Armers.IsNullOrEmpty()) { MsgSender.PushMsg(MsgDTO, "你尚未拥有任何装备!", true); return(true); } var armerInfos = paRec.Armers.Select(a => new { Count = a.Value, Model = ArmerSvc[a.Key] }).OrderBy(p => p.Model.Kind).ThenByDescending(p => p.Model.Price).ToList(); var totalPageCount = (armerInfos.Count - 1) / 20 + 1; if (pageNo <= 0 || pageNo > totalPageCount) { MsgSender.PushMsg(MsgDTO, "页码错误!", true); return(false); } var showInfos = armerInfos.Skip((pageNo - 1) * 20).Take(20); var msg = string.Join(", ", showInfos.Select(a => $"{a.Model.Name}*{a.Count}")); msg = $"该页的装备有:\r\n{msg}"; if (armerInfos.Count > 20) { msg += $"\r\n当前显示第 {pageNo}/{totalPageCount}页,请使用 我的装备 [页码] 命令查看更多装备!"; } MsgSender.PushMsg(MsgDTO, msg, true); return(true); }
public override bool OnGroupMemberChanged(GroupMemberChangeModel model) { var group = GroupSettingSvc[model.GroupNum]; if (model.Type == 1) { group.MembersCount--; group.Update(); return(true); } group.MembersCount++; group.Update(); var msg = $"欢迎加入本群!你是本群第{group.MembersCount}名成员!\r\n"; msg += "----------\r\n"; msg += "友情提示:加入任何群都要先看群公告哦!\r\n"; msg += "请热爱本群,勿轻易退出\r\n"; msg += "请遵守群规,勿漠视管理\r\n"; msg += "请活跃气氛,勿长期潜水\r\n"; msg += "请谨言慎行,勿广告刷屏\r\n"; msg += "请团结友爱,勿攻击谩骂\r\n"; msg += "请公开讨论,勿私聊骚扰\r\n"; MsgSender.PushMsg(model.GroupNum, model.QQNum, msg, group.BindAi); 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 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); }
private bool ProcessHello(MsgInformationEx MsgDTO) { var hello = HelloList.FirstOrDefault(h => h.GroupNum == MsgDTO.FromGroup && h.QQNum == MsgDTO.FromQQ); if (hello == null) { return(false); } var key = $"Hello-{MsgDTO.FromGroup}-{MsgDTO.FromQQ}"; var response = SCacheService.Get <HelloCache>(key); if (response != null) { return(false); } MsgSender.PushMsg(MsgDTO, hello.Content, true); var model = new HelloCache { GroupNum = MsgDTO.FromGroup, LastUpdateTime = DateTime.Now, QQNum = MsgDTO.FromQQ }; SCacheService.Cache(key, model); return(true); }
void listen() { server = System.Net.Sockets.TcpListener.Create(port); server.Start(); Console.Write($"Listening at {port}..."); do { var serverside_client = server.AcceptTcpClient(); var sender = new MsgSender(serverside_client); senders.Add(sender); sender.Start(); Console.WriteLine("\nClient connected"); } while (true); }