/// <summary>
        /// 添加副本
        /// </summary>
        /// <param name="client"></param>
        /// <param name="copyMap"></param>
        /// <param name="sceneType"></param>
        public void AddCopyScenes(GameClient client, CopyMap copyMap, SceneUIClasses sceneType)
        {
            if (sceneType != SceneUIClasses.CoupleArena)
            {
                return;
            }

            int fuBenSeqId = copyMap.FuBenSeqID;
            int mapCode    = copyMap.MapCode;

            lock (Mutex)
            {
                CoupleArenaCopyScene scene = null;
                if (!this.FuBenSeq2CopyScenes.TryGetValue(fuBenSeqId, out scene))
                {
                    scene          = new CoupleArenaCopyScene();
                    scene.GameId   = (int)Global.GetClientKuaFuServerLoginData(client).GameId;
                    scene.FuBenSeq = fuBenSeqId;
                    scene.MapCode  = mapCode;
                    scene.CopyMap  = copyMap;

                    FuBenSeq2CopyScenes[fuBenSeqId] = scene;
                }

                scene.EnterRoleSide[client.ClientData.RoleID] = client.ClientData.BattleWhichSide;
                copyMap.IsKuaFuCopy = true;
                copyMap.SetRemoveTicks(TimeUtil.NOW() + (WarCfg.WaitSec + WarCfg.FightSec + WarCfg.ClearSec + 120) * TimeUtil.SECOND);
                GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 1, 0, 0, (int)GameTypes.CoupleArena);
            }
        }
        public static bool RemoveCopyScene(CopyMap copyMap, SceneUIClasses sceneType)
        {
            bool success = true;

            lock (GlobalServiceManager.Scene2ManagerDict)
            {
                List <IManager> list;
                if (GlobalServiceManager.Scene2ManagerDict.TryGetValue((int)sceneType, out list))
                {
                    foreach (IManager i in list)
                    {
                        ICopySceneManager m2 = i as ICopySceneManager;
                        if (null != m2)
                        {
                            try
                            {
                                success = (success && m2.RemoveCopyScene(copyMap, sceneType));
                            }
                            catch (Exception ex)
                            {
                                LogManager.WriteException(ex.ToString());
                            }
                        }
                    }
                }
            }
            return(success);
        }
Beispiel #3
0
 public bool ProcessJoinCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
 {
     try
     {
         SceneUIClasses sceneType = Global.GetMapSceneType(client.ClientData.MapCode);
         if (sceneType != SceneUIClasses.Normal)
         {
             client.sendCmd(nID, "-21".ToString(), false);
             return(true);
         }
         if (!this.IsGongNengOpened(client, true))
         {
             client.sendCmd(nID, "-2001".ToString(), false);
             return(true);
         }
         if (client.ClientData.SignUpGameType != 0)
         {
             client.sendCmd(nID, "-2002".ToString(), false);
             return(true);
         }
         if (KuaFuManager.getInstance().IsInCannotJoinKuaFuCopyTime(client))
         {
             client.sendCmd(nID, "-2004".ToString(), false);
             return(true);
         }
         SystemXmlItem systemFuBenItem = null;
         if (!GameManager.systemFuBenMgr.SystemXmlItemDict.TryGetValue(this._runtimeData.CopyID, out systemFuBenItem))
         {
             client.sendCmd(nID, "-3".ToString(), false);
             return(true);
         }
         int minLevel      = systemFuBenItem.GetIntValue("MinLevel", -1);
         int minZhuanSheng = systemFuBenItem.GetIntValue("MinZhuanSheng", -1);
         int levelLimit    = minZhuanSheng * 100 + minLevel;
         if (client.ClientData.ChangeLifeCount * 100 + client.ClientData.Level < levelLimit)
         {
             client.sendCmd(nID, "-19".ToString(), false);
             return(true);
         }
         int oldCount = this.GetElementWarCount(client);
         if (oldCount >= systemFuBenItem.GetIntValue("FinishNumber", -1))
         {
             client.sendCmd(nID, "-16".ToString(), false);
             return(true);
         }
         int result = 0;
         if (result > 0)
         {
             client.ClientData.SignUpGameType = 4;
             GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 1, 0, 0, 0, 4);
         }
         client.sendCmd <int>(nID, result, false);
         return(true);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false);
     }
     return(false);
 }
