private void JudgeResult() { if (IsGameOver()) { PushMsg("很遗憾队伍全灭,请再接再厉!"); return; } if (Gamers.Count == 1) { var winner = Gamers.First(); var treasureStr = TreasureTotal.ToString(); if (string.IsNullOrEmpty(treasureStr)) { PushMsg($"获胜者为 {CodeApi.Code_At(winner.QQNum)} !但是没有任何物品掉落"); return; } PushMsg($"获胜者为 {CodeApi.Code_At(winner.QQNum)} !获得以下物品:\r\n{treasureStr}"); TreasureTotal.SaveToPerson(winner.QQNum); return; } var msg = "恭喜你们获得了胜利!\r\n"; var treasures = TreasureTotal.Split(); msg += $"{CodeApi.Code_At(Gamers[0].QQNum)} 获取了\r\n{treasures[0]}\r\n{CodeApi.Code_At(Gamers[1].QQNum)} 获取了\r\n{treasures[1]}"; PushMsg(msg); treasures[0].SaveToPerson(Gamers[0].QQNum); treasures[1].SaveToPerson(Gamers[1].QQNum); }
private void PlayerAct(XunYuanGamingModel player, int choice, XunyuanMonsterModel monster, XunYuanGamingModel partner) { switch (choice) { case -1: { PushMsg("你放弃了思考!"); break; } case 0: { monster.HP = Math.Max(0, monster.HP - player.Attack); PushMsg($"{monster.Name} 受到了 {CodeApi.Code_At(player.QQNum)} 的 {player.Attack} 点伤害,剩余 {monster.HP} 点生命值"); break; } case 1: { partner.HP = Math.Max(0, partner.HP - player.Attack); PushMsg($"{CodeApi.Code_At(player.QQNum)} 受到了 {CodeApi.Code_At(player.QQNum)} 的 {player.Attack} 点伤害,剩余 {partner.HP} 点生命值"); if (partner.IsDead) { PushMsg($"{CodeApi.Code_At(partner.QQNum)} 被移除了队伍!"); Gamers.Remove(partner); } break; } } }
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 static void PushMsg(MsgInformationEx MsgInfo, string Content, bool isNeedAt = false) { PushMsg(new MsgCommand { Command = MsgInfo.Type == MsgType.Group ? CommandType.SendGroup : CommandType.SendPrivate, Msg = MsgInfo.Type == MsgType.Group && isNeedAt ? $"{CodeApi.Code_At(MsgInfo.FromQQ)} {Content}" : Content, ToGroup = MsgInfo.FromGroup, ToQQ = MsgInfo.FromQQ, BindAi = MsgInfo.BindAi }); }
public bool SayHello(MsgInformationEx MsgDTO, object[] param) { var query = HelloList.FirstOrDefault(h => h.GroupNum == MsgDTO.FromGroup && h.QQNum == MsgDTO.FromQQ); if (query == null) { MsgSender.PushMsg(MsgDTO, "你还没有设定过招呼内容哦~(请使用【打招呼设定】命令来设定每日打招呼内容!)"); return(false); } MsgSender.PushMsg(MsgDTO, $"{CodeApi.Code_At(MsgDTO.FromQQ)} {query.Content}"); return(true); }
private static void DoSkill(MsgInformationEx MsgDTO, long aimQQ, string key, DateTime rebornTime, string skillName) { var cache = new AliveStateCache { QQNum = aimQQ, GroupNum = MsgDTO.FromGroup, Name = skillName, RebornTime = rebornTime }; SCacheService.Cache(key, cache, rebornTime); MsgSender.PushMsg(MsgDTO, $"成功对 {CodeApi.Code_At(aimQQ)} 使用了 {skillName}!他将于 {rebornTime.ToString(CultureInfo.CurrentCulture)} 后复活!"); }
private void MonsterTurn(XunyuanMonsterModel monster) { var target = Gamers[Rander.RandInt(Gamers.Count)]; target.HP = Math.Max(0, target.HP - monster.Atk); PushMsg($"{CodeApi.Code_At(target.QQNum)} 受到了 {monster.Name} 的 {monster.Atk}点攻击伤害!剩余 {target.HP}点生命"); if (!target.IsDead) { return; } PushMsg($"{CodeApi.Code_At(target.QQNum)} 被移除了队伍!"); Gamers.Remove(target); }
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); }
private void Settlement() { var msg = $"对决结束!{CodeApi.Code_At(Winner.QQNum)}获取了胜利!"; if (Bonus > 0) { msg += $"\r\n获得了全部赏金 {Bonus}金币!"; var osPerson = OSPerson.GetPerson(Winner.QQNum); osPerson.Golds += Bonus; osPerson.Update(); } MsgSender.PushMsg(GroupNum, 0, msg, BindAi); foreach (var player in players) { var p = AdvPlayer.GetPlayer(player.QQNum); p.BattleRecord(p.QQNum == Winner.QQNum); p.Update(); if (p.QQNum != Winner.QQNum) { var osPerson = OSPerson.GetPerson(p.QQNum); osPerson.Golds -= 100; osPerson.Update(); MsgSender.PushMsg(GroupNum, p.QQNum, $"你不幸输掉了对决,扣除100金币,你剩余金币为 {osPerson.Golds}", BindAi); continue; } if (p.WinTotal % 10 != 0) { continue; } var items = HonorSvc.CurMonthLimitItems(); var item = items.RandElement(); MsgSender.PushMsg(GroupNum, p.QQNum, $"你已经累计赢得 {p.WinTotal}场对决,获取额外奖励 {item.Name}*1", BindAi); var record = ItemCollectionRecord.Get(p.QQNum); var honorMsg = record.ItemIncome(item.Name); if (!string.IsNullOrEmpty(honorMsg)) { MsgSender.PushMsg(GroupNum, 0, honorMsg, BindAi); } } }
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); }
private string ProcessMonsterCave(MonsterCave cave) { var msg = ""; var atk = CurPlayer.GetAtk(); cave.HP = Math.Max(cave.HP - atk, 0); msg += $"你打出了 {atk} 点伤害,{cave.Name}剩余{cave.HP}生命值\r\n"; if (cave.HP > 0) { CurPlayer.HP = Math.Max(CurPlayer.HP - cave.Atk, 0); msg += $"{cave.Name}对你造成了{cave.Atk}点伤害,你剩余{CurPlayer.HP}生命值"; } else { OtherPlayer.HP = Math.Max(OtherPlayer.HP - cave.Atk, 0); msg += $"{CodeApi.Code_At(OtherPlayer.QQNum)} 你受到了{cave.Atk}点伤害,你剩余{OtherPlayer.HP}生命值"; } return(msg); }
public bool AttachSegment(MsgInformationEx MsgDTO, object[] param) { var aimQQ = (long)param[0]; if (aimQQ == MsgDTO.FromQQ) { MsgSender.PushMsg(MsgDTO, "你无法和自己进行拼接!", true); return(false); } if (BindAiSvc.AllAiNums.Contains(aimQQ)) { MsgSender.PushMsg(MsgDTO, "Stupid Human!", true); return(false); } var selfRecord = SegmentRecord.Get(MsgDTO.FromQQ); if (string.IsNullOrEmpty(selfRecord.Segment)) { MsgSender.PushMsg(MsgDTO, "你当前没有任何碎片!", true); return(false); } var aimRecord = SegmentRecord.Get(aimQQ); if (string.IsNullOrEmpty(aimRecord.Segment)) { MsgSender.PushMsg(MsgDTO, "对方当前没有任何碎片!", true); return(false); } var treasure = SegmentSvc.FindTreasureBySegment(selfRecord.Segment); if (!treasure.IsMatch(selfRecord.Segment, aimRecord.Segment)) { MsgSender.PushMsg(MsgDTO, $"拼接失败,碎片不匹配!({selfRecord.Segment}×{aimRecord.Segment})"); return(false); } selfRecord.AddTreasureRecord(treasure.Name); aimRecord.AddTreasureRecord(treasure.Name); var selfBonusItems = HonorSvc.RandItems(3); var aimBonusItems = HonorSvc.RandItems(3); var selfIcRecord = ItemCollectionRecord.Get(MsgDTO.FromQQ); var aimIcRecord = ItemCollectionRecord.Get(aimQQ); var selfRate = selfRecord.IsRare ? 2 : 1; foreach (var item in selfBonusItems) { selfIcRecord.ItemIncome(item.Name, selfRate); } var aimRate = aimRecord.IsRare ? 2 : 1; foreach (var item in aimBonusItems) { aimIcRecord.ItemIncome(item.Name, aimRate); } MsgSender.PushMsg(MsgDTO, treasure.ToString()); var msg = "拼接成功!\r\n" + $"{CodeApi.Code_At(MsgDTO.FromQQ)} 获得了{selfBonusItems.Select(p => $"{p.Name}*{selfRate}").JoinToString(",")} !\r\n" + $"{CodeApi.Code_At(aimQQ)} 获得了{aimBonusItems.Select(p => $"{p.Name}*{aimRate}").JoinToString(",")} !"; MsgSender.PushMsg(MsgDTO, msg); selfRecord.ClearSegment(); aimRecord.ClearSegment(); selfRecord.Update(); aimRecord.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); }
private bool DealItem(MsgInformationEx MsgDTO, string name, long aimQQ, int price) { var aimRecord = ItemCollectionRecord.Get(aimQQ); if (!aimRecord.CheckItem(name)) { MsgSender.PushMsg(MsgDTO, "对方没有该物品!"); return(false); } var originPrice = HonorSvc.GetItemPrice(HonorSvc.FindItem(name), aimQQ); if (originPrice > price) { MsgSender.PushMsg(MsgDTO, $"收购价格无法低于系统价格({originPrice.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 = aimRecord.GetCount(name); var msg = $"收到来自 {CodeApi.Code_At(MsgDTO.FromQQ)} 的交易请求:\r\n" + $"希望得到的物品:{name}\r\n" + $"价格:{price.CurencyFormat()}({originPrice.CurencyFormat()})\r\n" + $"你当前持有:{count}个,是否确认交易?"; if (!WaiterSvc.WaitForConfirm(MsgDTO.FromGroup, aimQQ, msg, MsgDTO.BindAi, 10)) { MsgSender.PushMsg(MsgDTO, "交易取消!"); return(false); } aimRecord.ItemConsume(name); aimRecord.Update(); var sourceRecord = ItemCollectionRecord.Get(MsgDTO.FromQQ); var content = sourceRecord.ItemIncome(name); if (!string.IsNullOrEmpty(content)) { MsgSender.PushMsg(MsgDTO, content, true); } var aimOSPerson = OSPerson.GetPerson(aimQQ); sourceOSPerson.Golds -= price + fee; aimOSPerson.Golds += price; sourceOSPerson.Update(); aimOSPerson.Update(); MsgSender.PushMsg(MsgDTO, "交易完毕!"); return(true); }