Esempio n. 1
0
        public static void AddGlodCopySceneList(int nID, CopyMap mapInfo)
        {
            bool bInsert = false;

            lock (GlodCopySceneManager.m_GlodCopySceneLists)
            {
                CopyMap tmp = null;
                if (!GlodCopySceneManager.m_GlodCopySceneLists.TryGetValue(nID, out tmp))
                {
                    GlodCopySceneManager.m_GlodCopySceneLists.Add(nID, mapInfo);
                    bInsert = true;
                }
                else if (tmp == null)
                {
                    GlodCopySceneManager.m_GlodCopySceneLists[nID] = mapInfo;
                    bInsert = true;
                }
                lock (GlodCopySceneManager.m_GlodCopySceneInfo)
                {
                    if (bInsert)
                    {
                        GoldCopyScene GoldCopySceneInfo = null;
                        if (!GlodCopySceneManager.m_GlodCopySceneInfo.TryGetValue(nID, out GoldCopySceneInfo))
                        {
                            GoldCopySceneInfo = new GoldCopyScene();
                            GoldCopySceneInfo.InitInfo(mapInfo.MapCode, mapInfo.CopyMapID, nID);
                            GoldCopySceneInfo.m_StartTimer = TimeUtil.NOW();
                            GlodCopySceneManager.m_GlodCopySceneInfo.Add(nID, GoldCopySceneInfo);
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        public static bool EnterGoldCopySceneWhenLogin(GameClient client, bool bContinue = true)
        {
            bool result;

            if (client != null)
            {
                CopyMap       tmp = null;
                GoldCopyScene GoldCopySceneInfo = null;
                lock (GlodCopySceneManager.m_GlodCopySceneLists)
                {
                    if (!GlodCopySceneManager.m_GlodCopySceneLists.TryGetValue(client.ClientData.FuBenSeqID, out tmp) || tmp == null)
                    {
                        return(false);
                    }
                }
                lock (GlodCopySceneManager.m_GlodCopySceneInfo)
                {
                    if (!GlodCopySceneManager.m_GlodCopySceneInfo.TryGetValue(client.ClientData.FuBenSeqID, out GoldCopySceneInfo) || GoldCopySceneInfo == null)
                    {
                        return(false);
                    }
                }
                long ticks = TimeUtil.NOW();
                GoldCopySceneInfo.m_LoginEnterTimer = ticks;
                GoldCopySceneInfo.m_LoginEnterFlag  = 1;
                result = true;
            }
            else
            {
                result = false;
            }
            return(result);
        }
Esempio n. 3
0
        /// <summary>
        // 刷怪接口
        /// </summary>
        public static void CreateMonsterForGoldCopyScene(GameClient client, GoldCopyScene goldcopyscene, int nWave)
        {
            GoldCopySceneMonster tmpInfo = Data.Goldcopyscenedata.GoldCopySceneMonsterData[nWave];
            long ticks = TimeUtil.NOW();

            // 随机刷怪
            int nRom = Global.GetRandomNumber(0, 10);

            // 在起点刷怪
            int[] pos   = Data.Goldcopyscenedata.m_MonsterPatorlPathList[0];
            Point toPos = new Point(pos[0], pos[1]);

            GameManager.MonsterZoneMgr.AddDynamicMonsters(goldcopyscene.m_MapCodeID, tmpInfo.m_MonsterID[nRom], goldcopyscene.m_CopyMapID, 1, (int)toPos.X, (int)toPos.Y, 1);

            goldcopyscene.m_CreateMonsterCount += 1;

            // 第N大波刷完了
            if (goldcopyscene.m_CreateMonsterCount == tmpInfo.m_Num)
            {
                goldcopyscene.m_CreateMonsterTick2      = ticks; // 设定大波刷完时间
                goldcopyscene.m_CreateMonsterWave       = nWave + 1;
                goldcopyscene.m_CreateMonsterCount      = 0;
                goldcopyscene.m_CreateMonsterWaveNotify = 0;

                //SendMsgToClientForGlodCopySceneMonsterWave(client, nWave);

                if (goldcopyscene.m_CreateMonsterWave > Data.Goldcopyscenedata.GoldCopySceneMonsterData.Count() && client != null)
                {
                    GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client,
                                                             StringUtil.substitute(Global.GetLang("金币副本 挂怪结束了")), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, (int)HintErrCodeTypes.None);
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        // 玩家登陆后进入金币副本
        /// </summary>
        public static bool EnterGoldCopySceneWhenLogin(GameClient client, bool bContinue = true)
        {
            if (client != null)
            {
                CopyMap       tmp = null;
                GoldCopyScene GoldCopySceneInfo = null;

                lock (m_GlodCopySceneLists)
                {
                    if (!m_GlodCopySceneLists.TryGetValue(client.ClientData.FuBenSeqID, out tmp) || tmp == null)
                    {
                        return(false);
                    }
                }

                lock (m_GlodCopySceneInfo)
                {
                    if (!m_GlodCopySceneInfo.TryGetValue(client.ClientData.FuBenSeqID, out GoldCopySceneInfo) || GoldCopySceneInfo == null)
                    {
                        return(false);
                    }
                }
                long ticks = TimeUtil.NOW();    // 当前tick

                GoldCopySceneInfo.m_LoginEnterTimer = ticks;
                GoldCopySceneInfo.m_LoginEnterFlag  = 1;

                /*if (bContinue == false)
                 * {
                 *  return true;
                 * }
                 *
                 * int fuBenID = FuBenManager.FindFuBenIDByMapCode(client.ClientData.MapCode);
                 * if (fuBenID > 0)
                 * {
                 *  List<GameClient> clientsList = tmp.GetClientsList();
                 *
                 *  if (clientsList.Count() != 0 && clientsList[0] != null)
                 *  {
                 *      string strcmd = string.Format("{0}:{1}", GoldCopySceneInfo.m_CreateMonsterWave, Data.Goldcopyscenedata.GoldCopySceneMonsterData.Count());//1.当前的波数 2.总波数
                 *      //TCPOutPacket tcpOutPacket = null;
                 *      //tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(Global._TCPManager.TcpOutPacketPool, strcmd, (int)TCPGameServerCmds.CMD_SPR_GOLDCOPYSCENEMONSTERWAVE);
                 *      //Global._TCPManager.MySocketListener.SendData(clientsList[0].ClientSocket, tcpOutPacket);
                 *      GameManager.ClientMgr.SendToClient(clientsList[0], strcmd, (int)TCPGameServerCmds.CMD_SPR_GOLDCOPYSCENEMONSTERWAVE);
                 *  }
                 * }*/

                return(true);
            }

            return(false);
        }
Esempio n. 5
0
 public static void SendMsgToClientForGlodCopyScenePrepare(GameClient client, GoldCopyScene goldcopyscene)
 {
     if (client != null)
     {
         int fuBenID = FuBenManager.FindFuBenIDByMapCode(client.ClientData.MapCode);
         if (fuBenID > 0)
         {
             long   ticks  = TimeUtil.NOW();
             int    nTimer = (int)(((long)GlodCopySceneManager.m_PrepareTime - (ticks - goldcopyscene.m_StartTimer)) / 1000L);
             string strcmd = string.Format("{0}", nTimer);
             GameManager.ClientMgr.SendToClient(client, strcmd, 627);
         }
     }
 }
Esempio n. 6
0
        /// <summary>
        // 通知客户端
        /// </summary>
        public static void SendMsgToClientForGlodCopyScenePrepare(GameClient client, GoldCopyScene goldcopyscene)
        {
            if (client != null)
            {
                int fuBenID = FuBenManager.FindFuBenIDByMapCode(client.ClientData.MapCode);
                if (fuBenID > 0)
                {
                    string strcmd = "";

                    long ticks = TimeUtil.NOW();    // 当前tick

                    int nTimer = (int)((m_PrepareTime - (ticks - goldcopyscene.m_StartTimer)) / 1000);

                    strcmd = string.Format("{0}", nTimer);

                    GameManager.ClientMgr.SendToClient(client, strcmd, (int)TCPGameServerCmds.CMD_SPR_GOLDCOPYSCENEPREPAREFIGHT);
                }
            }
        }
        public static Dictionary <int, GoldCopyScene> m_GlodCopySceneInfo = new Dictionary <int, GoldCopyScene>(); // key: 副本流水ID 即DB生成  Value: GoldCopyScene信息

        /// <summary>
        /// 添加一个场景
        /// </summary>
        public static void AddGlodCopySceneList(int nID, CopyMap mapInfo)
        {
            bool bInsert = false;

            lock (m_GlodCopySceneLists)
            {
                CopyMap tmp = null;

                if (!m_GlodCopySceneLists.TryGetValue(nID, out tmp))
                {
                    m_GlodCopySceneLists.Add(nID, mapInfo);
                    bInsert = true;
                }
                else
                {
                    if (tmp == null)
                    {
                        m_GlodCopySceneLists[nID] = mapInfo;
                        bInsert = true;
                    }
                }

                lock (m_GlodCopySceneInfo)
                {
                    if (bInsert == true)
                    {
                        GoldCopyScene GoldCopySceneInfo = null;

                        if (!m_GlodCopySceneInfo.TryGetValue(nID, out GoldCopySceneInfo))
                        {
                            GoldCopySceneInfo = new GoldCopyScene();

                            GoldCopySceneInfo.InitInfo(mapInfo.MapCode, mapInfo.CopyMapID, nID);

                            GoldCopySceneInfo.m_StartTimer = DateTime.Now.Ticks / 10000;

                            m_GlodCopySceneInfo.Add(nID, GoldCopySceneInfo);
                        }
                    }
                }
            }
        }
Esempio n. 8
0
        public static void CreateMonsterForGoldCopyScene(GameClient client, GoldCopyScene goldcopyscene, int nWave)
        {
            GoldCopySceneMonster tmpInfo = Data.Goldcopyscenedata.GoldCopySceneMonsterData[nWave];
            long ticks = TimeUtil.NOW();
            int  nRom  = Global.GetRandomNumber(0, 10);

            int[] pos   = Data.Goldcopyscenedata.m_MonsterPatorlPathList[0];
            Point toPos = new Point((double)pos[0], (double)pos[1]);

            GameManager.MonsterZoneMgr.AddDynamicMonsters(goldcopyscene.m_MapCodeID, tmpInfo.m_MonsterID[nRom], goldcopyscene.m_CopyMapID, 1, (int)toPos.X, (int)toPos.Y, 1, 0, SceneUIClasses.Normal, null, null);
            goldcopyscene.m_CreateMonsterCount++;
            if (goldcopyscene.m_CreateMonsterCount == tmpInfo.m_Num)
            {
                goldcopyscene.m_CreateMonsterTick2      = ticks;
                goldcopyscene.m_CreateMonsterWave       = nWave + 1;
                goldcopyscene.m_CreateMonsterCount      = 0;
                goldcopyscene.m_CreateMonsterWaveNotify = 0;
                if (goldcopyscene.m_CreateMonsterWave > Data.Goldcopyscenedata.GoldCopySceneMonsterData.Count <KeyValuePair <int, GoldCopySceneMonster> >() && client != null)
                {
                    GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(GLang.GetLang(376, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0);
                }
            }
        }
Esempio n. 9
0
        public static void HeartBeatGlodCopyScene()
        {
            long nowTicks = TimeUtil.NOW();

            if (nowTicks - GlodCopySceneManager.LastHeartBeatTicks >= 1000L)
            {
                GlodCopySceneManager.LastHeartBeatTicks = ((GlodCopySceneManager.LastHeartBeatTicks < 86400000L) ? nowTicks : (GlodCopySceneManager.LastHeartBeatTicks + 1000L));
                lock (GlodCopySceneManager.m_GlodCopySceneLists)
                {
                    foreach (CopyMap item in GlodCopySceneManager.m_GlodCopySceneLists.Values)
                    {
                        List <GameClient> clientsList          = item.GetClientsList();
                        GoldCopyScene     tmpGoldCopySceneData = null;
                        lock (GlodCopySceneManager.m_GlodCopySceneInfo)
                        {
                            if (!GlodCopySceneManager.m_GlodCopySceneInfo.TryGetValue(item.FuBenSeqID, out tmpGoldCopySceneData))
                            {
                                continue;
                            }
                        }
                        if (tmpGoldCopySceneData != null)
                        {
                            lock (tmpGoldCopySceneData)
                            {
                                if (tmpGoldCopySceneData.m_TimeNotifyFlag == 0)
                                {
                                    tmpGoldCopySceneData.m_TimeNotifyFlag = 1;
                                    if (clientsList.Count <GameClient>() != 0 && clientsList[0] != null)
                                    {
                                        GlodCopySceneManager.SendMsgToClientForGlodCopyScenePrepare(clientsList[0], tmpGoldCopySceneData);
                                    }
                                }
                                if (nowTicks >= tmpGoldCopySceneData.m_StartTimer + (long)GlodCopySceneManager.m_PrepareTime)
                                {
                                    int nWave  = tmpGoldCopySceneData.m_CreateMonsterWave;
                                    int nCount = Data.Goldcopyscenedata.GoldCopySceneMonsterData.Count <KeyValuePair <int, GoldCopySceneMonster> >();
                                    if (nWave <= nCount)
                                    {
                                        if (nWave == 0 && tmpGoldCopySceneData.m_CreateMonsterFirstWaveFlag == 0)
                                        {
                                            tmpGoldCopySceneData.m_CreateMonsterFirstWaveFlag = 1;
                                            tmpGoldCopySceneData.m_CreateMonsterWave          = 1;
                                        }
                                        GoldCopySceneMonster tmpMonsterInfo = null;
                                        if (Data.Goldcopyscenedata.GoldCopySceneMonsterData.TryGetValue(nWave, out tmpMonsterInfo))
                                        {
                                            if (tmpMonsterInfo != null)
                                            {
                                                if (nowTicks - tmpGoldCopySceneData.m_CreateMonsterTick2 > (long)(tmpMonsterInfo.m_Delay2 * 1000))
                                                {
                                                    if (tmpGoldCopySceneData.m_CreateMonsterWaveNotify == 0)
                                                    {
                                                        tmpGoldCopySceneData.m_CreateMonsterWaveNotify = 1;
                                                        if (clientsList.Count <GameClient>() != 0 && clientsList[0] != null)
                                                        {
                                                            GlodCopySceneManager.SendMsgToClientForGlodCopySceneMonsterWave(clientsList[0], tmpGoldCopySceneData.m_CreateMonsterWave);
                                                        }
                                                    }
                                                    if (nowTicks - tmpGoldCopySceneData.m_CreateMonsterTick1 > (long)(tmpMonsterInfo.m_Delay1 * 1000))
                                                    {
                                                        if (tmpGoldCopySceneData.m_LoginEnterFlag == 1)
                                                        {
                                                            if (clientsList.Count <GameClient>() != 0 && clientsList[0] != null && nowTicks - tmpGoldCopySceneData.m_LoginEnterTimer > (long)GlodCopySceneManager.m_DelayTime)
                                                            {
                                                                tmpGoldCopySceneData.m_LoginEnterFlag = 0;
                                                                GlodCopySceneManager.SendMsgToClientForGlodCopySceneMonsterWave(clientsList[0], tmpGoldCopySceneData.m_CreateMonsterWave);
                                                            }
                                                        }
                                                        tmpGoldCopySceneData.m_CreateMonsterTick1 = ((tmpGoldCopySceneData.m_CreateMonsterTick1 < 86400000L) ? nowTicks : (tmpGoldCopySceneData.m_CreateMonsterTick1 + (long)(tmpMonsterInfo.m_Delay1 * 1000)));
                                                        if (clientsList.Count <GameClient>() != 0 && clientsList[0] != null)
                                                        {
                                                            GlodCopySceneManager.CreateMonsterForGoldCopyScene(clientsList[0], tmpGoldCopySceneData, tmpGoldCopySceneData.m_CreateMonsterWave);
                                                        }
                                                        else
                                                        {
                                                            GlodCopySceneManager.CreateMonsterForGoldCopyScene(null, tmpGoldCopySceneData, tmpGoldCopySceneData.m_CreateMonsterWave);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Esempio n. 10
0
        /// <summary>
        // 心跳处理
        /// </summary>
        public static void HeartBeatGlodCopyScene()
        {
            long nowTicks = TimeUtil.NOW();

            if (nowTicks - LastHeartBeatTicks < (1000))
            {
                return;
            }

            LastHeartBeatTicks = LastHeartBeatTicks < TimeUtil.DAY ? nowTicks : LastHeartBeatTicks + 1000;

            // lock住!!!
            lock (m_GlodCopySceneLists)
            {
                foreach (var item in m_GlodCopySceneLists.Values)
                {
                    List <GameClient> clientsList = item.GetClientsList();

                    GoldCopyScene tmpGoldCopySceneData = null;

                    lock (m_GlodCopySceneInfo)
                    {
                        if (!m_GlodCopySceneInfo.TryGetValue(item.FuBenSeqID, out tmpGoldCopySceneData))
                        {
                            continue;
                        }

                        //tmpGoldCopySceneData = m_GlodCopySceneInfo[item.FuBenSeqID];
                    }

                    if (tmpGoldCopySceneData == null)
                    {
                        continue;
                    }

                    lock (tmpGoldCopySceneData)
                    {
                        if (tmpGoldCopySceneData.m_TimeNotifyFlag == 0)
                        {
                            tmpGoldCopySceneData.m_TimeNotifyFlag = 1;

                            if (clientsList.Count() != 0 && clientsList[0] != null)
                            {
                                SendMsgToClientForGlodCopyScenePrepare(clientsList[0], tmpGoldCopySceneData);
                            }
                        }

                        // 准备时间
                        if (nowTicks >= (tmpGoldCopySceneData.m_StartTimer + m_PrepareTime))
                        {
                            int nWave  = tmpGoldCopySceneData.m_CreateMonsterWave;
                            int nCount = Data.Goldcopyscenedata.GoldCopySceneMonsterData.Count();

                            if (nWave > nCount)
                            {
                                continue;
                            }

                            if (nWave == 0 && tmpGoldCopySceneData.m_CreateMonsterFirstWaveFlag == 0)
                            {
                                tmpGoldCopySceneData.m_CreateMonsterFirstWaveFlag = 1;
                                tmpGoldCopySceneData.m_CreateMonsterWave          = 1;

                                //SendMsgToClientForGlodCopySceneMonsterWave(clientsList[0], 0);
                            }

                            GoldCopySceneMonster tmpMonsterInfo = null;

                            if (!Data.Goldcopyscenedata.GoldCopySceneMonsterData.TryGetValue(nWave, out tmpMonsterInfo))
                            {
                                continue;
                            }

                            if (tmpMonsterInfo != null)
                            {
                                // 延迟间隔判断
                                if (nowTicks - tmpGoldCopySceneData.m_CreateMonsterTick2 > tmpMonsterInfo.m_Delay2 * 1000)       // 大波间隔时间判断
                                {
                                    if (tmpGoldCopySceneData.m_CreateMonsterWaveNotify == 0)
                                    {
                                        tmpGoldCopySceneData.m_CreateMonsterWaveNotify = 1;
                                        if (clientsList.Count() != 0 && clientsList[0] != null)
                                        {
                                            SendMsgToClientForGlodCopySceneMonsterWave(clientsList[0], tmpGoldCopySceneData.m_CreateMonsterWave);
                                        }
                                    }

                                    if (nowTicks - tmpGoldCopySceneData.m_CreateMonsterTick1 > tmpMonsterInfo.m_Delay1 * 1000)   // 小波间隔时间判断
                                    {
                                        if (tmpGoldCopySceneData.m_LoginEnterFlag == 1)
                                        {
                                            if (clientsList.Count() != 0 && clientsList[0] != null && nowTicks - tmpGoldCopySceneData.m_LoginEnterTimer > m_DelayTime)
                                            {
                                                tmpGoldCopySceneData.m_LoginEnterFlag = 0;
                                                SendMsgToClientForGlodCopySceneMonsterWave(clientsList[0], tmpGoldCopySceneData.m_CreateMonsterWave);
                                            }
                                        }

                                        tmpGoldCopySceneData.m_CreateMonsterTick1 = tmpGoldCopySceneData.m_CreateMonsterTick1 < TimeUtil.DAY ? nowTicks : tmpGoldCopySceneData.m_CreateMonsterTick1 + tmpMonsterInfo.m_Delay1 * 1000;

                                        if (clientsList.Count() != 0 && clientsList[0] != null)
                                        {
                                            CreateMonsterForGoldCopyScene(clientsList[0], tmpGoldCopySceneData, tmpGoldCopySceneData.m_CreateMonsterWave);
                                        }
                                        else
                                        {
                                            CreateMonsterForGoldCopyScene(null, tmpGoldCopySceneData, tmpGoldCopySceneData.m_CreateMonsterWave);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }