예제 #1
0
        public List<AllyData> AllyList(int unionID)
        {
            lock (_Mutex)
            {
                List<int> allyIDList = InitAllyIDList(unionID);
                List<AllyData> list = new List<AllyData>();
                foreach (int id in allyIDList)
                {
                    KFAllyData data = GetUnionData(id);
                    if (data == null) continue;

                    AllyData result = new AllyData();
                    result.UnionID = data.UnionID;
                    result.UnionZoneID = data.UnionZoneID;
                    result.UnionName = data.UnionName;
                    result.UnionLevel = data.UnionLevel;
                    result.UnionNum = data.UnionNum;
                    result.LeaderID = data.LeaderID;
                    result.LeaderZoneID = data.LeaderZoneID;
                    result.LeaderName = data.LeaderName;
                    result.LogState = (int)EAlly.AllyAgree;

                    list.Add(result);
                }

                return list;
            }
        }
예제 #2
0
        public bool UnionIsAlly(GameClient client, int targetID)
        {
            bool result;

            lock (AllyClient.getInstance()._Mutex)
            {
                if (client.ClientData.AllyList == null || client.ClientData.AllyList.Count <= 0)
                {
                    result = false;
                }
                else
                {
                    AllyData resultData = client.ClientData.AllyList.Find((AllyData data) => data.UnionID == targetID);
                    bool     isAllyMap  = this.IsAllyMap(client.ClientData.MapCode);
                    if (resultData != null && isAllyMap)
                    {
                        result = true;
                    }
                    else
                    {
                        result = false;
                    }
                }
            }
            return(result);
        }
예제 #3
0
    /// <summary>
    /// Creates allies based on the stored ally data
    /// </summary>
    /// <param name="allyParent">Transform that will serve as the parent for the loaded allies</param>
    public static void LoadAllies(Transform allyParent)
    {
        // Get the amount of allies
        ChildAmountData allyAmData = SaveSystem.LoadAllyAmount();
        int             allyAmount = allyAmData.GetChildAmount();

        // Load each ally
        for (int i = 0; i < allyAmount; ++i)
        {
            // Get the data for the ally
            AllyData allyData = SaveSystem.LoadAlly(i);
            // Get the key of which prefab to spawn
            int key = allyData.GetPrefabKey();
            // Use the key to get the prefab to spawn
            GameObject allyPrefab = SaveAlliesController.GetAllyPrefab(key);
            // Spawn the prefab as a child of the ally Parent
            GameObject allyObj = Object.Instantiate(allyPrefab, allyParent);

            // Set its transform components
            allyObj.transform.position = allyData.GetPosition();

            // Get its AllyStats script
            AllyStats allyStatsScriptRef = allyObj.GetComponent <AllyStats>();
            if (allyStatsScriptRef != null)
            {
                allyStatsScriptRef.SetExperience(allyData.GetExperience());
                allyStatsScriptRef.SetOneLevelExperience(allyData.GetOneLevelExperience());
                allyStatsScriptRef.SetLevel(allyData.GetLevel());
                allyStatsScriptRef.SetNextLevelThreshold(allyData.GetNextLevelThreshold());
                allyStatsScriptRef.SetOneLevelNextLevelThreshold(allyData.GetOneLevelNextLevelThreshold());
                allyStatsScriptRef.AmountStatIncreases = allyData.GetAmountStatIncreases();
                allyStatsScriptRef.SetStrength(allyData.GetStrength());
                allyStatsScriptRef.SetMagic(allyData.GetMagic());
                allyStatsScriptRef.SetSpeed(allyData.GetSpeed());
                allyStatsScriptRef.SetVitality(allyData.GetVitality());
                allyStatsScriptRef.StrBubblesFilled      = allyData.GetStrengthBubblesFilled();
                allyStatsScriptRef.MagicBubblesFilled    = allyData.GetMagicBubblesFilled();
                allyStatsScriptRef.SpeedBubblesFilled    = allyData.GetSpeedBubblesFilled();
                allyStatsScriptRef.VitalityBubblesFilled = allyData.GetVitalityBubblesFilled();
            }
            else
            {
                Debug.LogError("There was no AllyStats script attached to " + allyObj.name);
            }

            // Get its AllyHealth script
            AllyHealth allyHealthScriptRef = allyObj.GetComponent <AllyHealth>();
            if (allyHealthScriptRef != null)
            {
                allyHealthScriptRef.MaxHP = allyData.GetMaxHP();
                allyHealthScriptRef.CurHP = allyData.GetCurHP();
            }
            else
            {
                Debug.LogError("There was no AllyHealth script attached to " + allyObj.name);
            }
        }
    }
예제 #4
0
        public EAlly HAllyRequest(int unionID, int zoneID, string unionName)
        {
            AllyData result = null;

            try
            {
                lock (_Mutex)
                {
                    if (!VersionIsEqual())
                    {
                        _unionDic.Clear();
                        _allyDic.Clear();
                        _requestDic.Clear();
                        _acceptDic.Clear();

                        _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyStartGameEvent(), (int)_sceneType);
                        return(EAlly.EFail);
                    }

                    IAllyService kuaFuService = GetKuaFuService();
                    if (null == kuaFuService)
                    {
                        return(EAlly.EServer);
                    }

                    try
                    {
                        AllyData d = kuaFuService.AllyRequest(_ClientInfo.ServerId, unionID, zoneID, unionName);
                        if (d.LogState == (int)EAlly.AllyRequestSucc)
                        {
                            List <AllyData> list = null;
                            if (!_requestDic.TryGetValue(unionID, out list))
                            {
                                list = new List <AllyData>()
                                {
                                };
                                _requestDic.TryAdd(unionID, list);
                            }

                            list.Add(d);
                            return((EAlly)d.LogState);
                        }
                    }
                    catch (System.Exception ex)
                    {
                        ResetKuaFuService();
                    }
                }
            }
            catch (System.Exception ex)
            {
                LogManager.WriteExceptionUseCache(ex.ToString());
            }

            return(EAlly.EAllyRequest);
        }
예제 #5
0
        public EAlly HUnionDataChange(AllyData unionData)
        {
            EAlly result = EAlly.EFail;

            try
            {
                lock (_Mutex)
                {
                    IAllyService kuaFuService = GetKuaFuService();
                    if (null == kuaFuService)
                    {
                        return(result);
                    }

                    try
                    {
                        result = (EAlly)kuaFuService.UnionDataChange(_ClientInfo.ServerId, unionData);
                        if (result == EAlly.Succ)
                        {
                            int unionID = unionData.UnionID;

                            DateTime oldTime;
                            if (_unionDic.TryGetValue(unionID, out oldTime))
                            {
                                _unionDic[unionID] = DateTime.Now;
                                return(EAlly.Succ);
                            }
                            else
                            {
                                _unionDic.TryAdd(unionID, DateTime.Now);

                                HAllyDataList(unionID, EAllyDataType.Ally);
                                HAllyDataList(unionID, EAllyDataType.Request);
                                HAllyDataList(unionID, EAllyDataType.Accept);
                            }
                        }
                    }
                    catch (System.Exception ex)
                    {
                        ResetKuaFuService();
                    }
                }
            }
            catch (System.Exception ex)
            {
                LogManager.WriteExceptionUseCache(ex.ToString());
            }

            return(result);
        }
예제 #6
0
 public void UnionDataChange(int unionID, int serverID, bool isDel = false, int unionLevel = 0)
 {
     if (!KuaFuManager.KuaFuWorldKuaFuGameServer)
     {
         if (unionID > 0)
         {
             if (isDel)
             {
                 if (this.IsAllyOpen(unionLevel))
                 {
                     EAlly result = AllyClient.getInstance().HUnionDel(unionID);
                     if (result != EAlly.Succ)
                     {
                         LogManager.WriteLog(LogTypes.Error, string.Format("战盟结盟:战盟{0}解散失败 id={1}", unionID, result), null, true);
                     }
                 }
             }
             else
             {
                 BangHuiDetailData unionData = Global.GetBangHuiDetailData(-1, unionID, serverID);
                 if (unionData != null && this.IsAllyOpen(unionData.QiLevel))
                 {
                     AllyData data = new AllyData();
                     data.UnionID     = unionData.BHID;
                     data.UnionZoneID = unionData.ZoneID;
                     data.UnionName   = unionData.BHName;
                     data.UnionLevel  = unionData.QiLevel;
                     data.UnionNum    = unionData.TotalNum;
                     data.LeaderID    = unionData.BZRoleID;
                     data.LeaderName  = unionData.BZRoleName;
                     SafeClientData clientData = Global.GetSafeClientDataFromLocalOrDB(data.LeaderID);
                     if (null != clientData)
                     {
                         data.LeaderZoneID = clientData.ZoneID;
                     }
                     else
                     {
                         data.LeaderZoneID = unionData.ZoneID;
                     }
                     EAlly result = AllyClient.getInstance().HUnionDataChange(data);
                     if (result != EAlly.Succ)
                     {
                         LogManager.WriteLog(LogTypes.Error, string.Format("战盟结盟:战盟数据变更失败 id={0}", result), null, true);
                     }
                 }
             }
         }
     }
 }
예제 #7
0
        private bool UnionIsAlly(int unionID, int targetID)
        {
            lock (_Mutex)
            {
                List<AllyData> list = AllyList(unionID);
                if (list!=null && list.Count>0)
                {
                    AllyData resultData = list.Find(
                                     delegate(AllyData data) { return data.UnionID == targetID; });

                    if (resultData != null) return true;
                }

                return false;
            }
        }
