Exemplo n.º 1
0
        public void StartGame(PetRecord selfPet, PetRecord aimPet, long groupNum, string bindAi)
        {
            var engine = new PetAgainstEngine()
            {
                SelfPet = new GamingPet()
                {
                    Name   = selfPet.Name,
                    HP     = PetLevelSvc[selfPet.Level].HP,
                    QQNum  = selfPet.QQNum,
                    Skills = new Dictionary <string, int>(selfPet.Skills),
                    Level  = selfPet.Level
                },
                AimPet = new GamingPet()
                {
                    Name   = aimPet.Name,
                    HP     = PetLevelSvc[aimPet.Level].HP,
                    QQNum  = aimPet.QQNum,
                    Skills = new Dictionary <string, int>(aimPet.Skills),
                    Level  = aimPet.Level
                },
                GroupNum = groupNum,
                BindAi   = bindAi
            };

            Engines.Add(engine);
            engine.StartGame();
            Engines.Remove(engine);
        }
Exemplo n.º 2
0
        public bool Expedite(MsgInformationEx MsgDTO, object[] param)
        {
            var expeditionRec = ExpeditionRecord.GetLastest(MsgDTO.FromQQ);

            if (expeditionRec == null)
            {
                return(StartExpedite(MsgDTO));
            }

            var pet = PetRecord.Get(MsgDTO.FromQQ);

            if (expeditionRec.IsExpediting)
            {
                MsgSender.PushMsg(MsgDTO, $"{pet.Name}还在远征中,请于 {expeditionRec.EndTime:yyyy-MM-dd HH:mm:ss}后再试!");
                return(false);
            }

            if (expeditionRec.IsDrawn)
            {
                return(StartExpedite(MsgDTO));
            }

            DrawAwards(expeditionRec, MsgDTO);
            return(true);
        }
Exemplo n.º 3
0
        public bool Purchase(MsgInformationEx MsgDTO)
        {
            var pet = PetRecord.Get(MsgDTO.FromQQ);
            var msg = pet.ExtGain(MsgDTO, 100);

            MsgSender.PushMsg(MsgDTO, msg);
            return(true);
        }
Exemplo n.º 4
0
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            PetRecord petRecord = await db.Pets.FindAsync(id);

            db.Pets.Remove(petRecord);
            await db.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
Exemplo n.º 5
0
        //随机宠物特长
        public static void RefreshSpeciality(ItemBase item, PetRecord tbPet)
        {
            var skills = new Dictionary <int, int>();

            for (var index = 0; index != 3; ++index)
            {
                var tbPetSkill = Table.GetPetSkillBase(tbPet.SpecialityLibrary[index]);
                if (tbPetSkill == null)
                {
                    return;
                }
                var needCount = 1;
                //if (tbPet.Speciality[index] > 1)
                //{
                //    continue;
                //}
                //for (int i = 0; i != 3; i++)
                //{
                //    if (tbPet.Speciality[i] <= 1)
                //    {
                //        needCount++;
                //    }
                //}
                skills.Clear();
                var nTotleAttrPro = 0;
                for (var i = 0; i < tbPetSkill.SpecialityPro.Length; i++)
                {
                    if (tbPetSkill.SpecialityPro[i] < 0 || tbPetSkill.Speciality[i] < 0)
                    {
                        break;
                    }
                    skills.Add(tbPetSkill.Speciality[i], tbPetSkill.SpecialityPro[i]);
                    nTotleAttrPro += tbPetSkill.SpecialityPro[i];
                }
                //整理概率
                int nRandom, nTotleRandom;
                for (var i = 0; i != needCount; ++i)
                {
                    nRandom      = MyRandom.Random(nTotleAttrPro);
                    nTotleRandom = 0;
                    foreach (var i1 in skills)
                    {
                        nTotleRandom += i1.Value;
                        if (nRandom < nTotleRandom)
                        {
                            item.SetExdata(5 + index, i1.Key);
                            nTotleAttrPro -= i1.Value;
                            skills.Remove(i1.Key);
                            break;
                        }
                    }
                }
            }
        }
