예제 #1
0
        public ActionResult QuickMissionSave()
        {
            InvokeResult result = new InvokeResult();

            string missionTemplateId = PageReq.GetForm("missionTemplateId");

            string        weixin      = PageReq.GetForm("weixin");
            string        missionType = PageReq.GetForm("missionType");
            string        type        = PageReq.GetForm("type");
            string        WorkPlanManageConnectionString = System.Web.Configuration.WebConfigurationManager.AppSettings["WorkPlanManageConnectionString"];
            DataOperation dataOp = new DataOperation(WorkPlanManageConnectionString, true);

            if (string.IsNullOrEmpty(missionTemplateId))
            {
                result.Status  = Status.Failed;
                result.Message = "输入参数有误请重试";
                return(Json(TypeConvert.InvokeResultToPageJson(result)));
            }
            var curMissionTemplate = dataOp.FindOneByQuery("MissionTemplate", Query.EQ("_id", ObjectId.Parse(missionTemplateId)));

            if (curMissionTemplate == null)
            {
                result.Status  = Status.Failed;
                result.Message = "输入参数有误请重试";
                return(Json(TypeConvert.InvokeResultToPageJson(result)));
            }
            var           query          = Query.Or(Query.EQ("missionTemplateId", missionTemplateId), Query.EQ("name", curMissionTemplate.Text("name")));
            var           curUserMission = dataOp.FindOneByQuery("MissionLibrary", Query.And(Query.EQ("weixin", weixin), query));
            LifeDayHelper helper         = new LifeDayHelper(dataOp);

            if (curUserMission == null)//添加
            {
                result = helper.InitialMissionTemplate(weixin, missionTemplateId);
            }
            else //删除
            {
                result = dataOp.Delete("MissionLibrary", Query.EQ("_id", ObjectId.Parse(curUserMission.Text("_id"))));
            }

            return(Json(TypeConvert.InvokeResultToPageJson(result)));
        }
