public static void ExperienceCopyMapCreateMonster(GameClient client, ExperienceCopyScene ExperienceMapInfo, ExperienceCopyMapDataInfo exMap, int nWave) { ExperienceMapInfo.m_ExperienceCopyMapCreateMonsterFlag = 1; ExperienceMapInfo.m_ExperienceCopyMapCreateMonsterWave++; GameMap gameMap = null; if (!GameManager.MapMgr.DictMaps.TryGetValue(ExperienceMapInfo.m_MapCodeID, out gameMap)) { LogManager.WriteLog(LogTypes.Error, string.Format("经验副本 地图配置 ID = {0}", ExperienceMapInfo.m_MapCodeID), null, true); } else { int gridX = gameMap.CorrectWidthPointToGridPoint(exMap.posX) / gameMap.MapGridWidth; int gridY = gameMap.CorrectHeightPointToGridPoint(exMap.posZ) / gameMap.MapGridHeight; int gridNum = gameMap.CorrectWidthPointToGridPoint(exMap.Radius); int nTotal = 0; List <int> nListID = exMap.MonsterIDList[nWave]; List <int> nListNum = exMap.MonsterNumList[nWave]; for (int i = 0; i < nListID.Count; i++) { int nID = nListID[i]; int nNum = nListNum[i]; GameManager.MonsterZoneMgr.AddDynamicMonsters(ExperienceMapInfo.m_MapCodeID, nID, ExperienceMapInfo.m_CopyMapID, nNum, gridX, gridY, gridNum, 0, SceneUIClasses.Normal, null, null); nTotal += nNum; ExperienceMapInfo.m_ExperienceCopyMapCreateMonsterNum += nNum; ExperienceMapInfo.m_ExperienceCopyMapRemainMonsterNum += nNum; } ExperienceMapInfo.m_ExperienceCopyMapNeedKillMonsterNum = ExperienceMapInfo.m_ExperienceCopyMapCreateMonsterNum * exMap.CreateNextWaveMonsterCondition[nWave] / 100; if (client != null) { ExperienceCopySceneManager.SendMsgToClientForExperienceCopyMapInfo(client, ExperienceMapInfo.m_ExperienceCopyMapCreateMonsterWave); } } }
public static void HeartBeatExperienceCopyMap() { long nowTicks = TimeUtil.NOW(); if (nowTicks - ExperienceCopySceneManager.LastHeartBeatTicks >= 1000L) { ExperienceCopySceneManager.LastHeartBeatTicks = ((ExperienceCopySceneManager.LastHeartBeatTicks < 86400000L) ? nowTicks : (ExperienceCopySceneManager.LastHeartBeatTicks + 1000L)); List <CopyMap> CopyMapList = new List <CopyMap>(); lock (ExperienceCopySceneManager.m_ExperienceListCopyMaps) { foreach (CopyMap item in ExperienceCopySceneManager.m_ExperienceListCopyMaps.Values) { List <GameClient> clientsList = item.GetClientsList(); ExperienceCopyMapDataInfo tmp = null; tmp = Data.ExperienceCopyMapDataInfoList[item.MapCode]; if (tmp != null) { ExperienceCopyScene tmpExSceneInfo = null; lock (ExperienceCopySceneManager.m_ExperienceListCopyMapsInfo) { if (!ExperienceCopySceneManager.m_ExperienceListCopyMapsInfo.TryGetValue(item.FuBenSeqID, out tmpExSceneInfo)) { continue; } } if (tmpExSceneInfo != null) { int nWave = tmpExSceneInfo.m_ExperienceCopyMapCreateMonsterWave; int nCount = tmp.MonsterIDList.Count; if (nWave < nCount) { if (tmpExSceneInfo.m_ExperienceCopyMapCreateMonsterFlag == 0) { if (clientsList.Count <GameClient>() != 0 && clientsList[0] != null) { ExperienceCopySceneManager.ExperienceCopyMapCreateMonster(clientsList[0], tmpExSceneInfo, tmp, nWave); } else { ExperienceCopySceneManager.ExperienceCopyMapCreateMonster(null, tmpExSceneInfo, tmp, nWave); } } } } } } } for (int i = 0; i < CopyMapList.Count; i++) { GameManager.CopyMapMgr.ProcessRemoveCopyMap(CopyMapList[i]); } } }
public static void ExperienceCopyMapKillMonster(GameClient client, Monster monster) { ExperienceCopyMapDataInfo TmpExInfo = null; if (Data.ExperienceCopyMapDataInfoList.TryGetValue(client.ClientData.MapCode, out TmpExInfo)) { ExperienceCopyScene tmpExSceneInfo = null; lock (ExperienceCopySceneManager.m_ExperienceListCopyMapsInfo) { if (!ExperienceCopySceneManager.m_ExperienceListCopyMapsInfo.TryGetValue(client.ClientData.FuBenSeqID, out tmpExSceneInfo)) { return; } } if (tmpExSceneInfo != null) { CopyMap TmpCopyMapInfo = null; if (ExperienceCopySceneManager.m_ExperienceListCopyMaps.TryGetValue(client.ClientData.FuBenSeqID, out TmpCopyMapInfo)) { if (TmpCopyMapInfo != null) { tmpExSceneInfo.m_ExperienceCopyMapKillMonsterNum++; tmpExSceneInfo.m_ExperienceCopyMapKillMonsterTotalNum++; tmpExSceneInfo.m_ExperienceCopyMapRemainMonsterNum--; if (tmpExSceneInfo.m_ExperienceCopyMapCreateMonsterFlag == 1 && tmpExSceneInfo.m_ExperienceCopyMapKillMonsterNum == tmpExSceneInfo.m_ExperienceCopyMapNeedKillMonsterNum) { tmpExSceneInfo.m_ExperienceCopyMapCreateMonsterFlag = 0; tmpExSceneInfo.m_ExperienceCopyMapKillMonsterNum = 0; tmpExSceneInfo.m_ExperienceCopyMapCreateMonsterNum = 0; } if (tmpExSceneInfo.m_ExperienceCopyMapCreateMonsterWave == TmpExInfo.MonsterIDList.Count && tmpExSceneInfo.m_ExperienceCopyMapKillMonsterTotalNum == TmpExInfo.MonsterSum) { ExperienceCopySceneManager.SendMsgToClientForExperienceCopyMapAward(client); } int nWave = tmpExSceneInfo.m_ExperienceCopyMapCreateMonsterWave; if (tmpExSceneInfo.m_ExperienceCopyMapKillMonsterTotalNum == TmpExInfo.MonsterSum || tmpExSceneInfo.m_ExperienceCopyMapRemainMonsterNum == 0) { nWave++; } ExperienceCopySceneManager.SendMsgToClientForExperienceCopyMapInfo(client, nWave); } } } } }