示例#1
0
        public static MarryResult MarryDivorce(GameClient client, MarryDivorceType divorceType)
        {
            MarryResult result;

            if (!MarryLogic.IsVersionSystemOpenOfMarriage())
            {
                result = MarryResult.NotOpen;
            }
            else if (0 >= client.ClientData.MyMarriageData.byMarrytype)
            {
                result = MarryResult.NotMarried;
            }
            else if (!SingletonTemplate <CoupleArenaManager> .Instance().IsNowCanDivorce(TimeUtil.NowDateTime()))
            {
                result = MarryResult.DeniedByCoupleAreanTime;
            }
            else
            {
                int        spouseID     = client.ClientData.MyMarriageData.nSpouseID;
                GameClient spouseClient = GameManager.ClientMgr.FindClient(spouseID);
                if (divorceType == MarryDivorceType.DivorceForce || divorceType == MarryDivorceType.DivorceFree || divorceType == MarryDivorceType.DivorceFreeAccept)
                {
                    if (client.ClientData.ExchangeID > 0 || client.ClientSocket.IsKuaFuLogin || client.ClientData.CopyMapID > 0)
                    {
                        return(MarryResult.SelfBusy);
                    }
                    if (-1 != client.ClientData.FuBenID && MapTypes.MarriageCopy == Global.GetMapType(client.ClientData.MapCode))
                    {
                        return(MarryResult.SelfBusy);
                    }
                    if (null != spouseClient)
                    {
                        if (-1 != spouseClient.ClientData.FuBenID && MapTypes.MarriageCopy == Global.GetMapType(spouseClient.ClientData.MapCode))
                        {
                            return(MarryResult.TargetBusy);
                        }
                    }
                    if (divorceType == MarryDivorceType.DivorceForce || divorceType == MarryDivorceType.DivorceFree)
                    {
                        if (MarryLogic.ApplyExist(client.ClientData.RoleID))
                        {
                            return(MarryResult.SelfBusy);
                        }
                    }
                }
                int _man  = client.ClientData.RoleID;
                int _wife = spouseID;
                if (client.ClientData.MyMarriageData.byMarrytype == 2)
                {
                    DataHelper2.Swap <int>(ref _man, ref _wife);
                }
                if (divorceType == MarryDivorceType.DivorceForce)
                {
                    if (client.ClientData.UserMoney < MarryLogic.DivorceForceCost)
                    {
                        return(MarryResult.MoneyNotEnough);
                    }
                    if (!SingletonTemplate <CoupleWishManager> .Instance().PreClearDivorceData(_man, _wife))
                    {
                        return(MarryResult.NotOpen);
                    }
                    if (!SingletonTemplate <CoupleArenaManager> .Instance().PreClearDivorceData(_man, _wife))
                    {
                        return(MarryResult.NotOpen);
                    }
                    if (!GameManager.ClientMgr.SubUserMoney(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, MarryLogic.DivorceForceCost, "强制离婚", false, true, false, DaiBiSySType.None))
                    {
                    }
                    client.ClientData.MyMarriageData.byMarrytype = -1;
                    client.ClientData.MyMarriageData.nSpouseID   = -1;
                    MarryFuBenMgr.UpdateMarriageData2DB(client);
                    MarriageOtherLogic.getInstance().ResetRingAttr(client);
                    if (null != spouseClient)
                    {
                        spouseClient.ClientData.MyMarriageData.nSpouseID   = -1;
                        spouseClient.ClientData.MyMarriageData.byMarrytype = -1;
                        MarryFuBenMgr.UpdateMarriageData2DB(spouseClient);
                        MarriageOtherLogic.getInstance().ResetRingAttr(spouseClient);
                        MarriageOtherLogic.getInstance().SendMarriageDataToClient(spouseClient, true);
                        if (spouseClient._IconStateMgr.CheckJieRiFanLi(spouseClient, ActivityTypes.JieriMarriage))
                        {
                            spouseClient._IconStateMgr.AddFlushIconState(14000, spouseClient._IconStateMgr.IsAnyJieRiTipActived());
                            spouseClient._IconStateMgr.SendIconStateToClient(spouseClient);
                        }
                    }
                    else
                    {
                        string       tcpstring          = string.Format("{0}", spouseID);
                        MarriageData spouseMarriageData = Global.sendToDB <MarriageData, string>(10186, tcpstring, client.ServerId);
                        if (spouseMarriageData != null && 0 < spouseMarriageData.byMarrytype)
                        {
                            spouseMarriageData.byMarrytype = -1;
                            spouseMarriageData.nSpouseID   = -1;
                            MarryFuBenMgr.UpdateMarriageData2DB(spouseID, spouseMarriageData, client);
                        }
                    }
                    MarryPartyLogic.getInstance().MarryPartyRemove(client.ClientData.RoleID, true, client);
                    MarryPartyLogic.getInstance().MarryPartyRemove(spouseID, true, client);
                    MarriageOtherLogic.getInstance().SendMarriageDataToClient(client, true);
                    if (client._IconStateMgr.CheckJieRiFanLi(client, ActivityTypes.JieriMarriage))
                    {
                        client._IconStateMgr.AddFlushIconState(14000, client._IconStateMgr.IsAnyJieRiTipActived());
                        client._IconStateMgr.SendIconStateToClient(client);
                    }
                    string msg = string.Format(GLang.GetLang(486, new object[0]), client.ClientData.RoleName);
                    MarryLogic.SendDivorceMail(spouseID, GLang.GetLang(487, new object[0]), msg, spouseClient, client.ServerId);
                    SingletonTemplate <CoupleArenaManager> .Instance().OnDivorce(client.ClientData.RoleID, spouseID);
                }
                else if (divorceType == MarryDivorceType.DivorceFree)
                {
                    if (null == spouseClient)
                    {
                        return(MarryResult.TargetOffline);
                    }
                    if (spouseClient.ClientData.ExchangeID > 0 || spouseClient.ClientSocket.IsKuaFuLogin || spouseClient.ClientData.CopyMapID > 0)
                    {
                        return(MarryResult.TargetBusy);
                    }
                    if (Global.GetTotalBindTongQianAndTongQianVal(client) < MarryLogic.DivorceCost)
                    {
                        return(MarryResult.MoneyNotEnough);
                    }
                    if (!Global.SubBindTongQianAndTongQian(client, MarryLogic.DivorceCost, "申请离婚"))
                    {
                        return(MarryResult.MoneyNotEnough);
                    }
                    MarryLogic.AddMarryApply(client.ClientData.RoleID, MarryApplyType.ApplyDivorce, spouseID);
                    string notifyData = string.Format("{0}:{1}", client.ClientData.RoleID, 1);
                    spouseClient.sendCmd(892, notifyData, false);
                    SingletonTemplate <CoupleArenaManager> .Instance().OnSpouseRequestDivorce(spouseClient, client);
                }
                else
                {
                    if (null == spouseClient)
                    {
                        return(MarryResult.TargetOffline);
                    }
                    if (!MarryLogic.RemoveMarryApply(spouseID, MarryApplyType.ApplyDivorce))
                    {
                        return(MarryResult.ApplyTimeout);
                    }
                    MarryLogic.RemoveMarryApply(spouseID, MarryApplyType.ApplyNull);
                    if (divorceType == MarryDivorceType.DivorceFreeAccept)
                    {
                        if (SingletonTemplate <CoupleWishManager> .Instance().PreClearDivorceData(_man, _wife) && SingletonTemplate <CoupleArenaManager> .Instance().PreClearDivorceData(_man, _wife))
                        {
                            client.ClientData.MyMarriageData.byMarrytype       = -1;
                            client.ClientData.MyMarriageData.nSpouseID         = -1;
                            spouseClient.ClientData.MyMarriageData.byMarrytype = -1;
                            spouseClient.ClientData.MyMarriageData.nSpouseID   = -1;
                            MarryFuBenMgr.UpdateMarriageData2DB(client);
                            MarryFuBenMgr.UpdateMarriageData2DB(spouseClient);
                            MarriageOtherLogic.getInstance().SendMarriageDataToClient(client, true);
                            MarriageOtherLogic.getInstance().SendMarriageDataToClient(spouseClient, true);
                            MarriageOtherLogic.getInstance().ResetRingAttr(client);
                            MarriageOtherLogic.getInstance().ResetRingAttr(spouseClient);
                            MarryPartyLogic.getInstance().MarryPartyRemove(client.ClientData.RoleID, true, client);
                            MarryPartyLogic.getInstance().MarryPartyRemove(spouseID, true, client);
                            if (client._IconStateMgr.CheckJieRiFanLi(client, ActivityTypes.JieriMarriage))
                            {
                                client._IconStateMgr.AddFlushIconState(14000, client._IconStateMgr.IsAnyJieRiTipActived());
                                client._IconStateMgr.SendIconStateToClient(client);
                            }
                            if (spouseClient._IconStateMgr.CheckJieRiFanLi(spouseClient, ActivityTypes.JieriMarriage))
                            {
                                spouseClient._IconStateMgr.AddFlushIconState(14000, spouseClient._IconStateMgr.IsAnyJieRiTipActived());
                                spouseClient._IconStateMgr.SendIconStateToClient(spouseClient);
                            }
                            SingletonTemplate <CoupleArenaManager> .Instance().OnDivorce(client.ClientData.RoleID, spouseID);
                        }
                        else
                        {
                            GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, spouseClient, MarryLogic.DivorceCost, "自由离婚拒绝返还绑金", false);
                            GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(GLang.GetLang(488, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0);
                            GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, spouseClient, StringUtil.substitute(GLang.GetLang(488, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0);
                        }
                    }
                    else if (divorceType == MarryDivorceType.DivorceFreeReject)
                    {
                        GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, spouseClient, MarryLogic.DivorceCost, "自由离婚拒绝返还绑金", false);
                        string notifyData = string.Format("{0}:{1}", client.ClientData.RoleID, 3);
                        spouseClient.sendCmd(892, notifyData, false);
                    }
                }
                result = MarryResult.Success;
            }
            return(result);
        }