Beispiel #4
0
 public void AddCopyScene(GameClient client, CopyMap copyMap, SceneUIClasses sceneType)
 {
     if (copyMap.MapCode == this.MapCode)
     {
         int fuBenSeqId = copyMap.FuBenSeqID;
         int mapCode    = copyMap.MapCode;
         lock (this.copyDict)
         {
             MoRiJudgeCopy copy = null;
             if (!this.copyDict.TryGetValue(fuBenSeqId, out copy))
             {
                 copy           = new MoRiJudgeCopy();
                 copy.MyCopyMap = copyMap;
                 copy.GameId    = Global.GetClientKuaFuServerLoginData(client).GameId;
                 copy.StateTimeData.GameType = 3;
                 copy.StartTime            = TimeUtil.NowDateTime();
                 copy.EndTime              = copy.StartTime.AddMinutes((double)this.CopyMaxAliveMinutes);
                 copy.LimitKillCount       = 0;
                 copy.RoleCount            = 1;
                 copy.Passed               = false;
                 this.copyDict[fuBenSeqId] = copy;
             }
             else
             {
                 copy.RoleCount++;
             }
         }
         FuBenManager.AddFuBenSeqID(client.ClientData.RoleID, copyMap.FuBenSeqID, 0, copyMap.FubenMapID);
         copyMap.IsKuaFuCopy = true;
         copyMap.SetRemoveTicks(TimeUtil.NOW() + (long)((this.CopyMaxAliveMinutes + 3) * 60000));
         GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 1, 0, 0, 3);
     }
 }
Beispiel #5
0
 public void OnInitGame(SceneUIClasses ManagerType, GameClient client)
 {
     lock (this.Mutex)
     {
         this.FactionIDVsServerIDDict[client.ClientData.Faction] = client.ServerId;
     }
     Global.SaveRoleParamsDateTimeToDB(client, "20019", TimeUtil.NowDateTime(), true);
     EventLogManager.AddKarenBattleEnterEvent(this.ConvertMapSceneTypeToCaiJiLingDiType(ManagerType), client);
 }
Beispiel #6
0
        /// <summary>
        /// 罗兰城战攻防竞价申请指令处理
        /// </summary>
        /// <param name="client"></param>
        /// <param name="nID"></param>
        /// <param name="bytes"></param>
        /// <param name="cmdParams"></param>
        /// <returns></returns>
        public bool ProcessTianTiJoinCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
        {
            try
            {
                SceneUIClasses sceneType = Global.GetMapSceneType(client.ClientData.MapCode);
                if (sceneType != SceneUIClasses.Normal)
                {
                    client.sendCmd(nID, StdErrorCode.Error_Denied_In_Current_Map);
                    return(true);
                }

                if (!IsGongNengOpened(client, true))
                {
                    client.sendCmd(nID, StdErrorCode.Error_Not_In_valid_Time);
                    return(true);
                }

                int      result     = StdErrorCode.Error_Not_In_valid_Time;
                int      gropuIndex = client.ClientData.TianTiData.DuanWeiId;
                TimeSpan time       = TimeUtil.NowDateTime().TimeOfDay;
                lock (RuntimeData.Mutex)
                {
                    for (int i = 0; i < RuntimeData.TimePoints.Count - 1; i += 2)
                    {
                        if (time >= RuntimeData.TimePoints[i] && time < RuntimeData.TimePoints[i + 1])
                        {
                            result = StdErrorCode.Error_Success;
                            break;
                        }
                    }
                }

                if (result >= 0)
                {
                    result = TianTiClient.getInstance().TianTiSignUp(client.strUserID, client.ClientData.RoleID, client.ClientData.ZoneID,
                                                                     (int)GameTypes.TianTi, gropuIndex, client.ClientData.CombatForce);

                    if (result > 0)
                    {
                        client.ClientData.SignUpGameType = (int)GameTypes.TianTi;
                        GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 1, 0, 0, 0, (int)GameTypes.TianTi);
                    }
                }

                //发送结果给客户端
                client.sendCmd(nID, result);
                return(true);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false);
            }

            return(false);
        }
Beispiel #7
0
        public MarryFubenResult ClientReady(GameClient client, int FuBenID)
        {
            MarryFubenResult result;

            if (!client.ClientData.IsMainOccupation)
            {
                result = MarryFubenResult.Error_Denied_For_Minor_Occupation;
            }
            else if (-1 == client.ClientData.MyMarriageData.byMarrytype)
            {
                result = MarryFubenResult.NotMarriaged;
            }
            else if (client.ClientData.CopyMapID > 0 && client.ClientData.FuBenSeqID > 0)
            {
                result = MarryFubenResult.InFuben;
            }
            else
            {
                SceneUIClasses sceneType = Global.GetMapSceneType(client.ClientData.MapCode);
                if (sceneType == SceneUIClasses.ShuiJingHuanJing || sceneType == SceneUIClasses.GuZhanChang)
                {
                    result = MarryFubenResult.InFuben;
                }
                else
                {
                    GameClient       Spouseclient  = GameManager.ClientMgr.FindClient(client.ClientData.MyMarriageData.nSpouseID);
                    MarriageInstance FubenInstance = this.GetMarriageInstance(client);
                    if (null == FubenInstance)
                    {
                        result = MarryFubenResult.Error;
                    }
                    else if (1 == FubenInstance.nHusband_state && 1 == FubenInstance.nWife_state && FubenInstance.nHusband_FuBenID == FubenInstance.nWife_FuBenID)
                    {
                        result = MarryFubenResult.IsReaday;
                    }
                    else
                    {
                        if (1 == client.ClientData.MyMarriageData.byMarrytype)
                        {
                            FubenInstance.nHusband_state   = 1;
                            FubenInstance.nHusband_FuBenID = FuBenID;
                        }
                        else if (2 == client.ClientData.MyMarriageData.byMarrytype)
                        {
                            FubenInstance.nWife_state   = 1;
                            FubenInstance.nWife_FuBenID = FuBenID;
                        }
                        this.GetMarriageInstanceState(client, FubenInstance);
                        this.GetMarriageInstanceState(Spouseclient, FubenInstance);
                        result = MarryFubenResult.Success;
                    }
                }
            }
            return(result);
        }
Beispiel #8
0
        private int GiveRoleAwards(GameClient client, int success, KarenBattleSceneInfo sceneInfo)
        {
            long addExp       = 0L;
            int  addBindJinBi = 0;

            addExp       = Global.GetExpMultiByZhuanShengExpXiShu(client, sceneInfo.Exp);
            addBindJinBi = sceneInfo.BandJinBi;
            List <AwardsItemData> awardsItemDataList;

            if (success > 0)
            {
                awardsItemDataList = sceneInfo.WinAwardsItemList.Items;
            }
            else
            {
                addExp             = (long)((double)addExp * 0.8);
                addBindJinBi       = (int)((double)addBindJinBi * 0.8);
                awardsItemDataList = sceneInfo.LoseAwardsItemList.Items;
            }
            addExp       -= addExp % 10000L;
            addBindJinBi -= addBindJinBi % 10000;
            string         sSubject = "阿卡伦战场奖励";
            SceneUIClasses mapType  = Global.GetMapSceneType(sceneInfo.MapCode);
            string         sContent;

            if (SceneUIClasses.KarenWest == mapType)
            {
                sContent = GLang.GetLang(2617, new object[0]);
            }
            else
            {
                sContent = GLang.GetLang(2618, new object[0]);
            }
            if (awardsItemDataList != null && !Global.CanAddGoodsNum(client, awardsItemDataList.Count))
            {
                Global.UseMailGivePlayerAward2(client, awardsItemDataList, GLang.GetLang(2616, new object[0]), sContent, 0, 0, 0);
            }
            else if (awardsItemDataList != null)
            {
                foreach (AwardsItemData item in awardsItemDataList)
                {
                    Global.AddGoodsDBCommand(Global._TCPManager.TcpOutPacketPool, client, item.GoodsID, item.GoodsNum, 0, "", item.Level, item.Binding, 0, "", true, 1, sSubject, "1900-01-01 12:00:00", 0, 0, item.IsHaveLuckyProp, 0, item.ExcellencePorpValue, item.AppendLev, 0, null, null, 0, true);
                }
            }
            if (addExp > 0L)
            {
                GameManager.ClientMgr.ProcessRoleExperience(client, addExp, true, true, false, "none");
            }
            if (addBindJinBi > 0)
            {
                GameManager.ClientMgr.AddMoney1(client, addBindJinBi, sSubject, true);
            }
            return(1);
        }
        // 检查该地图是否允许操作
        private bool CheckMap(GameClient client)
        {
            SceneUIClasses sceneType = Global.GetMapSceneType(client.ClientData.MapCode);

            if (sceneType != SceneUIClasses.Normal)
            {
                return(false);
            }

            return(true);
        }
Beispiel #10
0
 public bool ProcessGuanZhanTrackingCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
 {
     try
     {
         int roleID     = Convert.ToInt32(cmdParams[0]);
         int beTrackRID = Convert.ToInt32(cmdParams[1]);
         if (KuaFuManager.getInstance().ClientCmdCheckFaild(nID, client, ref roleID))
         {
             return(true);
         }
         lock (this.Mutex)
         {
             if (client.ClientData.HideGM == 0 || roleID == beTrackRID)
             {
                 return(true);
             }
             int posX = 0;
             int posY = 0;
             if (!this.GetGuanZhanPos(client.ClientData.MapCode, ref posX, ref posY))
             {
                 int result = -21;
                 client.sendCmd(nID, string.Format("{0}:{1}", result, -1), false);
                 return(true);
             }
             if (-1 == beTrackRID)
             {
                 this.CancleTracking(client, true);
                 return(true);
             }
             GameClient beTrackingClient = GameManager.ClientMgr.FindClient(beTrackRID);
             if (beTrackingClient == null || beTrackingClient.ClientData.HideGM > 0 || beTrackingClient.ClientData.WaitingNotifyChangeMap || beTrackingClient.ClientData.WaitingForChangeMap)
             {
                 int result = -21;
                 client.sendCmd(nID, string.Format("{0}:{1}", result, -1), false);
                 return(true);
             }
             SceneUIClasses srcSceneType = Global.GetMapSceneType(client.ClientData.MapCode);
             SceneUIClasses tarSceneType = Global.GetMapSceneType(beTrackingClient.ClientData.MapCode);
             if (srcSceneType != tarSceneType)
             {
                 int result = -21;
                 client.sendCmd(nID, string.Format("{0}:{1}", result, -1), false);
                 return(true);
             }
             this.Tracking(client, beTrackingClient);
         }
         return(true);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false);
     }
     return(false);
 }
