public bool MyPet(MsgInformationEx MsgDTO, object[] param) { var pet = PetRecord.Get(MsgDTO.FromQQ); var levelModel = PetLevelSvc[pet.Level]; var HasExtEndur = VipArmerRecord.Get(MsgDTO.FromQQ).CheckArmer("耐力护符"); var extEndur = HasExtEndur ? "(+10)" : string.Empty; var petEndur = levelModel.Endurance - PetEnduranceRecord.Get(MsgDTO.FromQQ).ConsumeTotal + (HasExtEndur ? 10 : 0); var session = new MsgSession(MsgDTO); session.Add($"{CodeApi.Code_Image_Relational(pet.PicPath)}"); session.Add($"名称:{pet.Name}"); session.Add($"种族:{pet.PetNo}"); session.Add($"食性:{pet.Attribute ?? "无"}"); session.Add($"等级:{Utility.LevelEmoji(pet.Level)}"); session.Add($"{Emoji.心}:{levelModel.HP}"); session.Add($"耐力:{petEndur}/{levelModel.Endurance}{extEndur}"); session.Add($"经验值:{pet.Exp}/{levelModel.Exp}"); if (!pet.Skills.IsNullOrEmpty()) { session.Add($"技能:{pet.Skills.Select(p => $"{p.Key}({p.Value})").JoinToString(",")}"); } if (pet.RemainSkillPoints > 0) { session.Add($"可用技能点:{pet.RemainSkillPoints}"); } session.Send(); 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); }
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); }
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 PetLevelRank(MsgInformationEx MsgDTO, object[] param) { var data = PetRecord.LevelTop(10); var msg = string.Join("\r\n", data.Select((p, idx) => $"{idx + 1}:{p.Name}({Utility.LevelEmoji(p.Level)})({p.Exp}/{PetLevelSvc[p.Level].Exp})")); MsgSender.PushMsg(MsgDTO, msg); return(true); }
public bool PetLevelAnalyze(MsgInformationEx MsgDTO, object[] param) { var data = PetRecord.LevelAnalyze(); var msg = string.Join("\r\n", data.Select(p => $"{p.Key}:{p.Value}")); MsgSender.PushMsg(MsgDTO, msg); return(true); }
private static void SetPetPicCallBack(PicReviewRecord record) { if (record.Status == PicReviewStatus.Refused) { return; } var picFile = new FileInfo($"{CachePath}{record.PicName}"); picFile.CopyTo($"{PetPicFolder}{record.PicName}", true); var pet = PetRecord.Get(record.QQNum); pet.PicPath = $"{PetPicFolder}{record.PicName}"; pet.Update(); }
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 static string ExtGain(this PetRecord pet, MsgInformationEx MsgDTO, int exp) { var remainExp = pet.Exp + exp; var lvl = pet.Level; var PetLevelMgr = AutofacSvc.Resolve <PetLevelSvc>(); var levelMode = PetLevelMgr[lvl]; while (levelMode.Exp <= remainExp) { remainExp -= levelMode.Exp; lvl++; levelMode = PetLevelMgr[lvl]; } var msg = $"{pet.Name}获得了 {exp} 点经验值!"; if (lvl > pet.Level) { var points = (lvl - pet.Level) * 2; msg += $"\r\n恭喜{pet.Name}升到了 {lvl} 级!\r\n" + $"{pet.Name}获得了 {points} 点技能点!"; pet.RemainSkillPoints += points; var skills = AutofacSvc.Resolve <PetSkillSvc>().AllSkills.Where(p => p.LearnLevel > pet.Level && p.LearnLevel <= lvl).ToList(); if (!skills.IsNullOrEmpty()) { msg += $"\r\n恭喜{pet.Name}学会了新技能 {string.Join(",", skills.Select(p => p.Name))}!"; if (pet.Skills == null) { pet.Skills = new Dictionary <string, int>(); } foreach (var skill in skills) { pet.Skills.Add(skill.Name, 1); } } } pet.Level = lvl; pet.Exp = remainExp; pet.Update(); return(msg); }
public bool UpgradePetSkill(MsgInformationEx MsgDTO, object[] param) { var name = (string)param[0]; var skill = PetSkillSvc[name]; if (skill == null) { MsgSender.PushMsg(MsgDTO, "未查找到该技能!", true); 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); } if (pet.Skills.IsNullOrEmpty() || !pet.Skills.ContainsKey(name)) { MsgSender.PushMsg(MsgDTO, $"{pet.Name}尚未学习该技能!", true); return(false); } if (pet.Skills[name] >= 5) { MsgSender.PushMsg(MsgDTO, $"{pet.Name}的该技能已经升到了满级!", true); return(false); } if (pet.RemainSkillPoints <= 0) { MsgSender.PushMsg(MsgDTO, $"{pet.Name}没有可用的技能点!", true); return(false); } pet.Skills[name]++; pet.RemainSkillPoints--; pet.Update(); MsgSender.PushMsg(MsgDTO, $"恭喜{pet.Name}的{name}技能成功升到了{pet.Skills[name]}级!"); return(true); }
public bool FeedPet(MsgInformationEx MsgDTO, object[] param) { var name = param[0] as string; 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); } if (string.IsNullOrEmpty(pet.Attribute)) { MsgSender.PushMsg(MsgDTO, "请先设置宠物食性!", true); return(false); } if (pet.LastFeedTime != null && pet.LastFeedTime.Value.AddHours(FeedInterval) > DateTime.Now) { var msg = $"{pet.Name}还饱着呢,不想吃东西(请与{pet.LastFeedTime.Value.AddHours(FeedInterval)}后再试)"; MsgSender.PushMsg(MsgDTO, msg); return(false); } var item = HonorSvc.FindItem(name); if (item != null) { return(FeedPetWithItem(MsgDTO, pet, item)); } var diet = CookingDietSvc[name]; if (diet != null) { return(FeedPetWithDiet(MsgDTO, pet, diet)); } MsgSender.PushMsg(MsgDTO, "未查找到相关物品或菜肴!"); return(false); }
public static PetRecord Get(long QQNum) { var pet = MongoService <PetRecord> .GetOnly(p => p.QQNum == QQNum); if (pet != null) { return(pet); } var aimPath = $"./images/Custom/Pet/{QQNum}.jpg"; File.Copy("./images/Pet/Neptune/Default.jpg", aimPath, true); pet = new PetRecord() { QQNum = QQNum, PetNo = "Neptune", Name = "涅普", Level = 1, PicPath = aimPath }; MongoService <PetRecord> .Insert(pet); return(pet); }
public bool ViewPetSkill(MsgInformationEx MsgDTO, object[] param) { var name = (string)param[0]; var skill = PetSkillSvc[name]; if (skill == null) { MsgSender.PushMsg(MsgDTO, "未查找到该技能!", true); return(false); } var pet = PetRecord.Get(MsgDTO.FromQQ); var session = new MsgSession(MsgDTO); session.Add($"名称:{skill.Name}"); session.Add($"描述:{skill.CommDesc}"); session.Add($"解锁:{skill.LearnLevel}"); session.Add($"当前:{(pet.Skills != null && pet.Skills.ContainsKey(name) ? pet.Skills[name] : 0)}"); session.Send(); return(true); }
public bool SetPetKind(MsgInformationEx MsgDTO, object[] param) { var name = param[0] as string; name = name?.Trim(); if (string.IsNullOrEmpty(name)) { MsgSender.PushMsg(MsgDTO, "种族不能为空!", true); return(false); } if (name.Length > 10) { MsgSender.PushMsg(MsgDTO, "种族不能超过10个字!", true); return(false); } var pet = PetRecord.Get(MsgDTO.FromQQ); pet.PetNo = name; pet.Update(); MsgSender.PushMsg(MsgDTO, "设定成功!"); return(true); }
public bool Fight(MsgInformationEx MsgDTO, object[] param) { var aimQQ = (long)param[0]; if (aimQQ == MsgDTO.FromQQ) { MsgSender.PushMsg(MsgDTO, "你无法挑战你自己!"); return(false); } if (!PetAgainstSvc.CheckGroup(MsgDTO.FromGroup)) { MsgSender.PushMsg(MsgDTO, "本群正在进行一场宠物对决,请稍后再试!"); return(false); } if (!PetAgainstSvc.CheckQQ(MsgDTO.FromQQ)) { MsgSender.PushMsg(MsgDTO, "你的宠物正在进行一场宠物对决,请稍后再试!"); return(false); } if (!PetAgainstSvc.CheckQQ(aimQQ)) { MsgSender.PushMsg(MsgDTO, "你的对手正在进行一场宠物对决,请稍后再试!"); return(false); } if (BindAiSvc.AllAiNums.Contains(aimQQ)) { MsgSender.PushMsg(MsgDTO, "鱼唇的人类,你无法挑战AI的威严!", true); return(false); } var sourcePet = PetRecord.Get(MsgDTO.FromQQ); var expRec = ExpeditionRecord.GetLastest(MsgDTO.FromQQ); if (expRec != null && expRec.IsExpediting) { MsgSender.PushMsg(MsgDTO, $"{sourcePet.Name}正在【{expRec.Scene}】进行一项伟大的远征,请于{expRec.EndTime:yyyy-MM-dd HH:mm:ss}后再试!"); return(false); } if (sourcePet.Level < 3) { MsgSender.PushMsg(MsgDTO, $"{sourcePet.Name}还没到3级,无法参加宠物对决!"); return(false); } var aimPet = PetRecord.Get(aimQQ); if (aimPet.Level < 3) { MsgSender.PushMsg(MsgDTO, "对方的宠物还没到3级,无法参加宠物对决!"); return(false); } expRec = ExpeditionRecord.GetLastest(aimQQ); if (expRec != null && expRec.IsExpediting) { MsgSender.PushMsg(MsgDTO, $"{aimPet.Name}正在【{expRec.Scene}】进行一项伟大的远征,请于{expRec.EndTime:yyyy-MM-dd HH:mm:ss}后再试!"); return(false); } if (!WaiterSvc.WaitForConfirm(MsgDTO.FromGroup, aimQQ, "你被邀请参加一场宠物对决,是否同意?", MsgDTO.BindAi, 10)) { MsgSender.PushMsg(MsgDTO, "对决取消!"); return(false); } PetAgainstSvc.StartGame(sourcePet, aimPet, MsgDTO.FromGroup, MsgDTO.BindAi); return(true); }