示例#2
0
        /// <summary>
        /// 离婚
        /// </summary>
        public static MarryResult MarryDivorce(GameClient client, MarryDivorceType divorceType)
        {
            if (!MarryLogic.IsVersionSystemOpenOfMarriage())
            {
                return(MarryResult.NotOpen);
            }

            if (0 >= client.ClientData.MyMarriageData.byMarrytype)
            {
                return(MarryResult.NotMarried);
            }

            if (!CoupleArenaManager.Instance().IsNowCanDivorce(TimeUtil.NowDateTime()))
            {
                return(MarryResult.DeniedByCoupleAreanTime);
            }

            int        spouseID     = client.ClientData.MyMarriageData.nSpouseID;
            GameClient spouseClient = GameManager.ClientMgr.FindClient(spouseID);

            if (divorceType == MarryDivorceType.DivorceForce || divorceType == MarryDivorceType.DivorceFree || divorceType == MarryDivorceType.DivorceFreeAccept)
            {
                if (client.ClientData.ExchangeID > 0 || true == client.ClientSocket.IsKuaFuLogin || client.ClientData.CopyMapID > 0)
                {
                    return(MarryResult.SelfBusy);
                }
                if (-1 != client.ClientData.FuBenID && MapTypes.MarriageCopy == Global.GetMapType(client.ClientData.MapCode))
                {
                    return(MarryResult.SelfBusy);
                }
                if (null != spouseClient)
                {
                    if (-1 != spouseClient.ClientData.FuBenID && MapTypes.MarriageCopy == Global.GetMapType(spouseClient.ClientData.MapCode))
                    {
                        return(MarryResult.TargetBusy);
                    }
                }

                if (divorceType == MarryDivorceType.DivorceForce || divorceType == MarryDivorceType.DivorceFree)
                {
                    if (true == ApplyExist(client.ClientData.RoleID))
                    {
                        return(MarryResult.SelfBusy);
                    }
                }
            }

            int _man = client.ClientData.RoleID, _wife = spouseID;

            if (client.ClientData.MyMarriageData.byMarrytype == 2)
            {
                DataHelper2.Swap(ref _man, ref _wife);;
            }

            if (divorceType == MarryDivorceType.DivorceForce)
            {
                if (client.ClientData.UserMoney < DivorceForceCost)
                {
                    return(MarryResult.MoneyNotEnough);
                }

                // 情侣竞技和情侣祝福都需要离婚清除数据,所以,可能会导致部分清除失败,由于竞技更要求数据的准确性,所以先清除情侣祝福,再清楚情侣竞技

                // 情侣祝福排行版通知清除排行数据
                // 必须保证先清除成功,才能强制离婚离婚
                if (!CoupleWishManager.Instance().PreClearDivorceData(_man, _wife))
                {
                    return(MarryResult.NotOpen);
                }

                // 情侣竞技通知中心竞技、排行数据,dbserver清除战报数据
                // 必须保证先清除成功,才能强制离婚离婚
                if (!CoupleArenaManager.Instance().PreClearDivorceData(_man, _wife))
                {
                    return(MarryResult.NotOpen);
                }

                //强制离婚
                if (false == GameManager.ClientMgr.SubUserMoney(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, DivorceForceCost, "强制离婚", false))
                {
                    // return MarryResult.MoneyNotEnough;
                }

                client.ClientData.MyMarriageData.byMarrytype = -1;
                client.ClientData.MyMarriageData.nSpouseID   = -1;
                MarryFuBenMgr.UpdateMarriageData2DB(client);
                MarriageOtherLogic.getInstance().ResetRingAttr(client);

                if (null != spouseClient)
                {
                    spouseClient.ClientData.MyMarriageData.nSpouseID   = -1;
                    spouseClient.ClientData.MyMarriageData.byMarrytype = -1;
                    MarryFuBenMgr.UpdateMarriageData2DB(spouseClient);
                    MarriageOtherLogic.getInstance().ResetRingAttr(spouseClient);

                    //[bing] 给配偶发送CMD_SPR_MARRY_UPDATE
                    MarriageOtherLogic.getInstance().SendMarriageDataToClient(spouseClient);

                    //[bing] 刷新客户端活动叹号
                    if (spouseClient._IconStateMgr.CheckJieRiFanLi(spouseClient, ActivityTypes.JieriMarriage) == true)
                    {
                        spouseClient._IconStateMgr.AddFlushIconState((ushort)ActivityTipTypes.JieRiActivity, spouseClient._IconStateMgr.IsAnyJieRiTipActived());
                        spouseClient._IconStateMgr.SendIconStateToClient(spouseClient);
                    }
                }
                else
                {
                    string       tcpstring          = string.Format("{0}", spouseID);
                    MarriageData spouseMarriageData = Global.sendToDB <MarriageData, string>((int)TCPGameServerCmds.CMD_DB_GET_MARRY_DATA, tcpstring, client.ServerId);

                    if (null != spouseMarriageData && 0 < spouseMarriageData.byMarrytype)
                    {
                        spouseMarriageData.byMarrytype = -1;
                        spouseMarriageData.nSpouseID   = -1;
                        MarryFuBenMgr.UpdateMarriageData2DB(spouseID, spouseMarriageData, client);
                    }
                }

                // 取消婚宴
                MarryPartyLogic.getInstance().MarryPartyRemove(client.ClientData.RoleID, true, client);
                MarryPartyLogic.getInstance().MarryPartyRemove(spouseID, true, client);

                //[bing] 给自己发送CMD_SPR_MARRY_UPDATE
                MarriageOtherLogic.getInstance().SendMarriageDataToClient(client);

                //[bing] 刷新客户端活动叹号
                if (client._IconStateMgr.CheckJieRiFanLi(client, ActivityTypes.JieriMarriage) == true)
                {
                    client._IconStateMgr.AddFlushIconState((ushort)ActivityTipTypes.JieRiActivity, client._IconStateMgr.IsAnyJieRiTipActived());
                    client._IconStateMgr.SendIconStateToClient(client);
                }

                // send mail
                string msg = string.Format(Global.GetLang("在您收到这封邮件的时候,您的伴侣{0}已经申请与您强制离婚,现在您已经恢复单身。您的定情信物将被封存,所有属性暂时失效,直至下次结婚时生效。最后,预祝您再次觅得真心人,相伴共度美好的游戏时光。感谢您阅读这封邮件。"), client.ClientData.RoleName);
                SendDivorceMail(spouseID, Global.GetLang("离婚"), msg, spouseClient, client.ServerId);

                CoupleArenaManager.Instance().OnDivorce(client.ClientData.RoleID, spouseID);
            }
            else if (divorceType == MarryDivorceType.DivorceFree)
            {
                //申请离婚
                if (null == spouseClient)
                {
                    return(MarryResult.TargetOffline);
                }
                if (spouseClient.ClientData.ExchangeID > 0 || true == spouseClient.ClientSocket.IsKuaFuLogin || spouseClient.ClientData.CopyMapID > 0)
                {
                    return(MarryResult.TargetBusy);
                }

                if (Global.GetTotalBindTongQianAndTongQianVal(client) < DivorceCost)
                {
                    return(MarryResult.MoneyNotEnough);
                }
                if (Global.SubBindTongQianAndTongQian(client, DivorceCost, "申请离婚") == false)
                {
                    return(MarryResult.MoneyNotEnough);
                }

                AddMarryApply(client.ClientData.RoleID, MarryApplyType.ApplyDivorce, spouseID);

                //发送离婚申请
                string notifyData = string.Format("{0}:{1}", client.ClientData.RoleID, (int)MarryDivorceType.DivorceFree);
                spouseClient.sendCmd((int)TCPGameServerCmds.CMD_SPR_MARRY_DIVORCE, notifyData);
                CoupleArenaManager.Instance().OnSpouseRequestDivorce(spouseClient, client);
            }
            else
            {
                if (null == spouseClient)
                {
                    return(MarryResult.TargetOffline);
                }

                if (RemoveMarryApply(spouseID, MarryApplyType.ApplyDivorce) == false)
                {
                    return(MarryResult.ApplyTimeout);
                }
                RemoveMarryApply(spouseID);

                if (divorceType == MarryDivorceType.DivorceFreeAccept)
                {
                    // 情侣竞技通知中心竞技、排行数据,dbserver清除战报数据
                    // 必须保证先清除成功,才能自由离婚
                    if (CoupleWishManager.Instance().PreClearDivorceData(_man, _wife) &&
                        CoupleArenaManager.Instance().PreClearDivorceData(_man, _wife))
                    {
                        client.ClientData.MyMarriageData.byMarrytype       = -1;
                        client.ClientData.MyMarriageData.nSpouseID         = -1;
                        spouseClient.ClientData.MyMarriageData.byMarrytype = -1;
                        spouseClient.ClientData.MyMarriageData.nSpouseID   = -1;

                        MarryFuBenMgr.UpdateMarriageData2DB(client);
                        MarryFuBenMgr.UpdateMarriageData2DB(spouseClient);

                        MarriageOtherLogic.getInstance().SendMarriageDataToClient(client);
                        MarriageOtherLogic.getInstance().SendMarriageDataToClient(spouseClient);

                        //更新婚戒属性
                        MarriageOtherLogic.getInstance().ResetRingAttr(client);
                        MarriageOtherLogic.getInstance().ResetRingAttr(spouseClient);

                        //取消婚宴
                        MarryPartyLogic.getInstance().MarryPartyRemove(client.ClientData.RoleID, true, client);
                        MarryPartyLogic.getInstance().MarryPartyRemove(spouseID, true, client);

                        //[bing] 刷新客户端活动叹号
                        if (client._IconStateMgr.CheckJieRiFanLi(client, ActivityTypes.JieriMarriage) == true)
                        {
                            client._IconStateMgr.AddFlushIconState((ushort)ActivityTipTypes.JieRiActivity, client._IconStateMgr.IsAnyJieRiTipActived());
                            client._IconStateMgr.SendIconStateToClient(client);
                        }
                        //[bing] 刷新客户端活动叹号
                        if (spouseClient._IconStateMgr.CheckJieRiFanLi(spouseClient, ActivityTypes.JieriMarriage) == true)
                        {
                            spouseClient._IconStateMgr.AddFlushIconState((ushort)ActivityTipTypes.JieRiActivity, spouseClient._IconStateMgr.IsAnyJieRiTipActived());
                            spouseClient._IconStateMgr.SendIconStateToClient(spouseClient);
                        }

                        CoupleArenaManager.Instance().OnDivorce(client.ClientData.RoleID, spouseID);
                    }
                    else
                    {
                        GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, spouseClient,
                                                        DivorceCost, "自由离婚拒绝返还绑金", false);
                        //GameManager.ClientMgr.AddUserYinLiang(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, spouseClient, DivorceCost, "自由离婚拒绝返还绑金");

                        Global.BroadcastRoleActionMsg(client, RoleActionsMsgTypes.HintMsg, "自由离婚操作失败", true, GameInfoTypeIndexes.Hot, ShowGameInfoTypes.OnlySysHint);
                        Global.BroadcastRoleActionMsg(spouseClient, RoleActionsMsgTypes.HintMsg, "自由离婚操作失败", true, GameInfoTypeIndexes.Hot, ShowGameInfoTypes.OnlySysHint);
                    }
                }
                else if (divorceType == MarryDivorceType.DivorceFreeReject)
                {
                    GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, spouseClient,
                                                    DivorceCost, "自由离婚拒绝返还绑金", false);
                    //GameManager.ClientMgr.AddUserYinLiang(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, spouseClient, DivorceCost, "自由离婚拒绝返还绑金");

                    //发送离婚拒绝讯息
                    string notifyData = string.Format("{0}:{1}", client.ClientData.RoleID, (int)MarryDivorceType.DivorceFreeReject);
                    spouseClient.sendCmd((int)TCPGameServerCmds.CMD_SPR_MARRY_DIVORCE, notifyData);
                }
            }

            return(MarryResult.Success);
        }