Beispiel #11
0
 public KarenBattleSceneInfo TryGetKarenBattleSceneInfoBySceneType(SceneUIClasses SceneType)
 {
     foreach (KeyValuePair <int, KarenBattleSceneInfo> item in this.SceneDataDict)
     {
         if (Global.GetMapSceneType(item.Value.MapCode) == SceneType)
         {
             return(item.Value);
         }
     }
     return(null);
 }
Beispiel #12
0
        public void OnLeaveScene(GameClient client, SceneUIClasses sceneType, bool logout = false)
        {
            if (client.ClientSocket.IsKuaFuLogin)
            {
                switch (sceneType)
                {
                case SceneUIClasses.HuanYingSiYuan:
                    HuanYingSiYuanManager.getInstance().OnLogout(client);
                    break;

                case SceneUIClasses.TianTi:
                    TianTiManager.getInstance().OnLogout(client);
                    break;

                case SceneUIClasses.YongZheZhanChang:
                    YongZheZhanChangManager.getInstance().OnLogout(client);
                    break;

                case SceneUIClasses.KingOfBattle:
                    KingOfBattleManager.getInstance().OnLogout(client);
                    break;

                case SceneUIClasses.MoRiJudge:
                    MoRiJudgeManager.Instance().OnLogOut(client);
                    break;

                case SceneUIClasses.ElementWar:
                    ElementWarManager.getInstance().OnLogout(client);
                    break;

                case SceneUIClasses.LangHunLingYu:
                    LangHunLingYuManager.getInstance().OnLogout(client);
                    break;

                case SceneUIClasses.CopyWolf:
                    CopyWolfManager.getInstance().OnLogout(client);
                    break;

                case SceneUIClasses.KFZhengBa:
                    ZhengBaManager.Instance().OnLogout(client);
                    break;

                case SceneUIClasses.CoupleArena:
                    CoupleArenaManager.Instance().OnLeaveFuBen(client);
                    break;
                }

                if (!logout)
                {
                    GotoLastMap(client);
                }
            }
        }
Beispiel #13
0
 public void TryTrackingOther(GameClient tClient, GameClient lostClient)
 {
     try
     {
         SceneUIClasses sceneType = Global.GetMapSceneType(lostClient.ClientData.MapCode);
         GuanZhanData   gzData    = new GuanZhanData();
         if (SceneUIClasses.BangHuiMatch == sceneType)
         {
             BangHuiMatchManager.getInstance().FillGuanZhanData(lostClient, gzData);
         }
         if (SceneUIClasses.EscapeBattle == sceneType)
         {
             EscapeBattleManager.getInstance().FillGuanZhanData(lostClient, gzData);
         }
         List <GuanZhanRoleMiniData> roleList = null;
         if (gzData.RoleMiniDataDict.TryGetValue(lostClient.ClientData.BattleWhichSide, out roleList))
         {
             foreach (GuanZhanRoleMiniData r in roleList)
             {
                 if (r.RoleID != lostClient.ClientData.RoleID)
                 {
                     GameClient beTrackingClient = GameManager.ClientMgr.FindClient(r.RoleID);
                     if (null != beTrackingClient)
                     {
                         this.Tracking(tClient, beTrackingClient);
                         return;
                     }
                 }
             }
         }
         gzData.RoleMiniDataDict.Remove(lostClient.ClientData.BattleWhichSide);
         foreach (List <GuanZhanRoleMiniData> rolelist in gzData.RoleMiniDataDict.Values)
         {
             foreach (GuanZhanRoleMiniData r in roleList)
             {
                 if (r.RoleID != lostClient.ClientData.RoleID)
                 {
                     GameClient beTrackingClient = GameManager.ClientMgr.FindClient(r.RoleID);
                     if (null != beTrackingClient)
                     {
                         this.Tracking(tClient, beTrackingClient);
                         return;
                     }
                 }
             }
         }
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, "", false, false);
     }
 }
