public bool processCmd(Logic.GameClient client, string[] cmdParams)
        {
            int    nID     = (int)TCPGameServerCmds.CMD_SPR_GET_WANMOTA_DETAIL;
            int    nRoleID = Global.SafeConvertToInt32(cmdParams[0]);
            string strCmd  = "";

            WanMotaInfo data = WanMotaCopySceneManager.GetWanMoTaDetail(client, false);

            if (null == data)
            {
                strCmd = string.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}", -1, nRoleID, 0, 0, 0, 0, 0);
                client.sendCmd(nID, strCmd);
                return(true);
            }
            else
            {
                strCmd = string.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}", 0, nRoleID,
                                       data.nPassLayerCount,
                                       data.nTopPassLayerCount,
                                       SweepWanMotaManager.GetSweepCount(client),
                                       data.nSweepLayer,
                                       WanMotaCopySceneManager.WanmotaIsSweeping(client));

                if (WanMoTaTopLayer < data.nTopPassLayerCount)
                {
                    WanMoTaTopLayer = data.nTopPassLayerCount;
                }

                client.sendCmd(nID, strCmd);
                return(true);
            }
        }
Пример #2
0
        public bool processCmd(GameClient client, string[] cmdParams)
        {
            int         nID     = 618;
            int         nRoleID = Global.SafeConvertToInt32(cmdParams[0]);
            WanMotaInfo data    = WanMotaCopySceneManager.GetWanMoTaDetail(client, false);
            bool        result;

            if (null == data)
            {
                string strCmd = string.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}", new object[]
                {
                    -1,
                    nRoleID,
                    0,
                    0,
                    0,
                    0,
                    0
                });
                client.sendCmd(nID, strCmd, false);
                result = true;
            }
            else
            {
                if (data.nPassLayerCount != client.ClientData.WanMoTaNextLayerOrder)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("角色roleid={0} 万魔塔层数不一致 nPassLayerCount={1}, WanMoTaNextLayerOrder={2}", client.ClientData.RoleID, data.nPassLayerCount, client.ClientData.WanMoTaNextLayerOrder), null, true);
                    client.ClientData.WanMoTaNextLayerOrder = data.nPassLayerCount;
                    GameManager.ClientMgr.SaveWanMoTaPassLayerValue(client, data.nPassLayerCount, true);
                }
                string strCmd = string.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}", new object[]
                {
                    0,
                    nRoleID,
                    data.nPassLayerCount,
                    data.nTopPassLayerCount,
                    SweepWanMotaManager.GetSweepCount(client),
                    data.nSweepLayer,
                    WanMotaCopySceneManager.WanmotaIsSweeping(client)
                });
                SingletonTemplate <WanMoTaTopLayerManager> .Instance().CheckNeedUpdate(data.nTopPassLayerCount);

                client.sendCmd(nID, strCmd, false);
                result = true;
            }
            return(result);
        }
        public bool processCmd(Logic.GameClient client, string[] cmdParams)
        {
            int    nID     = (int)TCPGameServerCmds.CMD_SPR_GET_WANMOTA_DETAIL;
            int    nRoleID = Global.SafeConvertToInt32(cmdParams[0]);
            string strCmd  = "";

            WanMotaInfo data = WanMotaCopySceneManager.GetWanMoTaDetail(client, false);

            if (null == data)
            {
                strCmd = string.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}", -1, nRoleID, 0, 0, 0, 0, 0);
                client.sendCmd(nID, strCmd);
                return(true);
            }
            else
            {
                if (data.nPassLayerCount != client.ClientData.WanMoTaNextLayerOrder)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("角色roleid={0} 万魔塔层数不一致 nPassLayerCount={1}, WanMoTaNextLayerOrder={2}", client.ClientData.RoleID, data.nPassLayerCount, client.ClientData.WanMoTaNextLayerOrder));
                    client.ClientData.WanMoTaNextLayerOrder = data.nPassLayerCount;
                    //WanMoTaDBCommandManager.LayerChangeDBCommand(client, data.nPassLayerCount);
                    GameManager.ClientMgr.SaveWanMoTaPassLayerValue(client, data.nPassLayerCount, true);
                }

                strCmd = string.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}", 0, nRoleID,
                                       data.nPassLayerCount,
                                       data.nTopPassLayerCount,
                                       SweepWanMotaManager.GetSweepCount(client),
                                       data.nSweepLayer,
                                       WanMotaCopySceneManager.WanmotaIsSweeping(client));

                // modify by chenjingui. 20150717,解决多线程操作问题
                // 其实应该在GameServer启动的时候,加载一次万魔塔最高通关,暂时先按照原有方式
                WanMoTaTopLayerManager.Instance().CheckNeedUpdate(data.nTopPassLayerCount);

                /*
                 * if (WanMoTaTopLayer < data.nTopPassLayerCount)
                 * {
                 *  WanMoTaTopLayer = data.nTopPassLayerCount;
                 * }*/

                client.sendCmd(nID, strCmd);
                return(true);
            }
        }
