예제 #1
0
 public int SetLingZhu(int roleId, int lingDiType, int junTuanId, string junTuanName, int zhiWu, byte[] roledata)
 {
     try
     {
         int        oldRid = 0;
         LingDiData data   = new LingDiData();
         lock (this.Mutex)
         {
             if (this.LingDiDataList.Count < 2 || this.LingDiDataList[0] == null || null == this.LingDiDataList[1])
             {
                 return(0);
             }
             oldRid = this.LingDiDataList[lingDiType].RoleId;
             this.LingDiDataList[lingDiType].RoleId    = roleId;
             this.LingDiDataList[lingDiType].OpenCount = 0;
             this.LingDiDataList[lingDiType].BeginTime = DateTime.MaxValue;
             this.LingDiDataList[lingDiType].EndTime   = DateTime.MinValue;
             foreach (LingDiShouWei item in this.LingDiDataList[lingDiType].ShouWeiList)
             {
                 item.State         = 0;
                 item.FreeBuShuTime = DateTime.MinValue;
             }
             this.LingDiDataList[lingDiType].JunTuanId   = junTuanId;
             this.LingDiDataList[lingDiType].RoleData    = roledata;
             this.LingDiDataList[lingDiType].JunTuanName = junTuanName;
             data = this.LingDiDataList[lingDiType];
         }
         string optTime = TimeUtil.NowDateTime().ToString();
         string sql     = string.Format("update t_lingditequan set lingzhu=0,opttime='{2}' where rid={0} and lingditype={1};", oldRid, lingDiType, optTime);
         sql += string.Format("replace into t_lingditequan(rid,lingditype,juntuanid,juntuanname,lingzhu,roledata,opttime) values ({0},{1},{2},'{3}',{4},@roledata,'{5}');", new object[]
         {
             roleId,
             lingDiType,
             junTuanId,
             junTuanName,
             zhiWu,
             optTime
         });
         int ret = DbHelperMySQL.ExecuteSqlInsertImg(sql, new List <Tuple <string, byte[]> >
         {
             new Tuple <string, byte[]>("roledata", roledata)
         });
         if (ret > 0)
         {
             ClientAgentManager.Instance().BroadCastAsyncEvent(GameTypes.JunTuan, new AsyncDataItem(KuaFuEventTypes.SyncLingDiData, new object[]
             {
                 data
             }), 0);
             return(1);
         }
         return(ret);
     }
     catch
     {
     }
     return(0);
 }
예제 #2
0
        public int SetShouWeiTime(int roleId, int lingDiType, DateTime openTime, int index)
        {
            int ret = 0;

            try
            {
                LingDiData data    = new LingDiData();
                string     shouWei = "";
                lock (this.Mutex)
                {
                    if (this.LingDiDataList[lingDiType] == null)
                    {
                        return(-8);
                    }
                    data = this.LingDiDataList[lingDiType];
                    if (this.LingDiDataList[lingDiType].ShouWeiList.Count < index + 1)
                    {
                        return(-8);
                    }
                    data.ShouWeiList[index].State         = 2;
                    data.ShouWeiList[index].FreeBuShuTime = DateTime.MaxValue;
                    shouWei = data.ShouWeiList[0].State + "," + data.ShouWeiList[0].FreeBuShuTime.ToString();
                    for (int i = 1; i < data.ShouWeiList.Count; i++)
                    {
                        object obj = shouWei;
                        shouWei = string.Concat(new object[]
                        {
                            obj,
                            "|",
                            data.ShouWeiList[i].State,
                            ",",
                            data.ShouWeiList[i].FreeBuShuTime.ToString()
                        });
                    }
                }
                string upd = string.Format("update t_lingditequan set shouwei='{0}' where rid={1} and lingditype={2}", shouWei, roleId, lingDiType);
                ret = DbHelperMySQL.ExecuteSql(upd);
                if (ret > 0)
                {
                    return(1);
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("初始化跨服地图{0}时出错!!!", "领地采集"), null, true);
                return(-7);
            }
            return(ret);
        }