Beispiel #14
0
        /// <summary>
        /// 添加任意地图的动态怪物到生成队列 radius 是格子坐标范围,不是像素点坐标范围!!!!
        /// </summary>
        /// <param name="mapCode"></param>
        /// <param name="copyMap"></param>
        /// <returns>怪物种子对象,并非实际的怪物对象</returns>
        public Monster AddDynamicMonsters(int mapCode, int monsterID, int copyMapID = -1, int addNum = 1, int gridX                      = 0, int gridY = 0, int radius = 3,
                                          int pursuitRadius = 0, SceneUIClasses managerType          = SceneUIClasses.Normal, object tag = null)
        {
            //先打印下怪物日志,便于调试
            TraceAllDynamicMonsters();

            MonsterZone monsterZone = null;

            if (!MonsterDynamicZoneDict.TryGetValue(mapCode, out monsterZone))
            {
                return(null);
            }

            Monster seedMonster = GetDynamicMonsterSeed(monsterID);

            if (null == seedMonster)
            {
                return(null);
            }

            int index = 0;

            if (copyMapID >= 0)
            {
                index = Global.Clamp(copyMapID % Max_WaitingAddDynamicMonsterQueneCount, 0, Max_WaitingAddDynamicMonsterQueneCount - 1);
            }
            else
            {
                index = Global.Clamp(mapCode % Max_WaitingAddDynamicMonsterQueneCount, 0, Max_WaitingAddDynamicMonsterQueneCount - 1);
            }

            //等待爆副本怪的队列
            lock (WaitingAddDynamicMonsterQueue) //线程锁
            {
                WaitingAddDynamicMonsterQueue[index].Enqueue(new MonsterZoneQueueItem()
                {
                    CopyMapID     = copyMapID,
                    BirthCount    = addNum,
                    MyMonsterZone = monsterZone,
                    seedMonster   = seedMonster,
                    ToX           = gridX,
                    ToY           = gridY,
                    Radius        = radius,
                    PursuitRadius = pursuitRadius,
                    Tag           = tag,
                    ManagerType   = managerType,
                });
            }

            return(seedMonster);
        }
Beispiel #15
0
        /// <summary>
        /// 添加一个场景
        /// </summary>
        public bool AddTianTiCopyScenes(GameClient client, CopyMap copyMap, SceneUIClasses sceneType)
        {
            if (sceneType == SceneUIClasses.TianTi)
            {
                int fuBenSeqId = copyMap.FuBenSeqID;
                int mapCode    = copyMap.MapCode;
                lock (RuntimeData.Mutex)
                {
                    TianTiScene tianTiScene = null;
                    if (!TianTiSceneDict.TryGetValue(fuBenSeqId, out tianTiScene))
                    {
                        tianTiScene         = new TianTiScene();
                        tianTiScene.CopyMap = copyMap;
                        tianTiScene.CleanAllInfo();
                        tianTiScene.GameId         = (int)Global.GetClientKuaFuServerLoginData(client).GameId;
                        tianTiScene.m_nMapCode     = mapCode;
                        tianTiScene.CopyMapId      = copyMap.CopyMapID;
                        tianTiScene.FuBenSeqId     = fuBenSeqId;
                        tianTiScene.m_nPlarerCount = 1;

                        TianTiSceneDict[fuBenSeqId] = tianTiScene;
                    }
                    else
                    {
                        tianTiScene.m_nPlarerCount++;
                    }

                    copyMap.IsKuaFuCopy = true;
                    SaveClientBattleSide(tianTiScene, client);
                    copyMap.SetRemoveTicks(TimeUtil.NOW() + RuntimeData.TotalSecs * TimeUtil.SECOND);

                    if (tianTiScene.SuccessSide == -1)
                    {
                        client.sendCmd((int)TCPGameServerCmds.CMD_SPR_TIANTI_AWARD, new TianTiAwardsData()
                        {
                            Success = -1
                        });
                    }
                }

                //更新状态
                TianTiClient.getInstance().GameFuBenRoleChangeState(client.ClientData.RoleID, (int)KuaFuRoleStates.StartGame);
                GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 1, 0, 0, (int)GameTypes.TianTi);

                return(true);
            }

            return(false);
        }
        /// <summary>
        /// 删除一个场景
        /// </summary>
        public bool RemoveCopyScene(CopyMap copyMap, SceneUIClasses sceneType)
        {
            if (sceneType == SceneUIClasses.LangHunLingYu)
            {
                lock (RuntimeData.Mutex)
                {
                    LangHunLingYuScene LangHunLingYuScene;
                    RuntimeData.SceneDict.TryRemove(copyMap.FuBenSeqID, out LangHunLingYuScene);
                }

                return(true);
            }

            return(false);
        }