예제 #8
0
 public EAlly HAllyRequest(int unionID, int zoneID, string unionName)
 {
     try
     {
         lock (this._Mutex)
         {
             if (!this.VersionIsEqual())
             {
                 this._unionDic.Clear();
                 this._allyDic.Clear();
                 this._requestDic.Clear();
                 this._acceptDic.Clear();
                 this._CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyStartGameEvent(), 10004);
                 return(EAlly.EFail);
             }
             IAllyService kuaFuService = this.GetKuaFuService(false);
             if (null == kuaFuService)
             {
                 return(EAlly.EServer);
             }
             try
             {
                 AllyData d = kuaFuService.AllyRequest(this._ClientInfo.ServerId, unionID, zoneID, unionName);
                 if (d.LogState == 1)
                 {
                     List <AllyData> list = null;
                     if (!this._requestDic.TryGetValue(unionID, out list))
                     {
                         list = new List <AllyData>();
                         this._requestDic.TryAdd(unionID, list);
                     }
                     list.Add(d);
                     return((EAlly)d.LogState);
                 }
             }
             catch (Exception ex)
             {
                 this.ResetKuaFuService();
             }
         }
     }
     catch (Exception ex)
     {
         LogManager.WriteExceptionUseCache(ex.ToString());
     }
     return(EAlly.EAllyRequest);
 }
예제 #9
0
        public List<AllyData> AllyAcceptList(int unionID)
        {
            lock (_Mutex)
            {
                List<KFAllyData> acceptList = InitAllyAcceptList(unionID);

                List<AllyData> list = new List<AllyData>();
                foreach (KFAllyData rData in acceptList)
                {
                    AllyData d = new AllyData();
                    d.Copy(rData);
                    list.Add(d);
                }

                return list;
            }
        }
예제 #10
0
        public void UnionDataChange(int unionID, int serverID, bool isDel = false, int unionLevel = 0)
        {
            if (unionID <= 0)
            {
                return;
            }

            if (isDel)
            {
                if (!IsAllyOpen(unionLevel))
                {
                    return;
                }
                EAlly result = AllyClient.getInstance().HUnionDel(unionID);
                if (result != EAlly.Succ)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("战盟结盟:战盟{0}解散失败 id={1}", unionID, result));
                }
            }
            else
            {
                BangHuiDetailData unionData = Global.GetBangHuiDetailData(-1, unionID, serverID);
                if (unionData == null || !IsAllyOpen(unionData.QiLevel))
                {
                    return;
                }

                AllyData data = new AllyData();
                data.UnionID     = unionData.BHID;
                data.UnionZoneID = unionData.ZoneID;
                data.UnionName   = unionData.BHName;
                data.UnionLevel  = unionData.QiLevel;
                data.UnionNum    = unionData.TotalNum;
                data.LeaderID    = unionData.BZRoleID;
                data.LeaderName  = unionData.BZRoleName;

                var clientData = Global.GetSafeClientDataFromLocalOrDB(data.LeaderID);
                data.LeaderZoneID = clientData.ZoneID;

                EAlly result = AllyClient.getInstance().HUnionDataChange(data);
                if (result != EAlly.Succ)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("战盟结盟:战盟数据变更失败 id={0}", result));
                }
            }
        }