예제 #2
0
        public ActionResult HellChallenge()
        {
            var           itemMessage     = new StringBuilder(); //物品获得信息
            var           rareItemMessage = new StringBuilder(); //稀有物品获得信息
            string        WorkPlanManageConnectionString = System.Web.Configuration.WebConfigurationManager.AppSettings["WorkPlanManageConnectionString"];
            DataOperation dataOp        = new DataOperation(WorkPlanManageConnectionString, true);
            var           lifeDayHelper = new LifeDayHelper(dataOp);
            var           isLevelUp     = false;
            //缓存
            List <BsonDocument> allEquipment = null;

            allEquipment = CacheHelper.GetCache("MissionItemList") as List <BsonDocument>;
            if (allEquipment == null)
            {
                allEquipment = dataOp.FindAll("Item").ToList();
                CacheHelper.SetCache("MissionItemList", allEquipment, null, DateTime.Now.AddMinutes(30));
            }


            var          weixin  = PageReq.GetForm("weixin");
            var          userId  = PageReq.GetForm("userId");
            InvokeResult result  = new InvokeResult();
            var          curUser = dataOp.FindAllByQuery("SysUser", Query.EQ("weixin", weixin)).FirstOrDefault();

            if (curUser == null)
            {
                result.Message = "当前用户不存在,请刷新重试";
                return(Json(TypeConvert.InvokeResultToPageJson(result)));
            }

            var missionStorageDataList  = new List <StorageData>();
            var curUserPoint            = curUser.Int("point");
            var curUserExp              = curUser.Int("exp");
            var hellChallengeCount      = SysAppConfig.Mission_HellChallengeCount;
            var validHellChallengeCount = hellChallengeCount - curUser.Int("execHellChallengeCount");
            var storageDataList         = new List <StorageData>();

            if (validHellChallengeCount > 0)//可挑战
            {
                curUserPoint += SysAppConfig.Mission_HellChallengePoint;
                curUserExp   += lifeDayHelper.GetMissionCompleteExp(curUser, new BsonDocument().Add("missionType", "3"));
                //获取奖励
                #region 爆率物品更新
                var itemDropCount = SysAppConfig.Mission_HellItemDropCount;
                if (itemDropCount <= 0)
                {
                    itemDropCount = 1;
                }
                if (itemDropCount > 8)
                {
                    itemDropCount = 8;
                }
                var rareityRand  = new Random();   //品质随机
                var curUserLevel = curUser.Int("level");

                for (var index = 1; index <= itemDropCount; index++)
                {
                    var equipmentContent = lifeDayHelper.EquipmentDropQuality(curUser.Int("level"), rareityRand);    //独立计算降低出货
                    if (equipmentContent == null)
                    {
                        continue;
                    }
                    var color         = equipmentContent.color;
                    var rareItemClass = equipmentContent.rareDropItemClass;
                    var hitEquipment  = equipmentContent.equipmenItem;
                    if (hitEquipment == null)
                    {
                        continue;
                    }
                    if (string.IsNullOrEmpty(itemMessage.ToString()) && string.IsNullOrEmpty(rareItemMessage.ToString()))
                    {
                        itemMessage.Append("恭喜获得");
                    }
                    if (!string.IsNullOrEmpty(rareItemClass))
                    {
                        //稀有物品获得
                        rareItemMessage.AppendFormat("<span class='{0}'><a href='javascript:;' style='color:{1}'>{2}</a></span>,", rareItemClass, color, hitEquipment.Text("name"));
                    }
                    else
                    {
                        itemMessage.AppendFormat("<a href='javascript:;' style='color:{0}'>{1}</a>,", color, hitEquipment.Text("name"));
                    }

                    var insertItem = new BsonDocument();
                    insertItem.Add("amount", "1");
                    insertItem.Add("name", hitEquipment.Text("name"));
                    insertItem.Add("itemId", hitEquipment.Text("_id"));
                    insertItem.Add("rarity", hitEquipment.Text("rarity"));
                    insertItem.Add("weixin", curUser.Text("weixin"));
                    storageDataList.Add(new StorageData()
                    {
                        Document = insertItem,
                        Name     = "PersonItem",
                        Type     = StorageType.Insert
                    });
                }
                #endregion

                #region 更新个人Exp值
                if (curUser.Int("exp") != curUserExp)
                {
                    //curUserExp = lifeDayHelper.GetLevleAddionalExp(curUser.Int("level"), curUserExp);

                    if (curUserExp > curUser.Int("exp"))
                    {
                        itemMessage.AppendFormat(" +{0}EXP", curUserExp - curUser.Int("exp"));
                    }
                    var updateBoson = new BsonDocument();

                    var nextUserLevel = ++curUserLevel;
                    var nexLevel      = dataOp.FindOneByKeyVal("PersonLevel", "level", (nextUserLevel).ToString());
                    if (nexLevel != null)
                    {
                        var nexLevelExp = nexLevel.Int("levelExp");
                        while (curUserExp >= nexLevelExp)    //升级
                        {
                            if (!isLevelUp)
                            {
                                isLevelUp = true;
                            }
                            updateBoson.Set("level", (nextUserLevel).ToString());
                            curUserExp -= nexLevelExp;    //减少经验
                            nextUserLevel++;
                            nexLevel = dataOp.FindOneByKeyVal("PersonLevel", "level", (nextUserLevel).ToString());
                            if (nexLevel != null)
                            {
                                nexLevelExp = nexLevel.Int("levelExp");
                            }
                            else                          //无法继续升级
                            {
                                curUserExp = nexLevelExp; //最高级exp
                                break;
                            }
                        }
                    }
                    if (nextUserLevel < 0)
                    {
                        nextUserLevel = 0;
                    }
                    updateBoson.Add("exp", curUserExp.ToString());
                    missionStorageDataList.Add(new StorageData()
                    {
                        Document = updateBoson,
                        Name     = "SysUser",
                        Query    = Query.EQ("userId", curUser.Text("userId")),
                        Type     = StorageType.Update
                    });
                }


                #endregion

                #region 更新point值
                if (curUser.Int("point") != curUserPoint)
                {
                    if (curUserPoint > curUser.Int("point"))
                    {
                        itemMessage.AppendFormat(",+{0}P", curUserPoint - curUser.Int("point"));
                    }
                    missionStorageDataList.Add(new StorageData()
                    {
                        Document = new BsonDocument().Add("point", curUserPoint),
                        Name     = "SysUser",
                        Query    = Query.EQ("userId", curUser.Text("userId")),
                        Type     = StorageType.Update
                    });
                }
                #endregion

                #region 更新helllCount
                missionStorageDataList.Add(new StorageData()
                {
                    Document = new BsonDocument().Add("execHellChallengeCount", curUser.Int("execHellChallengeCount") + 1),
                    Name     = "SysUser",
                    Query    = Query.EQ("userId", curUser.Text("userId")),
                    Type     = StorageType.Update
                });
                #endregion
            }

            missionStorageDataList.AddRange(storageDataList);


            if (missionStorageDataList.Count() > 0)
            {
                result = dataOp.BatchSaveStorageData(missionStorageDataList);
            }
            else
            {
                result.Status  = Status.Failed;
                result.Message = "无法挑战!请重试";
            }
            if (!string.IsNullOrEmpty(itemMessage.ToString()) && result.Status == Status.Successful)
            {
                result.Message = string.Format("<div>{0}喵~</div>", itemMessage.ToString());
            }
            if (!string.IsNullOrEmpty(rareItemMessage.ToString()))
            {
                //result.Message +=rareItemMessage.ToString().TrimEnd(',');
                result.FileInfo = rareItemMessage.ToString().TrimEnd(','); //是否爆特殊物品
            }

            if (isLevelUp && result.BsonInfo != null)
            {
                result.BsonInfo.Set("isLevelUp", isLevelUp.ToString());
            }
            // result.BsonInfo.Set("isLevelUp","true");
            return(Json(TypeConvert.InvokeResultToPageJson(result)));
        }