Exemplo n.º 6
0
        public async Task <ActionResult> Edit([Bind(Include = "PetID,PetName,Species,Breed,Description,ImageURL,SpecialNeeds,LocationLost,OwnerID")] PetRecord petRecord)
        {
            if (ModelState.IsValid)
            {
                db.Entry(petRecord).State = System.Data.Entity.EntityState.Modified;
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            ViewBag.OwnerID = new SelectList(db.Profiles, "OwnerID", "UserName", petRecord.OwnerID);
            return(View(petRecord));
        }
Exemplo n.º 7
0
    public static IEnumerable <int> EnumPetSkill(PetRecord table)
    {
        var tableSkillLength3 = table.Skill.Length;

        for (var i = 0; i < tableSkillLength3; i++)
        {
            if (table.Ladder > table.ActiveLadder[i])
            {
                yield return(table.Skill[i]);
            }
        }
    }
Exemplo n.º 8
0
        public bool Purchase(MsgInformationEx MsgDTO)
        {
            var endurance = PetEnduranceRecord.Get(MsgDTO.FromQQ);

            endurance.ConsumeTotal -= 10;
            endurance.ConsumeTotal  = Math.Max(0, endurance.ConsumeTotal);
            endurance.Update();

            var pet = PetRecord.Get(MsgDTO.FromQQ);

            MsgSender.PushMsg(MsgDTO, $"{pet.Name}感觉一股清凉传遍全身,恢复了10点耐力!");
            return(true);
        }
Exemplo n.º 9
0
        public bool Purchase(MsgInformationEx MsgDTO)
        {
            var pet              = PetRecord.Get(MsgDTO.FromQQ);
            var petLevel         = PetLevelSvc[pet.Level];
            var enduranceConsume = PetEnduranceRecord.Get(MsgDTO.FromQQ);

            var restoreEndurance = Math.Min(petLevel.Endurance / 2, enduranceConsume.ConsumeTotal);

            enduranceConsume.ConsumeTotal -= restoreEndurance;
            enduranceConsume.Update();

            MsgSender.PushMsg(MsgDTO, $"恭喜{pet.Name}恢复了 {restoreEndurance}点耐力!");
            return(true);
        }
Exemplo n.º 10
0
        // GET: PetRecords/Details/5
        public async Task <ActionResult> Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PetRecord petRecord = await db.Pets.FindAsync(id);

            if (petRecord == null)
            {
                return(HttpNotFound());
            }
            return(View(petRecord));
        }
Exemplo n.º 11
0
        // GET: PetRecords/Edit/5
        public async Task <ActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PetRecord petRecord = await db.Pets.FindAsync(id);

            if (petRecord == null)
            {
                return(HttpNotFound());
            }
            ViewBag.OwnerID = new SelectList(db.Profiles, "OwnerID", "UserName", petRecord.OwnerID);
            return(View(petRecord));
        }