예제 #3
0
        public int SetDoubleOpenTime(int roleId, int lingDiType, DateTime openTime, int openSeconds)
        {
            LingDiData data = null;

            lock (this.Mutex)
            {
                if (this.LingDiDataList[lingDiType] == null)
                {
                    return(-8);
                }
                this.LingDiDataList[lingDiType].BeginTime = openTime;
                this.LingDiDataList[lingDiType].EndTime   = openTime.AddSeconds((double)openSeconds);
                this.LingDiDataList[lingDiType].OpenCount++;
                data = this.LingDiDataList[lingDiType];
            }
            int ret = 0;

            try
            {
                string upd = string.Format("update t_lingditequan set begintime='{0}',endtime='{1}',opencount={2},opttime='{5}' where rid={3} and lingditype={4}", new object[]
                {
                    data.BeginTime,
                    data.EndTime,
                    data.OpenCount,
                    roleId,
                    lingDiType,
                    TimeUtil.NowDateTime().ToString()
                });
                ret = DbHelperMySQL.ExecuteSql(upd);
                if (ret > 0)
                {
                    ClientAgentManager.Instance().BroadCastAsyncEvent(GameTypes.JunTuan, new AsyncDataItem(KuaFuEventTypes.SyncLingDiDoubleOpenData, new object[]
                    {
                        data
                    }), 0);
                    return(1);
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("初始化跨服地图{0}时出错!!!", "领地采集"), null, true);
                return(-7);
            }
            return(ret);
        }