예제 #11
0
        public EAlly HUnionDataChange(AllyData unionData)
        {
            EAlly result = EAlly.EFail;

            try
            {
                lock (this._Mutex)
                {
                    IAllyService kuaFuService = this.GetKuaFuService(false);
                    if (null == kuaFuService)
                    {
                        return(result);
                    }
                    try
                    {
                        result = (EAlly)kuaFuService.UnionDataChange(this._ClientInfo.ServerId, unionData);
                        if (result == EAlly.Succ)
                        {
                            int      unionID = unionData.UnionID;
                            DateTime oldTime;
                            if (this._unionDic.TryGetValue(unionID, out oldTime))
                            {
                                this._unionDic[unionID] = TimeUtil.NowDateTime();
                                return(EAlly.Succ);
                            }
                            this._unionDic.TryAdd(unionID, TimeUtil.NowDateTime());
                            this.HAllyDataList(unionID, EAllyDataType.Ally);
                            this.HAllyDataList(unionID, EAllyDataType.Request);
                            this.HAllyDataList(unionID, EAllyDataType.Accept);
                        }
                    }
                    catch (Exception ex)
                    {
                        this.ResetKuaFuService();
                    }
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteExceptionUseCache(ex.ToString());
            }
            return(result);
        }
예제 #12
0
        public bool UnionIsAccept(int unionID, int zoneID, string unionName)
        {
            bool result;

            lock (this._Mutex)
            {
                List <AllyData> list = null;
                if (this._acceptDic.TryGetValue(unionID, out list))
                {
                    AllyData resultData = list.Find((AllyData data) => data.UnionZoneID == zoneID && data.UnionName == unionName);
                    if (resultData != null)
                    {
                        return(true);
                    }
                }
                result = false;
            }
            return(result);
        }
예제 #13
0
        public bool UnionIsAccept(int unionID, int zoneID, string unionName)
        {
            lock (_Mutex)
            {
                List <AllyData> list = null;
                if (_acceptDic.TryGetValue(unionID, out list))
                {
                    AllyData resultData = list.Find(
                        delegate(AllyData data) { return(data.UnionZoneID == zoneID && data.UnionName == unionName); });

                    if (resultData != null)
                    {
                        return(true);
                    }
                }

                return(false);
            }
        }
예제 #14
0
        public bool UnionIsAlly(GameClient client, int targetID)
        {
            lock (AllyClient.getInstance()._Mutex)
            {
                if (client.ClientData.AllyList == null || client.ClientData.AllyList.Count <= 0)
                {
                    return(false);
                }

                AllyData resultData = client.ClientData.AllyList.Find(
                    delegate(AllyData data) { return(data.UnionID == targetID); });

                bool isAllyMap = IsAllyMap(client.ClientData.MapCode);

                if (resultData != null && isAllyMap)
                {
                    return(true);
                }
                return(false);
            }
        }
예제 #15
0
        public AllyData AllyRequest(int serverID, int unionID, int zoneID, string unionName)
        {
            lock (_Mutex)
            {
                AllyData clientRequest = new AllyData();
                if (!IsAgent(serverID))
                {
                    clientRequest.LogState = (int)EAlly.EServer;
                    return clientRequest;
                }

                KFAllyData targetData = GetUnionData(zoneID, unionName);
                if (targetData == null)
                {
                    clientRequest.LogState = (int)EAlly.EName;
                    return clientRequest;
                }

                InitAllyIDList(targetData.UnionID);
                InitAllyRequestList(targetData.UnionID);
                InitAllyAcceptList(targetData.UnionID);

                if (UnionIsAlly(unionID, targetData.UnionID))
                {
                    clientRequest.LogState = (int)EAlly.EIsAlly;
                    return clientRequest;
                }

                if (UnionIsRequest(unionID, targetData.UnionID) || UnionIsAccept(targetData.UnionID, unionID))
                {
                    clientRequest.LogState = (int)EAlly.EMore;
                    return clientRequest;
                }

                int sum = _allyDic[unionID].Count + _requestDic[unionID].Count;
                if (sum >= Consts.AllyNumMax)
                {
                    clientRequest.LogState = (int)EAlly.EAllyMax;
                    return clientRequest;
                }

                DateTime logTime = DateTime.Now;
                int logState = (int)EAlly.AllyRequestSucc;
                bool isAdd = AllyPersistence.Instance.DBAllyRequestAdd(unionID, targetData.UnionID, logTime, logState);
                if (!isAdd)
                {
                    clientRequest.LogState = (int)EAlly.EAllyRequest;
                    return clientRequest;
                }
                //my
                KFAllyData myData = GetUnionData(unionID);

                AllyLogData logData = new AllyLogData();
                logData.UnionID = targetData.UnionID;
                logData.UnionZoneID = targetData.UnionZoneID;
                logData.UnionName = targetData.UnionName;
                logData.MyUnionID = unionID;
                logData.LogTime = logTime;
                logData.LogState = logState;
                ClientAgentManager.Instance().PostAsyncEvent(serverID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyLog, unionID, new List<AllyLogData>() { logData }));


                KFAllyData requestData = new KFAllyData();
                requestData.Copy(targetData);
                requestData.LogState = logState;
                requestData.LogTime = logTime;
                requestData.UpdateLogtime();

                AllyRequestAdd(unionID, requestData);

                clientRequest.Copy(requestData);
                // ClientAgentManager.Instance().PostAsyncEvent(serverID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyRequest, unionID, clientRequest));

                //target
                KFAllyData acceptData = new KFAllyData();
                acceptData.Copy(myData);
                acceptData.LogState = logState;
                acceptData.LogTime = logTime;
                AllyAcceptAdd(targetData.UnionID, acceptData);

                if (IsAgent(targetData.ServerID))
                {
                    AllyData clientAccept = new AllyData();
                    clientAccept.Copy(acceptData);
                    ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyAccept, targetData.UnionID, clientAccept));
                }

                return clientRequest;
            }
        }
예제 #16
0
        public EAlly HAllyOperate(int unionID, int targetID, EAllyOperate operateType)
        {
            EAlly result = EAlly.EFail;

            try
            {
                lock (_Mutex)
                {
                    if (!VersionIsEqual())
                    {
                        _unionDic.Clear();
                        _allyDic.Clear();
                        _requestDic.Clear();
                        _acceptDic.Clear();

                        _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyStartGameEvent(), (int)_sceneType);
                        return(result);
                    }

                    ConcurrentDictionary <int, List <AllyData> > dic = null;
                    switch (operateType)
                    {
                    case EAllyOperate.Agree:
                    case EAllyOperate.Refuse:
                        dic = _acceptDic;
                        break;

                    case EAllyOperate.Cancel:
                        dic = _requestDic;
                        break;

                    case EAllyOperate.Remove:
                        dic = _allyDic;
                        break;
                    }

                    List <AllyData> list = null;
                    if (!dic.TryGetValue(unionID, out list))
                    {
                        return(EAlly.ENoTargetUnion);
                    }

                    AllyData targetData = dic[unionID].Find(
                        delegate(AllyData data) { return(data.UnionID == targetID); });
                    if (targetData == null)
                    {
                        return(EAlly.ENoTargetUnion);
                    }

                    IAllyService kuaFuService = GetKuaFuService();
                    if (null == kuaFuService)
                    {
                        return(EAlly.EServer);
                    }

                    try
                    {
                        result = (EAlly)kuaFuService.AllyOperate(_ClientInfo.ServerId, unionID, targetID, (int)operateType);
                        if (result == EAlly.AllyAgree || result == EAlly.AllyRefuse ||
                            result == EAlly.AllyCancelSucc || result == EAlly.AllyRemoveSucc)
                        {
                            dic[unionID].Remove(targetData);
                        }
                    }
                    catch (System.Exception ex)
                    {
                        ResetKuaFuService();
                    }
                }
            }
            catch (System.Exception ex)
            {
                LogManager.WriteExceptionUseCache(ex.ToString());
            }

            return(result);
        }