Beispiel #17
0
        /// <summary>
        /// 删除一个场景
        /// </summary>
        public bool RemoveCopyScene(CopyMap copyMap, SceneUIClasses sceneType)
        {
            if (sceneType == SceneUIClasses.YongZheZhanChang)
            {
                lock (RuntimeData.Mutex)
                {
                    YongZheZhanChangScene YongZheZhanChangScene;
                    SceneDict.TryRemove(copyMap.FuBenSeqID, out YongZheZhanChangScene);
                }

                return(true);
            }

            return(false);
        }
        /// <summary>
        /// 删除一个场景
        /// </summary>
        public bool RemoveCopyScene(CopyMap copyMap, SceneUIClasses sceneType)
        {
            if (sceneType == SceneUIClasses.KingOfBattle)
            {
                lock (RuntimeData.Mutex)
                {
                    KingOfBattleScene KingOfBattleScene;
                    SceneDict.TryRemove(copyMap.FuBenSeqID, out KingOfBattleScene);
                }

                return(true);
            }

            return(false);
        }
        /// <summary>
        /// 移除副本
        /// </summary>
        /// <param name="copyMap"></param>
        /// <param name="sceneType"></param>
        public void RemoveCopyScene(CopyMap copyMap, SceneUIClasses sceneType)
        {
            if (copyMap == null || sceneType != SceneUIClasses.CoupleArena)
            {
                return;
            }

            lock (Mutex)
            {
                CoupleArenaCopyScene scene = null;
                if (FuBenSeq2CopyScenes.TryGetValue(copyMap.FuBenSeqID, out scene))
                {
                    FuBenSeq2CopyScenes.Remove(copyMap.FuBenSeqID);
                    GameId2FuBenData.Remove(scene.GameId);
                }
            }
        }
Beispiel #20
0
        /// <summary>
        /// 删除一个场景
        /// </summary>
        public bool RemoveTianTiCopyScene(CopyMap copyMap, SceneUIClasses sceneType)
        {
            if (sceneType == SceneUIClasses.TianTi)
            {
                lock (RuntimeData.Mutex)
                {
                    TianTiScene tianTiScene;
                    if (TianTiSceneDict.TryRemove(copyMap.FuBenSeqID, out tianTiScene))
                    {
                        RuntimeData.GameId2FuBenSeq.Remove(tianTiScene.GameId);
                    }
                }

                return(true);
            }

            return(false);
        }
Beispiel #21
0
        private int ConvertMapSceneTypeToCaiJiLingDiType(SceneUIClasses mapsceneType)
        {
            int result;

            if (mapsceneType == SceneUIClasses.KarenWest)
            {
                result = 0;
            }
            else if (mapsceneType == SceneUIClasses.KarenEast)
            {
                result = 1;
            }
            else
            {
                result = -1;
            }
            return(result);
        }
Beispiel #22
0
        // 添加一个末日审判副本
        public void AddCopyScene(GameClient client, CopyMap copyMap, SceneUIClasses sceneType)
        {
            if (copyMap.MapCode == this.MapCode)
            {
                int fuBenSeqId = copyMap.FuBenSeqID;
                int mapCode    = copyMap.MapCode;

                lock (copyDict)
                {
                    MoRiJudgeCopy copy = null;
                    if (!copyDict.TryGetValue(fuBenSeqId, out copy))
                    {
                        copy           = new MoRiJudgeCopy();
                        copy.MyCopyMap = copyMap;
                        copy.GameId    = Global.GetClientKuaFuServerLoginData(client).GameId;
                        copy.StateTimeData.GameType = (int)GameTypes.MoRiJudge;

                        // 副本的统计信息
                        copy.StartTime      = TimeUtil.NowDateTime();
                        copy.EndTime        = copy.StartTime.AddMinutes(this.CopyMaxAliveMinutes);
                        copy.LimitKillCount = 0;
                        copy.RoleCount      = 1;
                        copy.Passed         = false;

                        copyDict[fuBenSeqId] = copy;
                    }
                    else
                    {
                        copy.RoleCount++;
                    }
                }

                FuBenManager.AddFuBenSeqID(client.ClientData.RoleID, copyMap.FuBenSeqID, 0, copyMap.FubenMapID);

                copyMap.IsKuaFuCopy = true;
                // 增加清除时间
                copyMap.SetRemoveTicks(TimeUtil.NOW() + (this.CopyMaxAliveMinutes + 3) * TimeUtil.MINITE);

                //更新状态
                //  MoRiJudgeClient.getInstance().GameFuBenRoleChangeState(client.ClientData.RoleID, (int)KuaFuRoleStates.StartGame);
                // 开始游戏统计
                GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 1, 0, 0, (int)GameTypes.MoRiJudge);
            }
        }
Beispiel #23
0
        public bool AddCopyScenes(GameClient client, CopyMap copyMap, SceneUIClasses sceneType)
        {
            bool result;

            if (copyMap.MapCode == this.RuntimeData.MapID)
            {
                int fuBenSeqId = copyMap.FuBenSeqID;
                int mapCode    = copyMap.MapCode;
                lock (this.RuntimeData.Mutex)
                {
                    WanMoXiaGuScene scene = null;
                    if (!this.SceneDict.TryGetValue(fuBenSeqId, out scene))
                    {
                        scene             = new WanMoXiaGuScene();
                        scene.CopyMapInfo = copyMap;
                        scene.CleanAllInfo();
                        scene.GameId               = Global.GetClientKuaFuServerLoginData(client).GameId;
                        scene.MapID                = mapCode;
                        scene.CopyMapID            = copyMap.CopyMapID;
                        scene.FuBenSeqId           = fuBenSeqId;
                        scene.PlayerCount          = 1;
                        scene.BossLifePercent      = 1.0;
                        this.SceneDict[fuBenSeqId] = scene;
                    }
                    else
                    {
                        scene.PlayerCount++;
                    }
                    client.ClientData.BattleWhichSide = 1;
                    client.SceneObject       = scene;
                    copyMap.IsKuaFuCopy      = true;
                    copyMap.CustomPassAwards = true;
                    copyMap.SetRemoveTicks(TimeUtil.NOW() + (long)(this.RuntimeData.TotalSecs * 1000));
                    GameManager.ClientMgr.BroadSpecialCopyMapMessage <WanMoXiaGuScoreData>(1266, scene.ScoreData, scene.CopyMapInfo);
                }
                result = true;
            }
            else
            {
                result = false;
            }
            return(result);
        }