예제 #4
0
 public void InitConfig()
 {
     try
     {
         this.RoleNumMax = (int)KuaFuServerManager.systemParamsList.GetParamValueIntByName("ManorMaxPlayer", -1);
         LingDiData diGong = new LingDiData
         {
             RoleId      = 0,
             LingDiType  = 0,
             JunTuanId   = -1,
             JunTuanName = "",
             BeginTime   = DateTime.MaxValue,
             EndTime     = DateTime.MinValue,
             OpenCount   = 0,
             ShouWeiList = new List <LingDiShouWei>(),
             RoleData    = null
         };
         MySqlDataReader sdr = DbHelperMySQL.ExecuteReader(string.Format("select * from t_lingditequan where lingzhu=1 and lingditype=0", new object[0]), false);
         if (sdr.Read())
         {
             diGong.RoleId      = Convert.ToInt32(sdr["rid"].ToString());
             diGong.LingDiType  = 0;
             diGong.JunTuanId   = Convert.ToInt32(sdr["juntuanid"].ToString());
             diGong.JunTuanName = sdr["juntuanname"].ToString();
             diGong.BeginTime   = DateTime.Parse(sdr["begintime"].ToString());
             diGong.EndTime     = DateTime.Parse(sdr["endtime"].ToString());
             diGong.OpenCount   = Convert.ToInt32(sdr["opencount"].ToString());
             string[] shouwei = sdr["shouwei"].ToString().Split(new char[]
             {
                 '|'
             });
             foreach (string shouWeiItem in shouwei)
             {
                 string[] item = shouWeiItem.Split(new char[]
                 {
                     ','
                 });
                 if (item.Length >= 2)
                 {
                     diGong.ShouWeiList.Add(new LingDiShouWei
                     {
                         State         = Convert.ToInt32(item[0]),
                         FreeBuShuTime = DateTime.Parse(item[1])
                     });
                 }
             }
             if (!sdr.IsDBNull(sdr.GetOrdinal("roledata")))
             {
                 diGong.RoleData = (byte[])sdr["roledata"];
             }
         }
         else
         {
             diGong.ShouWeiList.Add(new LingDiShouWei
             {
                 State         = 0,
                 FreeBuShuTime = DateTime.MaxValue
             });
             diGong.ShouWeiList.Add(new LingDiShouWei
             {
                 State         = 0,
                 FreeBuShuTime = DateTime.MaxValue
             });
             diGong.ShouWeiList.Add(new LingDiShouWei
             {
                 State         = 0,
                 FreeBuShuTime = DateTime.MaxValue
             });
             diGong.ShouWeiList.Add(new LingDiShouWei
             {
                 State         = 0,
                 FreeBuShuTime = DateTime.MaxValue
             });
         }
         LingDiData huangMo = new LingDiData
         {
             RoleId      = 0,
             LingDiType  = 1,
             JunTuanId   = -1,
             JunTuanName = "",
             BeginTime   = DateTime.MaxValue,
             EndTime     = DateTime.MinValue,
             OpenCount   = 0,
             ShouWeiList = new List <LingDiShouWei>(),
             RoleData    = null
         };
         MySqlDataReader sdr2 = DbHelperMySQL.ExecuteReader(string.Format("select * from t_lingditequan where lingzhu=1 and lingditype=1", new object[0]), false);
         if (sdr2.Read())
         {
             huangMo.RoleId      = Convert.ToInt32(sdr2["rid"].ToString());
             huangMo.LingDiType  = 1;
             huangMo.JunTuanId   = Convert.ToInt32(sdr2["juntuanid"].ToString());
             huangMo.JunTuanName = sdr2["juntuanname"].ToString();
             huangMo.BeginTime   = DateTime.Parse(sdr2["begintime"].ToString());
             huangMo.EndTime     = DateTime.Parse(sdr2["endtime"].ToString());
             huangMo.OpenCount   = Convert.ToInt32(sdr2["opencount"].ToString());
             string[] shouwei = sdr2["shouwei"].ToString().Split(new char[]
             {
                 '|'
             });
             foreach (string shouWeiItem in shouwei)
             {
                 string[] item = shouWeiItem.Split(new char[]
                 {
                     ','
                 });
                 if (item.Length >= 2)
                 {
                     huangMo.ShouWeiList.Add(new LingDiShouWei
                     {
                         State         = Convert.ToInt32(item[0]),
                         FreeBuShuTime = DateTime.Parse(item[1])
                     });
                 }
             }
             if (!sdr2.IsDBNull(sdr2.GetOrdinal("roledata")))
             {
                 huangMo.RoleData = (byte[])sdr2["roledata"];
             }
         }
         else
         {
             huangMo.ShouWeiList.Add(new LingDiShouWei
             {
                 State         = 0,
                 FreeBuShuTime = DateTime.MaxValue
             });
             huangMo.ShouWeiList.Add(new LingDiShouWei
             {
                 State         = 0,
                 FreeBuShuTime = DateTime.MaxValue
             });
             huangMo.ShouWeiList.Add(new LingDiShouWei
             {
                 State         = 0,
                 FreeBuShuTime = DateTime.MaxValue
             });
             huangMo.ShouWeiList.Add(new LingDiShouWei
             {
                 State         = 0,
                 FreeBuShuTime = DateTime.MaxValue
             });
         }
         lock (this.Mutex)
         {
             this.LingDiDataList = new List <LingDiData>();
             this.LingDiDataList.Add(diGong);
             this.LingDiDataList.Add(huangMo);
             this.Initialized = true;
         }
     }
     catch (Exception ex)
     {
         LogManager.WriteLog(LogTypes.Error, string.Format("LingDiCaiJiServer 初始化地图信息出错 ex:{0}", ex.Message.ToString()), null, true);
     }
 }