예제 #17
0
        public int UnionDataChange(int serverID, AllyData newData)
        {
            if (!IsAgent(serverID)) return (int)EAlly.EServer;

            lock (_Mutex)
            {
                //获取老的数据,更新状态,logtime
                KFAllyData kfData = new KFAllyData();
                kfData.Copy(newData);
                kfData.LogTime = DateTime.Now;
                kfData.ServerID = serverID;
                kfData.UpdateLogtime();

                bool result = AllyPersistence.Instance.DBUnionDataUpdate(kfData);
                if (!result) return (int)EAlly.EFail;

                KFAllyData oldData;
                if (_unionDic.TryGetValue(kfData.UnionID, out oldData))
                    _unionDic[kfData.UnionID] = kfData;
                else
                    _unionDic.TryAdd(kfData.UnionID, kfData);             

                //结盟数据
                List<int> oldAllyIDList;
                if (_allyDic.TryGetValue(kfData.UnionID, out oldAllyIDList))
                {
                    AllyData myData = new AllyData();
                    myData.Copy(kfData);
                    myData.LogState = (int)EAlly.AllyAgree;

                    foreach (int id in oldAllyIDList)
                    {
                        KFAllyData targetData = GetUnionData(id);
                        if (IsAgent(targetData.ServerID))
                            ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyUnionUpdate, targetData.UnionID, myData));
                    }
                }

                AllyData myData2 = new AllyData();
                myData2.Copy(kfData);
                myData2.LogState = (int)EAlly.AllyRequestSucc;
                //结盟请求
                List<KFAllyData> rList = null;
                if (_requestDic.TryGetValue(kfData.UnionID, out rList))
                {     
                    foreach (KFAllyData targetData in rList)
                    {
                        List<KFAllyData> raList = null;
                        if (IsAgent(targetData.ServerID) && _acceptDic.TryGetValue(targetData.UnionID, out raList))
                        {
                            KFAllyData oldAData = GetAcceptData(targetData.UnionID, kfData.UnionID);
                            if (oldAData != null)
                            {
                                raList.Remove(oldAData);
                                raList.Add(kfData);
                                ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyUnionUpdate, targetData.UnionID, myData2));
                            }
                        } 
                    }
                }

                //接受请求
                List<KFAllyData> aList = null;
                if (_acceptDic.TryGetValue(kfData.UnionID, out aList))
                {
                    foreach (KFAllyData targetData in aList)
                    {
                        List<KFAllyData> arList = null;
                        if (IsAgent(targetData.ServerID) && _requestDic.TryGetValue(targetData.UnionID, out arList))
                        {
                            KFAllyData oldRData = GetRequestData(targetData.UnionID, kfData.UnionID);
                            if (oldRData != null)
                            {
                                arList.Remove(oldRData);
                                arList.Add(kfData);
                                ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyUnionUpdate, targetData.UnionID, myData2));
                            }
                        }
                    }
                }

                return (int)EAlly.Succ;
            }
        }