예제 #3
0
        public ActionResult PersonItemSell()
        {
            //var addionMessage = new StringBuilder();//加成信息
            var           itemMessage     = new StringBuilder(); //物品获得信息
            var           rareItemMessage = new StringBuilder(); //稀有物品获得信息
            string        WorkPlanManageConnectionString = System.Web.Configuration.WebConfigurationManager.AppSettings["WorkPlanManageConnectionString"];
            DataOperation dataOp        = new DataOperation(WorkPlanManageConnectionString, true);
            var           lifeDayHelper = new LifeDayHelper(dataOp);

            //缓存
            List <BsonDocument> allEquipment = null;

            allEquipment = CacheHelper.GetCache("MissionItemList") as List <BsonDocument>;
            if (allEquipment == null)
            {
                allEquipment = dataOp.FindAll("Item").ToList();
                CacheHelper.SetCache("MissionItemList", allEquipment, null, DateTime.Now.AddMinutes(30));
            }

            var missionIdList = PageReq.GetFormList("personItemIds"); //_id
            var weixin        = PageReq.GetForm("weixin");

            InvokeResult result  = new InvokeResult();
            var          curUser = dataOp.FindAllByQuery("SysUser", Query.EQ("weixin", weixin)).FirstOrDefault();

            if (curUser == null)
            {
                result.Message = "当前用户不存在,请刷新重试";
                return(Json(TypeConvert.InvokeResultToPageJson(result)));
            }

            var curUserItemList        = dataOp.FindAllByQuery("PersonItem", Query.And(Query.EQ("weixin", weixin))).Where(c => missionIdList.Contains(c.Text("_id"))).ToList();//人员拥有物品
            var missionStorageDataList = new List <StorageData>();

            var hitItemEquipmentList = allEquipment.Where(c => curUserItemList.Select(d => d.Text("itemId")).Contains(c.Text("_id"))).ToList();

            if (hitItemEquipmentList.Count() > 0)
            {
                var changePoint = 0;
                //hitItemEquipmentList.Select(c => c.Int("price")).Sum(c => c);
                foreach (var hitItem in hitItemEquipmentList)
                {
                    changePoint += lifeDayHelper.GetEquipmentSellPrice(hitItem);
                }
                if (changePoint > 0)
                {
                    var curUserPoint = curUser.Int("point") + changePoint;
                    var updateBoson  = new BsonDocument();
                    updateBoson.Add("point", curUserPoint.ToString());
                    missionStorageDataList.Add(new StorageData()
                    {
                        Document = updateBoson,
                        Name     = "SysUser",
                        Query    = Query.EQ("userId", curUser.Text("userId")),
                        Type     = StorageType.Update
                    });
                }
                var delPersonItemList = from c in hitItemEquipmentList
                                        select new StorageData()
                {
                    Name  = "PersonItem",
                    Query = Query.EQ("itemId", c.Text("_id")),
                    Type  = StorageType.Delete
                };
                missionStorageDataList.AddRange(delPersonItemList);
            }
            if (missionStorageDataList.Count() > 0)
            {
                result = dataOp.BatchSaveStorageData(missionStorageDataList);
            }

            return(Json(TypeConvert.InvokeResultToPageJson(result)));
        }