예제 #5
0
        public void PushGameResultData(KarenBattleScene scene)
        {
            JunTuanRankData rankData = this.GetJunTuanRankDataBySide(scene.SuccessSide);

            if (null != rankData)
            {
                JunTuanBaseData baseData = JunTuanManager.getInstance().GetJunTuanBaseDataByJunTuanID(rankData.JunTuanId);
                if (null == baseData)
                {
                    LogManager.WriteLog(LogTypes.Fatal, string.Format("无法获取军团基本信息 JunTuanId={0}", rankData.JunTuanId), null, true);
                }
                else if (baseData.BhList == null || baseData.BhList.Count == 0)
                {
                    LogManager.WriteLog(LogTypes.Fatal, string.Format("军团基本信息BhList为空 JunTuanId={0}", rankData.JunTuanId), null, true);
                }
                else
                {
                    int               leaderBangHui  = baseData.BhList[0];
                    int               leaderServerID = 0;
                    SceneUIClasses    mapType        = Global.GetMapSceneType(scene.m_nMapCode);
                    int               lingDiType     = this.ConvertMapSceneTypeToCaiJiLingDiType(mapType);
                    LingDiData        oldLingDiData  = null;
                    List <LingDiData> LingDiList     = JunTuanClient.getInstance().GetLingDiData();
                    if (null != LingDiList)
                    {
                        oldLingDiData = LingDiList.Find((LingDiData x) => x.LingDiType == lingDiType);
                    }
                    RoleData4Selector oldLeader = (oldLingDiData != null && oldLingDiData.RoleData != null) ? DataHelper.BytesToObject <RoleData4Selector>(oldLingDiData.RoleData, 0, oldLingDiData.RoleData.Length) : null;
                    lock (this.Mutex)
                    {
                        if (!this.FactionIDVsServerIDDict.TryGetValue(leaderBangHui, out leaderServerID))
                        {
                            JunTuanData data = JunTuanClient.getInstance().GetJunTuanData(leaderBangHui, rankData.JunTuanId, true);
                            if (null == data)
                            {
                                LogManager.WriteLog(LogTypes.Fatal, string.Format("无法获取JunTuanData BangHuiID={0} JunTuanId={1}", leaderBangHui, rankData.JunTuanId), null, true);
                                return;
                            }
                            LingDiCaiJiManager.getInstance().SetLingZhu(lingDiType, data.LeaderRoleId, rankData.JunTuanId, rankData.JunTuanName, null);
                            EventLogManager.AddKarenBattleEvent(lingDiType, oldLeader, data.LeaderZoneId, rankData.JunTuanId, data.LeaderRoleId);
                            return;
                        }
                    }
                    BangHuiDetailData bhData = Global.GetBangHuiDetailData(-1, leaderBangHui, leaderServerID);
                    if (null == bhData)
                    {
                        LogManager.WriteLog(LogTypes.Fatal, string.Format("无法获取帮会详细信息 BangHuiID={0} ServerID={1}", leaderBangHui, leaderServerID), null, true);
                    }
                    else
                    {
                        RoleDataEx dbRd = Global.sendToDB <RoleDataEx, string>(275, string.Format("{0}:{1}", -1, bhData.BZRoleID), leaderServerID);
                        if (dbRd == null || dbRd.RoleID <= 0)
                        {
                            LogManager.WriteLog(LogTypes.Fatal, string.Format("无法获取帮主详细信息 BangHuiID={0} BZRoleID={1} ServerID={2}", leaderBangHui, bhData.BZRoleID, leaderServerID), null, true);
                        }
                        else
                        {
                            JunTuanManager.getInstance().OnInitGame(dbRd);
                            RoleData4Selector leaderShowInfo = Global.RoleDataEx2RoleData4Selector(dbRd);
                            LingDiCaiJiManager.getInstance().SetLingZhu(lingDiType, dbRd.RoleID, rankData.JunTuanId, rankData.JunTuanName, leaderShowInfo);
                            EventLogManager.AddKarenBattleEvent(lingDiType, oldLeader, dbRd.ZoneID, rankData.JunTuanId, dbRd.RoleID);
                        }
                    }
                }
            }
        }