Beispiel #24
0
        public bool RemoveCopyScene(CopyMap copyMap, SceneUIClasses sceneType)
        {
            bool result;

            if (sceneType == SceneUIClasses.KuaFuBoss)
            {
                lock (this.RuntimeData.Mutex)
                {
                    KuaFuBossScene KuaFuBossScene;
                    this.SceneDict.TryRemove(copyMap.FuBenSeqID, out KuaFuBossScene);
                }
                result = true;
            }
            else
            {
                result = false;
            }
            return(result);
        }
Beispiel #25
0
 public bool ProcessGuanZhanRoleMiniDataCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
 {
     try
     {
         int roleID = Convert.ToInt32(cmdParams[0]);
         if (KuaFuManager.getInstance().ClientCmdCheckFaild(nID, client, ref roleID))
         {
             return(true);
         }
         if (client.ClientData.HideGM == 0)
         {
             return(true);
         }
         int posX = 0;
         int posY = 0;
         if (!this.GetGuanZhanPos(client.ClientData.MapCode, ref posX, ref posY))
         {
             return(true);
         }
         SceneUIClasses sceneType = Global.GetMapSceneType(client.ClientData.MapCode);
         GuanZhanData   gzData    = new GuanZhanData();
         if (SceneUIClasses.BangHuiMatch == sceneType)
         {
             BangHuiMatchManager.getInstance().FillGuanZhanData(client, gzData);
         }
         if (SceneUIClasses.LangHunLingYu == sceneType)
         {
             LangHunLingYuManager.getInstance().FillGuanZhanData(client, gzData);
         }
         if (SceneUIClasses.EscapeBattle == sceneType)
         {
             EscapeBattleManager.getInstance().FillGuanZhanData(client, gzData);
         }
         client.sendCmd <GuanZhanData>(nID, gzData, false);
         return(true);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false);
     }
     return(false);
 }
Beispiel #26
0
        public bool RemoveCopyScene(CopyMap copyMap, SceneUIClasses sceneType)
        {
            bool result;

            if (sceneType == SceneUIClasses.KarenWest)
            {
                lock (this.RuntimeData.Mutex)
                {
                    KarenBattleScene BattleScene;
                    this.SceneDict.TryRemove(copyMap.FuBenSeqID, out BattleScene);
                    this.RuntimeData.FuBenItemData.Remove(BattleScene.GameId);
                }
                result = true;
            }
            else
            {
                result = false;
            }
            return(result);
        }
Beispiel #27
0
        public bool IsKuaFuMap(int mapCode)
        {
            SceneUIClasses sceneType = Global.GetMapSceneType(mapCode);

            switch (sceneType)
            {
            case SceneUIClasses.HuanYingSiYuan:
            case SceneUIClasses.TianTi:
            case SceneUIClasses.YongZheZhanChang:
            case SceneUIClasses.MoRiJudge:
            case SceneUIClasses.ElementWar:
            case SceneUIClasses.KuaFuBoss:
            case SceneUIClasses.KaLunTe:
            case SceneUIClasses.HuanShuYuan:
            case SceneUIClasses.LangHunLingYu:
            case SceneUIClasses.CopyWolf:
            case SceneUIClasses.KFZhengBa:
            case SceneUIClasses.CoupleArena:
            case SceneUIClasses.KingOfBattle:
                return(true);
            }

            return(false);
        }
Beispiel #28
0
        public bool CanEnterKuaFuMap(KuaFuServerLoginData kuaFuServerLoginData)
        {
            SceneUIClasses sceneType = Global.GetMapSceneType((int)kuaFuServerLoginData.GameId);
            bool           result;

            if (SceneUIClasses.ChongShengMap == sceneType)
            {
                result = true;
            }
            else
            {
                KuaFuMapRoleData kuaFuMapRoleData = YongZheZhanChangClient.getInstance().GetKuaFuMapRoleData(kuaFuServerLoginData.RoleId);
                if (kuaFuMapRoleData == null || kuaFuMapRoleData.KuaFuServerId != GameManager.ServerId || (long)kuaFuMapRoleData.KuaFuMapCode != kuaFuServerLoginData.GameId)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("{0}不具有进入跨服地图{1}的资格", kuaFuServerLoginData.RoleId, kuaFuServerLoginData.GameId), null, true);
                    result = false;
                }
                else
                {
                    result = true;
                }
            }
            return(result);
        }