Exemplo n.º 12
0
        public bool PetExpBonus(MsgInformationEx MsgDTO, object[] param)
        {
            var qqNum = (long)param[0];
            var exp   = (int)(long)param[1];

            var pet = PetRecord.Get(qqNum);

            MsgDTO.FromQQ = qqNum;
            var msg = pet.ExtGain(MsgDTO, exp);

            msg += "\r\n奖励已生效!";

            MsgSender.PushMsg(MsgDTO, msg);
            return(true);
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
        public bool Cook(MsgInformationEx MsgDTO, object[] param)
        {
            var dietName = param[0] as string;

            var Diet = CookingDietSvc[dietName];

            if (Diet == null)
            {
                MsgSender.PushMsg(MsgDTO, "未查找到相关菜肴名称!");
                return(false);
            }

            var pet = PetRecord.Get(MsgDTO.FromQQ);

            if (pet.Level < Diet.Level)
            {
                MsgSender.PushMsg(MsgDTO, $"{pet.Name}的等级太低,还不能烹饪该菜肴!({pet.Level}/{Diet.Level})");
                return(false);
            }

            var cookingRec = CookingRecord.Get(MsgDTO.FromQQ);

            if (cookingRec.LearndDietMenu.IsNullOrEmpty() || !cookingRec.LearndDietMenu.Contains(dietName))
            {
                MsgSender.PushMsg(MsgDTO, $"你尚未学会{dietName}的烹饪方法!(可使用【{Diet.ExchangeHonor}】兑换,详情请参见【帮助 兑换菜谱】)");
                return(false);
            }

            var falvoringNeedStr = string.Join(",", Diet.Flavorings.Select(f => $"{f.Key}({cookingRec.FlavoringDic.GetDicValueSafe(f.Key)}/{f.Value})"));

            if (!Diet.Flavorings.IsNullOrEmpty() && !cookingRec.CheckFlavorings(Diet.Flavorings))
            {
                MsgSender.PushMsg(MsgDTO, $"调味料不足!({falvoringNeedStr})");
                return(false);
            }

            var itemColle       = ItemCollectionRecord.Get(MsgDTO.FromQQ);
            var allitems        = itemColle.AllItemsDic;
            var materialNeedStr = string.Join(",", Diet.Materials.Select(m => $"{m.Key}({allitems.GetDicValueSafe(m.Key)}/{m.Value})"));

            if (!Diet.Materials.IsNullOrEmpty() && !itemColle.CheckItem(Diet.Materials))
            {
                MsgSender.PushMsg(MsgDTO, $"材料不足!({materialNeedStr})");
                return(false);
            }

            var msg = $"烹饪 {dietName} 将需要消耗\r\n{falvoringNeedStr}\r\n{materialNeedStr}\r\n是否确认?";

            if (!WaiterSvc.WaitForConfirm(MsgDTO, msg))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            cookingRec.FlavoringConsume(Diet.Flavorings);
            itemColle.ItemConsume(Diet.Materials);

            cookingRec.AddDiet(dietName);

            cookingRec.Update();
            itemColle.Update();

            MsgSender.PushMsg(MsgDTO, "烹饪成功!");
            return(true);
        }
Exemplo n.º 15
0
        public bool OpenFinalTreasure(MsgInformationEx MsgDTO, object[] param)
        {
            var record = SegmentRecord.Get(MsgDTO.FromQQ);

            if (!record.CanOpenFinalTreasure)
            {
                MsgSender.PushMsg(MsgDTO, "很遗憾,你还不能开启终极宝藏,继续努力吧!(开启过所有其他宝藏才能开启终极宝藏!)", true);
                return(false);
            }

            var options     = new[] { "获取500金币", "随机获取商店售卖的一件商品*5", "宠物获取50点经验值", "捞瓶子机会*5(仅当日有效)" };
            var selectedIdx = WaiterSvc.WaitForOptions(MsgDTO.FromGroup, MsgDTO.FromQQ, "请选择你要开启的宝藏:", options, MsgDTO.BindAi);

            if (selectedIdx < 0)
            {
                MsgSender.PushMsg(MsgDTO, "你已经放弃了思考!");
                return(false);
            }

            switch (selectedIdx)
            {
            case 0:
            {
                var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);
                osPerson.Golds += 500;
                osPerson.Update();

                MsgSender.PushMsg(MsgDTO, $"恭喜你获得了 {500.CurencyFormat()}!");
                break;
            }

            case 1:
            {
                var items    = TransHelper.GetDailySellItems();
                var randItem = items.RandElement();

                MsgSender.PushMsg(MsgDTO, $"恭喜你获得了 {randItem.Name}*5!");

                var collo = ItemCollectionRecord.Get(MsgDTO.FromQQ);
                var msg   = collo.ItemIncome(randItem.Name, 5);
                if (!string.IsNullOrEmpty(msg))
                {
                    MsgSender.PushMsg(MsgDTO, msg);
                }
                break;
            }

            case 2:
            {
                var pet = PetRecord.Get(MsgDTO.FromQQ);
                var msg = pet.ExtGain(MsgDTO, 50);
                MsgSender.PushMsg(MsgDTO, msg);
                break;
            }

            case 3:
            {
                var dailyLimit = DailyLimitRecord.Get(MsgDTO.FromQQ, "DriftBottleAI_FishingBottle");
                dailyLimit.Decache(5);
                dailyLimit.Update();

                MsgSender.PushMsg(MsgDTO, "恭喜你获取 捞瓶子机会*5(仅当日有效) !");
                break;
            }
            }

            record.FinalTreasureCount++;
            record.Update();

            return(true);
        }