예제 #6
0
        private void TimerProc(object sender, EventArgs e)
        {
            bool     notifyPrepareGame = false;
            bool     notifyEnterGame   = false;
            bool     notifyEndGame     = false;
            DateTime now = TimeUtil.NowDateTime();

            lock (this.Mutex)
            {
                KarenBattleSceneInfo sceneItem = this.SceneDataDict.Values.FirstOrDefault <KarenBattleSceneInfo>();
                for (int i = 0; i < sceneItem.TimePoints.Count - 1; i += 2)
                {
                    if (now.DayOfWeek == (DayOfWeek)sceneItem.TimePoints[i].Days && now.TimeOfDay.TotalSeconds >= sceneItem.SecondsOfDay[i] - 120.0 && now.TimeOfDay.TotalSeconds <= sceneItem.SecondsOfDay[i + 1] + 120.0)
                    {
                        double secsPrepare = sceneItem.SecondsOfDay[i] - now.TimeOfDay.TotalSeconds;
                        double secsEnd     = sceneItem.SecondsOfDay[i + 1] + 120.0 - now.TimeOfDay.TotalSeconds;
                        if (!this.PrepareGame)
                        {
                            if (secsPrepare > 0.0 && secsPrepare < 120.0)
                            {
                                this.PrepareGame  = true;
                                notifyPrepareGame = true;
                                break;
                            }
                        }
                        else if (secsPrepare < 0.0)
                        {
                            notifyEnterGame  = true;
                            this.PrepareGame = false;
                            break;
                        }
                        if (!this.EndGame)
                        {
                            if (secsEnd > 0.0 && secsEnd < 120.0)
                            {
                                this.EndGame  = true;
                                notifyEndGame = true;
                                break;
                            }
                        }
                        else if (secsEnd < 0.0)
                        {
                            this.EndGame = false;
                            break;
                        }
                    }
                }
            }
            if (notifyPrepareGame)
            {
                LogManager.WriteLog(LogTypes.Error, "阿卡伦战场活动即将开始,准备通知军团角色进入!", null, true);
                lock (this.Mutex)
                {
                    this.FactionIDVsServerIDDict.Clear();
                }
            }
            if (notifyEnterGame)
            {
                int westcount = 0;
                int eastcount = 0;
                lock (this.Mutex)
                {
                    LogManager.WriteLog(LogTypes.Error, "阿卡伦战场开启,可以通知已分配到场次的玩家进入游戏了", null, true);
                    KarenBattleSceneInfo sceneItem = this.SceneDataDict.Values.FirstOrDefault <KarenBattleSceneInfo>();
                    foreach (GameClient client in GameManager.ClientMgr.GetAllClients(true))
                    {
                        if (this.CheckCanEnterKarenBattle(client) && this.CheckMap(client) && this.IsGongNengOpened(client, false))
                        {
                            if (null != client)
                            {
                                client.sendCmd(1210, string.Format("{0}:{1}:{2}:{3}", new object[]
                                {
                                    1,
                                    1,
                                    westcount,
                                    eastcount
                                }), false);
                            }
                        }
                    }
                }
            }
            if (notifyEndGame)
            {
                lock (this.Mutex)
                {
                    foreach (KarenBattleSceneInfo item in this.SceneDataDict.Values)
                    {
                        KarenFuBenData fubenData = JunTuanClient.getInstance().GetKarenKuaFuFuBenData(item.MapCode);
                        if (fubenData != null && fubenData.ServerId == GameManager.ServerId)
                        {
                            SceneUIClasses mapType = Global.GetMapSceneType(item.MapCode);
                            if (mapType != SceneUIClasses.KarenEast || KarenBattleManager_MapEast.getInstance().SceneDict.Count == 0)
                            {
                                if (mapType != SceneUIClasses.KarenWest || KarenBattleManager_MapWest.getInstance().SceneDict.Count == 0)
                                {
                                    int               lingDiType    = this.ConvertMapSceneTypeToCaiJiLingDiType(mapType);
                                    LingDiData        oldLingDiData = null;
                                    List <LingDiData> LingDiList    = JunTuanClient.getInstance().GetLingDiData();
                                    if (null != LingDiList)
                                    {
                                        oldLingDiData = LingDiList.Find((LingDiData x) => x.LingDiType == lingDiType);
                                    }
                                    RoleData4Selector oldLeader = (oldLingDiData != null && oldLingDiData.RoleData != null) ? DataHelper.BytesToObject <RoleData4Selector>(oldLingDiData.RoleData, 0, oldLingDiData.RoleData.Length) : null;
                                    LingDiCaiJiManager.getInstance().SetLingZhu(lingDiType, 0, 0, "", null);
                                    EventLogManager.AddKarenBattleEvent(lingDiType, oldLeader, 0, 0, 0);
                                }
                            }
                        }
                    }
                }
            }
            this.UpdateKuaFuMapClientCount(KarenBattleManager_MapWest.getInstance().SceneDict.Values.FirstOrDefault <KarenBattleScene>());
            this.UpdateKuaFuMapClientCount(KarenBattleManager_MapEast.getInstance().SceneDict.Values.FirstOrDefault <KarenBattleScene>());
        }