Пример #4
0
        public bool processCmd(GameClient client, string[] cmdParams)
        {
            int  nID              = 616;
            int  nRoleID          = Global.SafeConvertToInt32(cmdParams[0]);
            int  nSweepBeginOrder = Global.SafeConvertToInt32(cmdParams[1]);
            bool result;

            if (client.ClientData.WanMoTaProp.nPassLayerCount < SweepWanMotaManager.nSweepReqMinLayerOrder)
            {
                string strCmd = string.Format("{0}:{1}", -2, nRoleID);
                client.sendCmd(nID, strCmd, false);
                result = true;
            }
            else if (0 == client.ClientData.WanMoTaProp.nSweepLayer)
            {
                string strCmd = string.Format("{0}:{1}", -4, nRoleID);
                client.sendCmd(nID, strCmd, false);
                result = true;
            }
            else
            {
                string strCmd;
                if (client.ClientData.WanMoTaProp.nSweepLayer > 0)
                {
                    SweepWanMotaManager.SweepContinue(client);
                }
                else
                {
                    if (SweepWanMotaManager.GetSweepCount(client) >= SweepWanMotaManager.nWanMoTaMaxSweepNum)
                    {
                        strCmd = string.Format("{0}:{1}", -1, nRoleID);
                        client.sendCmd(nID, strCmd, false);
                        return(true);
                    }
                    SweepWanMotaManager.SweepBegin(client);
                }
                strCmd = string.Format("{0}:{1}", 0, nRoleID);
                client.sendCmd(nID, strCmd, false);
                result = true;
            }
            return(result);
        }