예제 #18
0
        public void EventCallBackHandler(int eventType, params object[] args)
        {
            try
            {
                lock (_Mutex)
                {
                    List <AllyData> list = null;
                    AllyData        data = null;
                    switch (eventType)
                    {
                    case (int)KuaFuEventTypes.AllyLog:
                    {
                        if (args.Length == 2)
                        {
                            List <AllyLogData> logList = (List <AllyLogData>)args[1];
                            _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyLogGameEvent(logList), (int)_sceneType);
                        }
                    }
                    break;

                    case (int)KuaFuEventTypes.Ally:
                    {
                        if (args.Length == 3)
                        {
                            int      unionID  = (int)args[0];
                            AllyData target   = (AllyData)args[1];
                            bool     isTipMsg = (bool)args[2];

                            if (!_allyDic.TryGetValue(unionID, out list))
                            {
                                list = new List <AllyData>()
                                {
                                };
                                _allyDic.TryAdd(unionID, list);
                            }

                            AllyData oldData = GetAllyData(unionID, target.UnionID);
                            if (oldData == null)
                            {
                                list.Add(target);
                                _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyGameEvent(unionID), (int)_sceneType);
                                if (isTipMsg)
                                {
                                    _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyTipGameEvent(unionID, (int)ActivityTipTypes.AllyMsg), (int)_sceneType);
                                }
                            }
                        }
                    }
                    break;

                    case (int)KuaFuEventTypes.KFAlly:
                    {
                        if (args.Length == 2)
                        {
                            AllyData unionData  = (AllyData)args[0];
                            AllyData targetData = (AllyData)args[1];

                            if (!_allyDic.TryGetValue(unionData.UnionID, out list))
                            {
                                list = new List <AllyData>()
                                {
                                };
                                _allyDic.TryAdd(unionData.UnionID, list);
                            }

                            AllyData oldData = GetAllyData(unionData.UnionID, targetData.UnionID);
                            if (oldData == null)
                            {
                                list.Add(targetData);
                                _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyGameEvent(unionData.UnionID), (int)_sceneType);
                            }

                            //
                            List <AllyData> list2 = null;
                            if (!_allyDic.TryGetValue(targetData.UnionID, out list2))
                            {
                                list2 = new List <AllyData>()
                                {
                                };
                                _allyDic.TryAdd(targetData.UnionID, list2);
                            }

                            oldData = GetAllyData(targetData.UnionID, unionData.UnionID);
                            if (oldData == null)
                            {
                                list2.Add(unionData);
                                _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyGameEvent(targetData.UnionID), (int)_sceneType);
                            }
                        }
                    }
                    break;

                    case (int)KuaFuEventTypes.AllyUnionUpdate:
                    {
                        if (args.Length == 2)
                        {
                            int      unionID    = (int)args[0];
                            AllyData targetData = (AllyData)args[1];

                            data = GetAllyData(unionID, targetData.UnionID);
                            if (data != null && _allyDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                list.Add(targetData);
                            }

                            data = GetRequestData(unionID, targetData.UnionID);
                            if (data != null && _requestDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                list.Add(data);
                            }

                            data = GetAcceptData(unionID, targetData.UnionID);
                            if (data != null && _acceptDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                list.Add(data);
                            }
                        }
                    }
                    break;

                    case (int)KuaFuEventTypes.AllyRemove:
                    {
                        if (args.Length == 2)
                        {
                            int unionID  = (int)args[0];
                            int targetID = (int)args[1];

                            data = GetAllyData(unionID, targetID);
                            if (data != null && _allyDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyTipGameEvent(unionID, (int)ActivityTipTypes.AllyMsg), (int)_sceneType);
                                _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyGameEvent(unionID), (int)_sceneType);
                            }
                        }
                    }
                    break;

                    case (int)KuaFuEventTypes.KFAllyRemove:
                    {
                        if (args.Length == 2)
                        {
                            int unionID  = (int)args[0];
                            int targetID = (int)args[1];

                            data = GetAllyData(unionID, targetID);
                            if (data != null && _allyDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyGameEvent(unionID), (int)_sceneType);
                            }

                            AllyData        data2 = GetAllyData(targetID, unionID);
                            List <AllyData> list2 = null;
                            if (data2 != null && _allyDic.TryGetValue(targetID, out list2))
                            {
                                list2.Remove(data2);
                                _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyGameEvent(targetID), (int)_sceneType);
                            }
                        }
                    }
                    break;

                    case (int)KuaFuEventTypes.AllyAccept:
                    {
                        if (args.Length == 2)
                        {
                            int      unionID = (int)args[0];
                            AllyData target  = (AllyData)args[1];

                            if (!_acceptDic.TryGetValue(unionID, out list))
                            {
                                list = new List <AllyData>()
                                {
                                };
                                _acceptDic.TryAdd(unionID, list);
                            }

                            AllyData oldData = GetAcceptData(unionID, target.UnionID);
                            if (oldData == null)
                            {
                                list.Add(target);
                                _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyTipGameEvent(unionID, (int)ActivityTipTypes.AllyAccept), (int)_sceneType);
                            }
                        }
                    }
                    break;

                    case (int)KuaFuEventTypes.AllyAcceptRemove:
                    {
                        if (args.Length == 2)
                        {
                            int unionID  = (int)args[0];
                            int targetID = (int)args[1];

                            data = GetAcceptData(unionID, targetID);
                            if (data != null && _acceptDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyTipGameEvent(unionID, (int)ActivityTipTypes.AllyAccept), (int)_sceneType);
                            }
                        }
                    }
                    break;

                    case (int)KuaFuEventTypes.AllyRequest:
                    {
                        if (args.Length == 2)
                        {
                            int      unionID = (int)args[0];
                            AllyData target  = (AllyData)args[1];

                            if (!_requestDic.TryGetValue(unionID, out list))
                            {
                                list = new List <AllyData>()
                                {
                                };
                                _requestDic.TryAdd(unionID, list);
                            }

                            AllyData oldData = GetRequestData(unionID, target.UnionID);
                            if (oldData == null)
                            {
                                list.Add(target);
                            }
                        }
                    }
                    break;

                    case (int)KuaFuEventTypes.AllyRequestRemove:
                    {
                        if (args.Length == 2)
                        {
                            int unionID  = (int)args[0];
                            int targetID = (int)args[1];

                            data = GetRequestData(unionID, targetID);
                            if (data != null && _requestDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                _CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyTipGameEvent(unionID, (int)ActivityTipTypes.AllyMsg), (int)_sceneType);
                            }
                        }
                    }
                    break;
                    }
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteExceptionUseCache(ex.ToString());
            }
        }