예제 #4
0
        public ActionResult MissionComplete()
        {
            var addition     = SysAppConfig.Mission_PointAddition;    //10%加成
            var maxAddition  = SysAppConfig.Mission_MaxPointAddition; //最高加成70&
            var itemDropSeed = SysAppConfig.Mission_ItemDropSeed;     //6000000
            var isLevelUp    = false;
            //var addionMessage = new StringBuilder();//加成信息
            var           itemMessage     = new StringBuilder(); //物品获得信息
            var           rareItemMessage = new StringBuilder(); //稀有物品获得信息
            string        WorkPlanManageConnectionString = System.Web.Configuration.WebConfigurationManager.AppSettings["WorkPlanManageConnectionString"];
            DataOperation dataOp        = new DataOperation(WorkPlanManageConnectionString, true);
            var           lifeDayHelper = new LifeDayHelper(dataOp);

            //缓存
            List <BsonDocument> allEquipment = null;

            allEquipment = CacheHelper.GetCache("MissionItemList") as List <BsonDocument>;
            if (allEquipment == null)
            {
                allEquipment = dataOp.FindAll("Item").ToList();
                CacheHelper.SetCache("MissionItemList", allEquipment, null, DateTime.Now.AddMinutes(30));
            }

            var          missionIdList = PageReq.GetFormList("missionIds");//_id
            var          weixin        = PageReq.GetForm("weixin");
            var          userId        = PageReq.GetForm("userId");
            InvokeResult result        = new InvokeResult();
            var          curUser       = dataOp.FindAllByQuery("SysUser", Query.EQ("weixin", weixin)).FirstOrDefault();

            if (curUser == null)
            {
                result.Message = "当前用户不存在,请刷新重试";
                return(Json(TypeConvert.InvokeResultToPageJson(result)));
            }
            var missionBsonValueList = TypeConvert.ToObjectIdList(missionIdList.ToList());

            var allMissionList = dataOp.FindAllByQuery("MissionLibrary", Query.In("_id", missionBsonValueList)).ToList();

            var allMissionRewardList      = dataOp.FindAllByQuery("MissionReward", Query.In("missionId", missionBsonValueList)).ToList();
            var allMissionRequirementList = dataOp.FindAllByQuery("MissionRequirement", Query.In("missionId", missionBsonValueList)).ToList();
            var curUserItemList           = dataOp.FindAllByQuery("PersonItem", Query.EQ("weixin", weixin)).ToList();//人员拥有物品
            var missionStorageDataList    = new List <StorageData>();
            var curUserPoint = curUser.Int("point");
            var curUserExp   = curUser.Int("exp");

            foreach (var mission in allMissionList)
            {
                var storageDataList = new List <StorageData>();
                if ((curUserPoint + mission.Int("completeRewardPoint")) <= 0)//点数不够,无法完成任务
                {
                    continue;
                }

                var canCompleteMission = true;
                ///获取完成每个任务需要的物品
                var hitMissionRequirement = allMissionRequirementList.Where(c => c.Text("missionId") == mission.Text("_id")).ToList();
                if (hitMissionRequirement.Count() > 0)
                {
                    foreach (var requireItem in hitMissionRequirement)
                    {
                        var curUserItem = curUserItemList.Where(c => c.Text("itemId") == requireItem.Text("itemId")).FirstOrDefault();
                        if (curUserItem != null && curUserItem.Int("amount") >= requireItem.Int("amount"))
                        {
                            var actAmount = curUserItem.Int("amount") - requireItem.Int("amount");
                            //更新持有物品
                            storageDataList.Add(new StorageData()
                            {
                                Document = new BsonDocument().Add("amount", actAmount.ToString()),
                                Name     = "PersonItem",
                                Query    = Query.EQ("_id", ObjectId.Parse(curUserItem.Text("_id"))),
                                Type     = StorageType.Update
                            });
                        }
                        else
                        {
                            canCompleteMission = false;
                            break;
                        }
                    }
                }

                if (canCompleteMission)//任务可完成
                {
                    //获取奖励
                    var missionReward = allMissionRewardList.Where(c => c.Text("missionId") == mission.Text("_id")).ToList();

                    #region 任务状态更新
                    //系统任务不更新状态
                    if (mission.Int("type") != (int)MissionCategory.SystemhMission)
                    {
                        var curComboHit      = mission.Int("comboHit") + 1;
                        var curCompleteCount = mission.Int("curCompleteCount") + 1;
                        storageDataList.Add(new StorageData()
                        {
                            Document = new BsonDocument().Add("status", "1").Add("comboHit", curComboHit.ToString()).Add("curCompleteCount", curCompleteCount.ToString()),
                            Name     = "MissionLibrary",
                            Query    = Query.EQ("missionId", mission.Text("missionId")),
                            Type     = StorageType.Update
                        });
                    }
                    #endregion

                    #region 个人物品更新
                    foreach (var rewardItem in missionReward)
                    {
                        var curUserItem = curUserItemList.Where(c => c.Text("itemId") == rewardItem.Text("itemId")).FirstOrDefault();
                        if (curUserItem != null)
                        {
                            var newAmount = curUserItem.Int("amount") + rewardItem.Int("amount");
                            storageDataList.Add(new StorageData()
                            {
                                Document = new BsonDocument().Add("amount", newAmount.ToString()),
                                Name     = "PersonItem",
                                Query    = Query.EQ("itemId", curUserItem.Text("itemId")),
                                Type     = StorageType.Update
                            });
                        }
                        else
                        {
                            var insertItem = new BsonDocument();
                            insertItem.Add("amount", rewardItem.Text("amount"));
                            insertItem.Add("name", rewardItem.Text("name"));
                            insertItem.Add("itemId", rewardItem.Text("itemId"));
                            insertItem.Add("weixin", curUser.Text("weixin"));
                            storageDataList.Add(new StorageData()
                            {
                                Document = insertItem,
                                Name     = "PersonItem",
                                Type     = StorageType.Insert
                            });
                        }
                    }
                    #endregion

                    #region 更新个人point值,每次连击增加10%
                    //var curMissPoint = mission.Int("completeRewardPoint");
                    var curMissPoint = lifeDayHelper.GetMissionCompointPoint(mission);
                    curUserPoint += curMissPoint;
                    #endregion

                    #region 更新个人point值,每次连击增加10%
                    //var curMissPoint = mission.Int("completeRewardPoint");
                    var curMissExp = lifeDayHelper.GetMissionCompleteExp(curUser, mission);
                    curUserExp += curMissExp;
                    #endregion

                    #region 更新当日个人成就
                    storageDataList.Add(new StorageData()
                    {
                        Document = new BsonDocument().Add("name", mission.Text("name"))
                                   .Add("remark", mission.Text("remark")).Add("completeRewardPoint", curMissPoint)
                                   .Add("completeDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm"))
                                   .Add("weixin", weixin).Add("missionId", mission.Text("_id"))
                                   .Add("missionType", mission.Text("missionType"))
                                   .Add("type", mission.Text("type")),
                        Name = "PersonAchievement",
                        Type = StorageType.Insert
                    });
                    #endregion

                    #region 爆率物品更新
                    var itemDropCount = mission.Int("itemDropCount");
                    var rareityRand   = new Random();//品质随机
                    var curUserLevel  = curUser.Int("level");


                    for (var index = 1; index <= itemDropCount; index++)
                    {
                        // 普通任务可以获取更高级的物品
                        var equipmentContent = lifeDayHelper.EquipmentDropQuality(curUser.Int("level") + 10, rareityRand);
                        if (equipmentContent == null)
                        {
                            continue;
                        }
                        var color         = equipmentContent.color;
                        var rareItemClass = equipmentContent.rareDropItemClass;
                        var hitEquipment  = equipmentContent.equipmenItem;
                        if (hitEquipment == null)
                        {
                            continue;
                        }
                        if (string.IsNullOrEmpty(itemMessage.ToString()) && string.IsNullOrEmpty(rareItemMessage.ToString()))
                        {
                            itemMessage.Append("恭喜获得");
                        }
                        if (!string.IsNullOrEmpty(rareItemClass))
                        {
                            //稀有物品获得
                            rareItemMessage.AppendFormat("<span class='{0}'><a href='javascript:;' style='color:{1}'>{2}</a></span>,", rareItemClass, color, hitEquipment.Text("name"));
                        }
                        else
                        {
                            itemMessage.AppendFormat("<a href='javascript:;' style='color:{0}'>{1}</a>,", color, hitEquipment.Text("name"));
                        }

                        var insertItem = new BsonDocument();
                        insertItem.Add("amount", "1");
                        insertItem.Add("name", hitEquipment.Text("name"));
                        insertItem.Add("itemId", hitEquipment.Text("_id"));
                        insertItem.Add("rarity", hitEquipment.Text("rarity"));
                        insertItem.Add("weixin", curUser.Text("weixin"));
                        storageDataList.Add(new StorageData()
                        {
                            Document = insertItem,
                            Name     = "PersonItem",
                            Type     = StorageType.Insert
                        });
                    }


                    #endregion
                }

                missionStorageDataList.AddRange(storageDataList);
            }
            #region 更新个人Exp值
            if (curUser.Int("exp") != curUserExp)
            {
                if (curUserExp > curUser.Int("exp"))
                {
                    itemMessage.AppendFormat(" +{0}EXP", curUserExp - curUser.Int("exp"));
                }
                var updateBoson   = new BsonDocument();
                var curUserLevel  = curUser.Int("level");
                var nextUserLevel = ++curUserLevel;
                var nexLevel      = dataOp.FindOneByKeyVal("PersonLevel", "level", (nextUserLevel).ToString());
                if (nexLevel != null)
                {
                    var nexLevelExp = nexLevel.Int("levelExp");
                    while (curUserExp >= nexLevelExp)//升级
                    {
                        if (!isLevelUp)
                        {
                            isLevelUp = true;
                        }
                        updateBoson.Set("level", (nextUserLevel).ToString());
                        curUserExp -= nexLevelExp;//减少经验
                        nextUserLevel++;
                        nexLevel = dataOp.FindOneByKeyVal("PersonLevel", "level", (nextUserLevel).ToString());
                        if (nexLevel != null)
                        {
                            nexLevelExp = nexLevel.Int("levelExp");
                        }
                        else//无法继续升级
                        {
                            curUserExp = nexLevelExp;//最高级exp
                            break;
                        }
                    }
                }
                if (nextUserLevel < 0)
                {
                    nextUserLevel = 0;
                }
                updateBoson.Add("exp", curUserExp.ToString());
                missionStorageDataList.Add(new StorageData()
                {
                    Document = updateBoson,
                    Name     = "SysUser",
                    Query    = Query.EQ("userId", curUser.Text("userId")),
                    Type     = StorageType.Update
                });
            }


            #endregion

            #region 更新point值
            if (curUser.Int("point") != curUserPoint)
            {
                if (curUserPoint > curUser.Int("point"))
                {
                    itemMessage.AppendFormat(",+{0}P", curUserPoint - curUser.Int("point"));
                }
                missionStorageDataList.Add(new StorageData()
                {
                    Document = new BsonDocument().Add("point", curUserPoint),
                    Name     = "SysUser",
                    Query    = Query.EQ("userId", curUser.Text("userId")),
                    Type     = StorageType.Update
                });
            }
            #endregion
            if (missionStorageDataList.Count() > 0)
            {
                result = dataOp.BatchSaveStorageData(missionStorageDataList);
            }
            else
            {
                result.Status  = Status.Failed;
                result.Message = "无法完成任务!请重试";
            }
            if (!string.IsNullOrEmpty(itemMessage.ToString()) && result.Status == Status.Successful)
            {
                result.Message = string.Format("<div>{0}喵~</div>", itemMessage.ToString());
            }
            if (!string.IsNullOrEmpty(rareItemMessage.ToString()))
            {
                //result.Message +=rareItemMessage.ToString().TrimEnd(',');
                result.FileInfo = rareItemMessage.ToString().TrimEnd(','); //是否爆特殊物品
            }
            if (isLevelUp && result.BsonInfo != null)
            {
                result.BsonInfo.Set("isLevelUp", isLevelUp.ToString());
            }

            return(Json(TypeConvert.InvokeResultToPageJson(result)));
        }