Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
        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();
        }
Example #8
0
        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);
        }
Example #9
0
        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);
        }
Example #10
0
        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);
        }
Example #11
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #14
0
        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);
        }
Example #15
0
        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);
        }