예제 #19
0
        //Agree
        public int OperateAgree(int serverID, int unionID, int targetID)
        {
            lock (_Mutex)
            {
                KFAllyData targetData = GetUnionData(targetID);
                if (targetData == null) return (int)EAlly.ENoTargetUnion;

                if (!UnionIsAccept(unionID, targetID)) return (int)EAlly.EFail;
                if (!UnionIsRequest(targetID, unionID)) return (int)EAlly.EFail;

                //num
                int sum = _allyDic[unionID].Count + _requestDic[unionID].Count;
                if (sum >= Consts.AllyNumMax) return (int)EAlly.EAllyMax;

                DateTime logTime = DateTime.Now;
                int logState = (int)EAlly.AllyAgree;

                bool isDB = AllyPersistence.Instance.DBAllyRequestDel(targetID, unionID);
                if (!isDB) return (int)EAlly.EFail;

                isDB = AllyPersistence.Instance.DBAllyAdd(unionID, targetID, logTime);
                if (!isDB) return (int)EAlly.EFail;

                //my
                KFAllyData aData = GetAcceptData(unionID, targetID);
                _acceptDic[unionID].Remove(aData);
                ClientAgentManager.Instance().PostAsyncEvent(serverID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyAcceptRemove, unionID, targetID));

                _allyDic[unionID].Add(targetID);
                aData.LogTime = logTime;
                aData.LogState = logState;

                AllyData clientMy = new AllyData();
                clientMy.Copy(aData);
                ClientAgentManager.Instance().PostAsyncEvent(serverID, _gameType, new AsyncDataItem(KuaFuEventTypes.Ally, unionID, clientMy, false));

                //target
                if (_requestDic.ContainsKey(targetID))
                {
                    KFAllyData rData = GetRequestData(targetID, unionID);
                    _requestDic[targetID].Remove(rData);
                }

                if (_allyDic.ContainsKey(targetID)) _allyDic[targetID].Add(unionID);

                KFAllyData myData = GetUnionData(unionID);
                myData.LogTime = logTime;
                myData.LogState = logState;

                AllyLogData logData = new AllyLogData();
                logData.UnionID = myData.UnionID;
                logData.UnionZoneID = myData.UnionZoneID;
                logData.UnionName = myData.UnionName;
                logData.MyUnionID = targetID;
                logData.LogTime = logTime;
                logData.LogState = (int)EAlly.AllyAgreeOther;

                AllyData clientTarget = new AllyData();
                clientTarget.Copy(myData);

                if (IsAgent(targetData.ServerID))
                {                             
                    ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.Ally, targetID, clientTarget, true));
                    ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyRequestRemove, targetID, unionID));
                    ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyLog, targetID, new List<AllyLogData>() { logData }));
                }
                else
                {
                    AllyPersistence.Instance.DBAllyLogAdd(logData);
                }

                ClientAgentManager.Instance().KFBroadCastAsyncEvent(_gameType, new AsyncDataItem(KuaFuEventTypes.KFAlly, clientMy, clientTarget));
                return (int)EAlly.AllyAgree;
            }
        }