Пример #5
0
        /// <summary>
        /// 获得剩余次数
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        private static int GetLeftCountByType(GameClient client, int type, int copyId)
        {
            int leftnum = 0;

            switch ((CandoType)type)
            {
            case CandoType.DailyTask:
            {
                DailyTaskData dailyTaskData = Global.FindDailyTaskDataByTaskClass(client, 8);
                if (null == dailyTaskData)
                {
                    return(Global.MaxDailyTaskNumForMU);
                }
                int maxnum = Global.GetMaxDailyTaskNum(client, 8, dailyTaskData);


                //获取最大日常任务次数

                leftnum = maxnum - dailyTaskData.RecNum;
            }
            break;

            case CandoType.StoryCopy:
            case CandoType.GoldCopy:
            case CandoType.GroupCopy:
            case CandoType.EXPCopy:
            {
                SystemXmlItem systemFuBenItem = null;
                if (!GameManager.systemFuBenMgr.SystemXmlItemDict.TryGetValue(copyId, out systemFuBenItem))
                {
                    return(-1);
                }
                int total = systemFuBenItem.GetIntValue("EnterNumber");
                if (type == (int)CandoType.StoryCopy || type == (int)CandoType.GroupCopy)
                {
                    total = systemFuBenItem.GetIntValue("FinishNumber");
                }


                if (type == (int)CandoType.GoldCopy || type == (int)CandoType.EXPCopy)
                {
                    int[] nAddNum = GameManager.systemParamsList.GetParamValueIntArrayByName("VIPJinBiFuBenNum");
                    if (type == (int)CandoType.EXPCopy)
                    {
                        nAddNum = GameManager.systemParamsList.GetParamValueIntArrayByName("VIPJinYanFuBenNum");
                    }
                    if (client.ClientData.VipLevel > 0 && client.ClientData.VipLevel <= (int)VIPEumValue.VIPENUMVALUE_MAXLEVEL && nAddNum != null && nAddNum.Length > 0 && nAddNum.Length <= 13)
                    {
                        total = total + nAddNum[client.ClientData.VipLevel];
                    }
                }

                FuBenData tmpfubdata = Global.GetFuBenData(client, copyId);
                if (null != tmpfubdata)
                {
                    leftnum = total - tmpfubdata.EnterNum;
                }
                else
                {
                    return(total);
                }
            }
            break;

            case CandoType.DemonSquare:
            {
                int nMapID = Global.GetDaimonSquareCopySceneIDForRole(client);
                DaimonSquareDataInfo bcDataTmp = null;

                Data.DaimonSquareDataInfoList.TryGetValue(nMapID, out bcDataTmp);

                int nDate  = DateTime.Now.DayOfYear;                       // 当前时间
                int nCount = Global.QueryDayActivityEnterCountToDB(client, client.ClientData.RoleID, nDate, (int)SpecialActivityTypes.DemoSque);
                if (nCount < 0)
                {
                    nCount = 0;
                }
                int nVipLev = client.ClientData.VipLevel;

                int   nNum  = 0;
                int[] nArry = null;
                nArry = GameManager.systemParamsList.GetParamValueIntArrayByName("VIPEnterDaimonSquareCountAddValue");

                if (nVipLev > 0 && nArry != null && nArry[nVipLev] > 0)
                {
                    nNum = nArry[nVipLev];
                }
                leftnum = bcDataTmp.MaxEnterNum + nNum - nCount;
            }
            break;

            case CandoType.AngelTemple:
            {
                DateTime now = DateTime.Now;

                string        nowTime        = DateTime.Now.ToString("HH:mm");
                List <string> timePointsList = GameManager.AngelTempleMgr.m_AngelTempleData.BeginTime;

                leftnum = 0;
                for (int i = 0; i < timePointsList.Count; i++)
                {
                    DateTime staticTime  = DateTime.Parse(timePointsList[i]);
                    DateTime perpareTime = staticTime.AddMinutes((double)(GameManager.AngelTempleMgr.m_AngelTempleData.PrepareTime / 60));

                    if (now <= perpareTime)
                    {
                        leftnum += 1;
                    }
                }
            }
            break;

            case CandoType.BloodCity:
            {
                int nMapID = Global.GetBloodCastleCopySceneIDForRole(client);
                BloodCastleDataInfo bcDataTmp = null;

                if (!Data.BloodCastleDataInfoList.TryGetValue(nMapID, out bcDataTmp))
                {
                    break;
                }

                int nDate = DateTime.Now.DayOfYear;                              // 当前时间
                int nType = (int)SpecialActivityTypes.BloodCastle;               // 血色堡垒

                int nCount = Global.QueryDayActivityEnterCountToDB(client, client.ClientData.RoleID, nDate, nType);
                if (nCount < 0)
                {
                    nCount = 0;
                }
                // VIP检测

                int nVipLev = client.ClientData.VipLevel;

                int   nNum  = 0;
                int[] nArry = null;
                nArry = GameManager.systemParamsList.GetParamValueIntArrayByName("VIPEnterBloodCastleCountAddValue");

                if (nVipLev > 0 && nArry != null && nArry[nVipLev] > 0)
                {
                    nNum = nArry[nVipLev];
                }
                leftnum = bcDataTmp.MaxEnterNum + nNum - nCount;
            }
            break;

            case CandoType.Arena:
            {
                leftnum = JingJiChangManager.getInstance().GetLeftEnterCount(client);
            }
            break;

            case CandoType.OldBattlefield:
            {
                //古墓 古战场  剩余时间
                BufferData bufferData = Global.GetBufferDataByID(client, (int)BufferItemTypes.GuMuTimeLimit);
                leftnum = (int)(bufferData.BufferVal - bufferData.BufferSecs);
            }
            break;

            case CandoType.PartWar:
            {
                leftnum = GameManager.BattleMgr.LeftEnterCount();
            }
            break;

            case CandoType.PKKing:
            {
                leftnum = GameManager.ArenaBattleMgr.LeftEnterCount();
            }
            break;

            case CandoType.WanmoTower:
            {
                leftnum = 1;
                if (SweepWanMotaManager.GetSweepCount(client) >= SweepWanMotaManager.nWanMoTaMaxSweepNum)
                {
                    leftnum = 0;
                }
            }
            break;

            case CandoType.TaofaTaskCanDo:
            {
                DailyTaskData dailyTaskData = Global.FindDailyTaskDataByTaskClass(client, (int)TaskClasses.TaofaTask);
                if (null == dailyTaskData)
                {
                    return(Global.MaxTaofaTaskNumForMU);
                }
                int maxnum = Global.GetMaxDailyTaskNum(client, (int)TaskClasses.TaofaTask, dailyTaskData);

                //获取最大讨伐任务次数
                leftnum = maxnum - dailyTaskData.RecNum;
            }
            break;

            case CandoType.CrystalCollectCanDo:
            {
                //获取剩余水晶采集次数
                int temp = 0;
                CaiJiLogic.ReqCaiJiLastNum(client, 0, out temp);
                leftnum = temp;
            }
            break;
            }
            return(leftnum);
        }