Exemplo n.º 16
0
        public bool AssertCalculate(MsgInformationEx MsgDTO, object[] param)
        {
            var osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);

            if (osPerson.Golds < 50)
            {
                MsgSender.PushMsg(MsgDTO, $"你的金币余额不足({osPerson.Golds.CurencyFormat()}/{50.CurencyFormat()})!");
                return(false);
            }

            if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, 50))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            osPerson.Golds -= 50;
            osPerson.Update();

            var resultDic = new Dictionary <string, int> {
                { "金币资产", osPerson.Golds }
            };

            var itemRecord = ItemCollectionRecord.Get(MsgDTO.FromQQ);

            if (!itemRecord.HonorCollections.IsNullOrEmpty())
            {
                var itemAssert = itemRecord.AssertToGold();

                resultDic.Add("物品资产", itemAssert);
            }

            if (!osPerson.GiftDic.IsNullOrEmpty())
            {
                var giftsMaterialDic = osPerson.GiftDic.SelectMany(p => GiftSvc[p.Key].MaterialDic);
                var giftAssert       = giftsMaterialDic.Sum(g => HonorSvc.FindItem(g.Key).Price *g.Value);
                resultDic.Add("礼物资产", giftAssert);
            }

            var pet = PetRecord.Get(MsgDTO.FromQQ);

            if (pet.Level > 0 || pet.Exp > 0)
            {
                var petAssert = PetLevelSvc.ExpToGolds(pet.Level, pet.Exp);
                resultDic.Add("宠物资产", petAssert);
            }

            var dietRec = CookingRecord.Get(MsgDTO.FromQQ);

            if (!dietRec.LearndDietMenu.IsNullOrEmpty() || !dietRec.CookedDietDic.IsNullOrEmpty() || !dietRec.FlavoringDic.IsNullOrEmpty())
            {
                var dietAssert = dietRec.LearndDietMenu.Sum(menu =>
                                                            HonorSvc.FindHonor(CookingDietSvc[menu].ExchangeHonor).Items.Sum(item => item.Price));
                dietAssert += dietRec.CookedDietDic.Sum(diet => CookingDietSvc[diet.Key].EstimatedPrice * diet.Value);
                dietAssert += dietRec.FlavoringDic.Sum(p => p.Value) * 20;
                resultDic.Add("烹饪资产", dietAssert);
            }

            var msg = "请查阅你的资产评估报告:\r\n" +
                      $"{string.Join("\r\n", resultDic.Select(rd => $"{rd.Key}:{rd.Value.CurencyFormat()}"))}" +
                      $"\r\n总资产:{resultDic.Sum(p => p.Value).CurencyFormat()}";

            MsgSender.PushMsg(MsgDTO, msg, true);
            return(true);
        }
Exemplo n.º 17
0
        public bool RuleDestruction(MsgInformationEx MsgDTO, object[] param)
        {
            var key   = param[0] as string;
            var value = param[1] as string;

            string msg;

            MsgSender.PushMsg(MsgDTO, "世界树规则析构引擎正在启动,请稍候...");
            Thread.Sleep(2000);

            switch (key)
            {
            case "GroupSettings":
            {
                if (!long.TryParse(value, out var groupNum))
                {
                    msg = $"规则引擎解析错误:{groupNum}";
                    break;
                }

                var record = GroupSettings.Get(groupNum);
                if (record == null)
                {
                    msg = $"未匹配到基元数据:{groupNum}";
                    break;
                }

                msg = JsonConvert.SerializeObject(record);
                break;
            }

            case "OSPerson":
            {
                if (!long.TryParse(value, out var personNum))
                {
                    msg = $"规则引擎解析错误:{personNum}";
                    break;
                }

                var osPerson = OSPerson.GetPerson(personNum);
                if (osPerson == null)
                {
                    msg = $"未匹配到基元数据:{personNum}";
                    break;
                }

                msg = JsonConvert.SerializeObject(osPerson);
                break;
            }

            case "Pet":
            {
                if (!long.TryParse(value, out var personNum))
                {
                    msg = $"规则引擎解析错误:{personNum}";
                    break;
                }

                var pet = PetRecord.Get(personNum);
                msg = JsonConvert.SerializeObject(pet);
                break;
            }

            default:
            {
                msg = "未匹配到指定规则,请先查阅世界规则手册!";
                break;
            }
            }

            MsgSender.PushMsg(MsgDTO, msg);
            return(true);
        }