예제 #20
0
        public void EventCallBackHandler(AsyncDataItem item)
        {
            try
            {
                int      eventType = (int)item.EventType;
                object[] args      = item.Args;
                lock (this._Mutex)
                {
                    List <AllyData> list = null;
                    switch (eventType)
                    {
                    case 10016:
                        if (args.Length == 2)
                        {
                            List <AllyLogData> logList = (List <AllyLogData>)args[1];
                            this._CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyLogGameEvent(logList), 10004);
                        }
                        break;

                    case 10017:
                        if (args.Length == 3)
                        {
                            int      unionID  = (int)args[0];
                            AllyData target   = (AllyData)args[1];
                            bool     isTipMsg = (bool)args[2];
                            if (!this._allyDic.TryGetValue(unionID, out list))
                            {
                                list = new List <AllyData>();
                                this._allyDic.TryAdd(unionID, list);
                            }
                            AllyData oldData = this.GetAllyData(unionID, target.UnionID);
                            if (oldData == null)
                            {
                                list.Add(target);
                                this._CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyGameEvent(unionID), 10004);
                                if (isTipMsg)
                                {
                                    this._CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyTipGameEvent(unionID, 14113), 10004);
                                }
                            }
                        }
                        break;

                    case 10018:
                        if (args.Length == 2)
                        {
                            int      unionID  = (int)args[0];
                            int      targetID = (int)args[1];
                            AllyData data     = this.GetAllyData(unionID, targetID);
                            if (data != null && this._allyDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                this._CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyTipGameEvent(unionID, 14113), 10004);
                                this._CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyGameEvent(unionID), 10004);
                            }
                        }
                        break;

                    case 10019:
                        if (args.Length == 2)
                        {
                            int      unionID = (int)args[0];
                            AllyData target  = (AllyData)args[1];
                            if (!this._acceptDic.TryGetValue(unionID, out list))
                            {
                                list = new List <AllyData>();
                                this._acceptDic.TryAdd(unionID, list);
                            }
                            AllyData oldData = this.GetAcceptData(unionID, target.UnionID);
                            if (oldData == null)
                            {
                                list.Add(target);
                                this._CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyTipGameEvent(unionID, 14112), 10004);
                            }
                        }
                        break;

                    case 10020:
                        if (args.Length == 2)
                        {
                            int      unionID  = (int)args[0];
                            int      targetID = (int)args[1];
                            AllyData data     = this.GetAcceptData(unionID, targetID);
                            if (data != null && this._acceptDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                this._CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyTipGameEvent(unionID, 14112), 10004);
                            }
                        }
                        break;

                    case 10021:
                        if (args.Length == 2)
                        {
                            int      unionID = (int)args[0];
                            AllyData target  = (AllyData)args[1];
                            if (!this._requestDic.TryGetValue(unionID, out list))
                            {
                                list = new List <AllyData>();
                                this._requestDic.TryAdd(unionID, list);
                            }
                            AllyData oldData = this.GetRequestData(unionID, target.UnionID);
                            if (oldData == null)
                            {
                                list.Add(target);
                            }
                        }
                        break;

                    case 10022:
                        if (args.Length == 2)
                        {
                            int      unionID  = (int)args[0];
                            int      targetID = (int)args[1];
                            AllyData data     = this.GetRequestData(unionID, targetID);
                            if (data != null && this._requestDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                this._CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyTipGameEvent(unionID, 14113), 10004);
                            }
                        }
                        break;

                    case 10023:
                        if (args.Length == 2)
                        {
                            int      unionID    = (int)args[0];
                            AllyData targetData = (AllyData)args[1];
                            AllyData data       = this.GetAllyData(unionID, targetData.UnionID);
                            if (data != null && this._allyDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                list.Add(targetData);
                            }
                            data = this.GetRequestData(unionID, targetData.UnionID);
                            if (data != null && this._requestDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                list.Add(data);
                            }
                            data = this.GetAcceptData(unionID, targetData.UnionID);
                            if (data != null && this._acceptDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                list.Add(data);
                            }
                        }
                        break;

                    case 10024:
                        if (args.Length == 2)
                        {
                            AllyData unionData  = (AllyData)args[0];
                            AllyData targetData = (AllyData)args[1];
                            if (!this._allyDic.TryGetValue(unionData.UnionID, out list))
                            {
                                list = new List <AllyData>();
                                this._allyDic.TryAdd(unionData.UnionID, list);
                            }
                            AllyData oldData = this.GetAllyData(unionData.UnionID, targetData.UnionID);
                            if (oldData == null)
                            {
                                list.Add(targetData);
                                this._CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyGameEvent(unionData.UnionID), 10004);
                            }
                            List <AllyData> list2 = null;
                            if (!this._allyDic.TryGetValue(targetData.UnionID, out list2))
                            {
                                list2 = new List <AllyData>();
                                this._allyDic.TryAdd(targetData.UnionID, list2);
                            }
                            oldData = this.GetAllyData(targetData.UnionID, unionData.UnionID);
                            if (oldData == null)
                            {
                                list2.Add(unionData);
                                this._CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyGameEvent(targetData.UnionID), 10004);
                            }
                        }
                        break;

                    case 10025:
                        if (args.Length == 2)
                        {
                            int      unionID  = (int)args[0];
                            int      targetID = (int)args[1];
                            AllyData data     = this.GetAllyData(unionID, targetID);
                            if (data != null && this._allyDic.TryGetValue(unionID, out list))
                            {
                                list.Remove(data);
                                this._CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyGameEvent(unionID), 10004);
                            }
                            AllyData        data2 = this.GetAllyData(targetID, unionID);
                            List <AllyData> list2 = null;
                            if (data2 != null && this._allyDic.TryGetValue(targetID, out list2))
                            {
                                list2.Remove(data2);
                                this._CoreInterface.GetEventSourceInterface().fireEvent(new KFNotifyAllyGameEvent(targetID), 10004);
                            }
                        }
                        break;

                    case 10026:
                        if (args.Length == 1)
                        {
                            KFRankData rankData = (KFRankData)args[0];
                            lock (this._lockRank)
                            {
                                if (!this._rankDic.ContainsKey(rankData.RankType))
                                {
                                    this._rankDic.Add(rankData.RankType, new Dictionary <int, KFRankData>());
                                }
                                Dictionary <int, KFRankData> dic = this._rankDic[rankData.RankType];
                                if (dic.ContainsKey(rankData.RoleID))
                                {
                                    dic[rankData.RoleID] = rankData;
                                }
                                else
                                {
                                    dic.Add(rankData.RoleID, rankData);
                                }
                            }
                        }
                        break;

                    case 10027:
                        if (args.Length == 3)
                        {
                            int rankType            = (int)args[0];
                            int RankRefreshSpanType = (int)args[1];
                            lock (this._lockRank)
                            {
                                List <KFRankData> topList = (List <KFRankData>)args[2];
                                if (!this._rankTopDic.ContainsKey(rankType))
                                {
                                    this._rankTopDic.Add(rankType, new List <KFRankData>());
                                }
                                this._rankTopDic[rankType] = topList;
                                if (1 == RankRefreshSpanType && this._rankDic.ContainsKey(rankType))
                                {
                                    this._rankDic[rankType].Clear();
                                }
                            }
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteExceptionUseCache(ex.ToString());
            }
        }