Пример #6
0
        public bool processCmd(Logic.GameClient client, string[] cmdParams)
        {
            int nID              = (int)TCPGameServerCmds.CMD_SPR_SWEEP_WANMOTA;
            int nRoleID          = Global.SafeConvertToInt32(cmdParams[0]);
            int nSweepBeginOrder = Global.SafeConvertToInt32(cmdParams[1]);

            string strCmd = "";

            // 扫荡需要的最小挑战通关层数
            if (client.ClientData.WanMoTaProp.nPassLayerCount < SweepWanMotaManager.nSweepReqMinLayerOrder)
            {
                strCmd = string.Format("{0}:{1}", -2, nRoleID);
                client.sendCmd(nID, strCmd);
                return(true);
            }

            // 扫荡已完成,需要领取奖励
            if (0 == client.ClientData.WanMoTaProp.nSweepLayer)
            {
                strCmd = string.Format("{0}:{1}", -4, nRoleID);
                client.sendCmd(nID, strCmd);
                return(true);
            }

            //// 检测要扫荡的层是否与服务器一致
            //if (client.ClientData.WanMoTaProp.nSweepLayer != nSweepBeginOrder)
            //{
            //    strCmd = string.Format("{0}:{1}", -3, nRoleID);
            //    client.sendCmd(nID, strCmd);
            //    return true;
            //}

            //// 检测是否还有扫荡次数
            //if (client.ClientData.WanMoTaProp.nSweepLayer != nSweepBeginOrder)
            //{
            //    strCmd = string.Format("{0}:{1}", -3, nRoleID);
            //    client.sendCmd(nID, strCmd);
            //    return true;
            //}

            // 继续扫荡
            if (client.ClientData.WanMoTaProp.nSweepLayer > 0)
            {
                SweepWanMotaManager.SweepContinue(client);
            }
            // 重新开始扫荡
            else
            {
                // 扫荡次数是否用完
                if (SweepWanMotaManager.GetSweepCount(client) >= SweepWanMotaManager.nWanMoTaMaxSweepNum)
                {
                    strCmd = string.Format("{0}:{1}", -1, nRoleID);
                    client.sendCmd(nID, strCmd);
                    return(true);
                }

                SweepWanMotaManager.SweepBegin(client);
            }

            strCmd = string.Format("{0}:{1}", 0, nRoleID);
            client.sendCmd(nID, strCmd);
            return(true);
        }
