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); }
/// <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); }