Beispiel #29
0
        /// <summary>
        /// 添加任意地图的动态怪物到生成队列 radius 是格子坐标范围,不是像素点坐标范围!!!!
        /// </summary>
        /// <param name="mapCode"></param>
        /// <param name="copyMap"></param>
        public void AddDynamicRobot(int mapCode, Robot robot, int copyMapID = -1, int addNum = 1, int gridX = 0, int gridY = 0, int radius = 3, int pursuitRadius = 0, SceneUIClasses managerType = SceneUIClasses.Normal, object tag = null)
        {
            //先打印下怪物日志,便于调试
            TraceAllDynamicMonsters();

            MonsterZone monsterZone = null;

            if (!MonsterDynamicZoneDict.TryGetValue(mapCode, out monsterZone))
            {
                return;
            }

            robot.MonsterZoneNode = monsterZone;

            //等待爆副本怪的队列
            lock (WaitingReloadRobotQueue) //线程锁
            {
                WaitingReloadRobotQueue.Enqueue(new MonsterZoneQueueItem()
                {
                    CopyMapID     = copyMapID,
                    BirthCount    = addNum,
                    MyMonsterZone = monsterZone,
                    seedMonster   = robot,
                    ToX           = gridX,
                    ToY           = gridY,
                    Radius        = radius,
                    PursuitRadius = pursuitRadius,
                    Tag           = tag,
                    ManagerType   = managerType,
                });
            }
        }
Beispiel #30
0
        public bool AddCopyScenes(GameClient client, CopyMap copyMap, SceneUIClasses sceneType)
        {
            bool result;

            if (sceneType == SceneUIClasses.KuaFuBoss)
            {
                int            fuBenSeqId = copyMap.FuBenSeqID;
                int            mapCode    = copyMap.MapCode;
                int            roleId     = client.ClientData.RoleID;
                int            gameId     = (int)Global.GetClientKuaFuServerLoginData(client).GameId;
                DateTime       now        = TimeUtil.NowDateTime();
                KuaFuBossScene scene      = null;
                lock (this.RuntimeData.Mutex)
                {
                    if (!this.SceneDict.TryGetValue(fuBenSeqId, out scene))
                    {
                        KuaFuBossSceneInfo        sceneInfo = null;
                        YongZheZhanChangFuBenData fuBenData;
                        if (!this.RuntimeData.FuBenItemData.TryGetValue(gameId, out fuBenData))
                        {
                            LogManager.WriteLog(LogTypes.Error, "跨服Boss没有为副本找到对应的跨服副本数据,GameID:" + gameId, null, true);
                        }
                        if (!this.RuntimeData.SceneDataDict.TryGetValue(fuBenData.GroupIndex, out sceneInfo))
                        {
                            LogManager.WriteLog(LogTypes.Error, "跨服Boss没有为副本找到对应的档位数据,ID:" + fuBenData.GroupIndex, null, true);
                        }
                        scene         = new KuaFuBossScene();
                        scene.CopyMap = copyMap;
                        scene.CleanAllInfo();
                        scene.GameId         = gameId;
                        scene.m_nMapCode     = mapCode;
                        scene.CopyMapId      = copyMap.CopyMapID;
                        scene.FuBenSeqId     = fuBenSeqId;
                        scene.m_nPlarerCount = 1;
                        scene.SceneInfo      = sceneInfo;
                        DateTime startTime = now.Date.Add(this.GetStartTime(sceneInfo.Id));
                        scene.StartTimeTicks             = startTime.Ticks / 10000L;
                        scene.GameStatisticalData.GameId = gameId;
                        this.SceneDict[fuBenSeqId]       = scene;
                        List <BattleDynamicMonsterItem> dynMonsterList;
                        if (this.RuntimeData.SceneDynMonsterDict.TryGetValue(mapCode, out dynMonsterList))
                        {
                            scene.DynMonsterList = dynMonsterList;
                        }
                    }
                    else
                    {
                        scene.m_nPlarerCount++;
                    }
                    copyMap.IsKuaFuCopy = true;
                    copyMap.SetRemoveTicks(TimeUtil.NOW() + (long)(scene.SceneInfo.TotalSecs * 1000));
                }
                GameMap gameMap = null;
                if (GameManager.MapMgr.DictMaps.TryGetValue(copyMap.MapCode, out gameMap))
                {
                    scene.MapGridWidth  = gameMap.MapGridWidth;
                    scene.MapGridHeight = gameMap.MapGridHeight;
                }
                YongZheZhanChangClient.getInstance().GameFuBenRoleChangeState(roleId, 5, 0, 0);
                result = true;
            }
            else
            {
                result = false;
            }
            return(result);
        }