Пример #7
0
        private static int GetLeftCountByType(GameClient client, int type, int copyId)
        {
            int leftnum = 0;

            switch (type)
            {
            case 1:
            {
                DailyTaskData dailyTaskData = Global.FindDailyTaskDataByTaskClass(client, 8);
                if (null == dailyTaskData)
                {
                    return(10);
                }
                int maxnum = Global.GetMaxDailyTaskNum(client, 8, dailyTaskData);
                leftnum = maxnum - dailyTaskData.RecNum;
                goto IL_4AC;
            }

            case 5:
            {
                int nMapID = Global.GetDaimonSquareCopySceneIDForRole(client);
                DaimonSquareDataInfo bcDataTmp = null;
                Data.DaimonSquareDataInfoList.TryGetValue(nMapID, out bcDataTmp);
                int nDate  = TimeUtil.NowDateTime().DayOfYear;
                int nCount = Global.QueryDayActivityEnterCountToDB(client, client.ClientData.RoleID, nDate, 2);
                if (nCount < 0)
                {
                    nCount = 0;
                }
                int   nVipLev = client.ClientData.VipLevel;
                int   nNum    = 0;
                int[] nArry   = GameManager.systemParamsList.GetParamValueIntArrayByName("VIPEnterDaimonSquareCountAddValue", ',');
                if (nVipLev > 0 && nArry != null && nArry[nVipLev] > 0)
                {
                    nNum = nArry[nVipLev];
                }
                leftnum = bcDataTmp.MaxEnterNum + nNum - nCount;
                goto IL_4AC;
            }

            case 6:
            {
                int nMapID = Global.GetBloodCastleCopySceneIDForRole(client);
                BloodCastleDataInfo bcDataTmp2 = null;
                if (!Data.BloodCastleDataInfoList.TryGetValue(nMapID, out bcDataTmp2))
                {
                    goto IL_4AC;
                }
                int nDate  = TimeUtil.NowDateTime().DayOfYear;
                int nType  = 1;
                int nCount = Global.QueryDayActivityEnterCountToDB(client, client.ClientData.RoleID, nDate, nType);
                if (nCount < 0)
                {
                    nCount = 0;
                }
                int   nVipLev = client.ClientData.VipLevel;
                int   nNum    = 0;
                int[] nArry   = GameManager.systemParamsList.GetParamValueIntArrayByName("VIPEnterBloodCastleCountAddValue", ',');
                if (nVipLev > 0 && nArry != null && nArry[nVipLev] > 0)
                {
                    nNum = nArry[nVipLev];
                }
                leftnum = bcDataTmp2.MaxEnterNum + nNum - nCount;
                goto IL_4AC;
            }

            case 7:
            {
                DateTime      now            = TimeUtil.NowDateTime();
                string        nowTime        = TimeUtil.NowDateTime().ToString("HH:mm");
                List <string> timePointsList = GameManager.AngelTempleMgr.m_AngelTempleData.BeginTime;
                leftnum = 0;
                for (int i = 0; i < timePointsList.Count; i++)
                {
                    DateTime perpareTime = DateTime.Parse(timePointsList[i]).AddMinutes((double)(GameManager.AngelTempleMgr.m_AngelTempleData.PrepareTime / 60));
                    if (now <= perpareTime)
                    {
                        leftnum++;
                    }
                }
                goto IL_4AC;
            }

            case 8:
                leftnum = 1;
                if (SweepWanMotaManager.GetSweepCount(client) >= SweepWanMotaManager.nWanMoTaMaxSweepNum)
                {
                    leftnum = 0;
                }
                goto IL_4AC;

            case 9:
            {
                BufferData bufferData = Global.GetBufferDataByID(client, 34);
                leftnum = (int)(bufferData.BufferVal - (long)bufferData.BufferSecs);
                goto IL_4AC;
            }

            case 10:
                leftnum = GameManager.BattleMgr.LeftEnterCount();
                goto IL_4AC;

            case 11:
                leftnum = GameManager.ArenaBattleMgr.LeftEnterCount();
                goto IL_4AC;

            case 13:
                leftnum = JingJiChangManager.getInstance().GetLeftEnterCount(client);
                goto IL_4AC;

            case 15:
            {
                DailyTaskData dailyTaskData = Global.FindDailyTaskDataByTaskClass(client, 9);
                if (null == dailyTaskData)
                {
                    return(Global.MaxTaofaTaskNumForMU);
                }
                int maxnum = Global.GetMaxDailyTaskNum(client, 9, dailyTaskData);
                leftnum = maxnum - dailyTaskData.RecNum;
                goto IL_4AC;
            }

            case 16:
            {
                int temp = 0;
                CaiJiLogic.ReqCaiJiLastNum(client, 0, out temp);
                leftnum = temp;
                goto IL_4AC;
            }

            case 19:
                leftnum = HuanYingSiYuanManager.getInstance().GetLeftCount(client);
                goto IL_4AC;
            }
            if (copyId > 0)
            {
                SystemXmlItem systemFuBenItem = null;
                if (!GameManager.systemFuBenMgr.SystemXmlItemDict.TryGetValue(copyId, out systemFuBenItem))
                {
                    return(-1);
                }
                int enternum  = systemFuBenItem.GetIntValue("EnterNumber", -1);
                int finishnum = systemFuBenItem.GetIntValue("FinishNumber", -1);
                int total     = (enternum < finishnum) ? finishnum : enternum;
                if (type == 4 || type == 3)
                {
                    int[] nAddNum = GameManager.systemParamsList.GetParamValueIntArrayByName("VIPJinBiFuBenNum", ',');
                    if (type == 3)
                    {
                        nAddNum = GameManager.systemParamsList.GetParamValueIntArrayByName("VIPJinYanFuBenNum", ',');
                    }
                    if (client.ClientData.VipLevel > 0 && client.ClientData.VipLevel <= VIPEumValue.VIPENUMVALUE_MAXLEVEL && nAddNum != null && nAddNum.Length > VIPEumValue.VIPENUMVALUE_MAXLEVEL)
                    {
                        total += nAddNum[client.ClientData.VipLevel];
                    }
                }
                FuBenData tmpfubdata = Global.GetFuBenData(client, copyId);
                if (null == tmpfubdata)
                {
                    return(total);
                }
                leftnum = total - tmpfubdata.EnterNum;
            }
IL_4AC:
            return(leftnum);
        }