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); } } } } }
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); }
/// <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); } } }
/// <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); }
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); } } }
/// <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); } } } } }
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); } } }
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); } } } } } } } } } } } } }
/// <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); } } } } } } } } }