示例#1
0
        // TODO: client should send spouse id
        // 发送婚宴信息
        public void SendMarryPartyList(GameClient client, MarryPartyData partyData, int roleID = -1)
        {
            Dictionary <int, MarryPartyData> marryPartyList;

            if (partyData != null || roleID > 0)
            {
                if (partyData == null)
                {
                    // 获取指定角色婚宴数据
                    partyData = m_MarryPartyDataCache.GetParty(roleID);
                    if (partyData == null)
                    {
                        int SpouseID = MarryLogic.GetSpouseID(roleID);
                        partyData = m_MarryPartyDataCache.GetParty(SpouseID);
                        if (partyData == null)
                        {
                            // 返回空代表通知客戶端自己沒有婚宴
                            partyData = new MarryPartyData();
                        }
                    }
                }

                marryPartyList = new Dictionary <int, MarryPartyData>();
                marryPartyList.Add(roleID, partyData);

                client.sendCmd <Dictionary <int, MarryPartyData> >((int)TCPGameServerCmds.CMD_SPR_MARRY_PARTY_QUERY, marryPartyList);
            }
            else
            {
                // 获取全部婚宴列表
                client.sendCmd(m_MarryPartyDataCache.GetPartyList(TCPOutPacketPool.getInstance(), (int)TCPGameServerCmds.CMD_SPR_MARRY_PARTY_QUERY));
            }
        }
示例#2
0
        public MarryPartyData AddParty(int roleID, int partyType, long startTime, int husbandRoleID, int wifeRoleID, string husbandName, string wifeName)
        {
            MarryPartyData data = null;

            lock (MarryPartyList)
            {
                if (MarryPartyList.ContainsKey(husbandRoleID) == false &&
                    MarryPartyList.ContainsKey(wifeRoleID) == false)
                {
                    data = new MarryPartyData()
                    {
                        RoleID        = roleID,
                        PartyType     = partyType,
                        JoinCount     = 0,
                        StartTime     = startTime,
                        HusbandRoleID = husbandRoleID,
                        WifeRoleID    = wifeRoleID,
                        HusbandName   = husbandName,
                        WifeName      = wifeName,
                    };
                    MarryPartyList.Add(roleID, data);
                }
            }

            return(data);
        }
示例#3
0
 public void SendMarryPartyList(GameClient client, MarryPartyData partyData, int roleID = -1)
 {
     if (partyData != null || roleID > 0)
     {
         if (partyData == null)
         {
             partyData = this.m_MarryPartyDataCache.GetParty(roleID);
             if (partyData == null)
             {
                 int SpouseID = MarryLogic.GetSpouseID(roleID);
                 partyData = this.m_MarryPartyDataCache.GetParty(SpouseID);
                 if (partyData == null)
                 {
                     partyData = new MarryPartyData();
                 }
             }
         }
         client.sendCmd <Dictionary <int, MarryPartyData> >(880, new Dictionary <int, MarryPartyData>
         {
             {
                 roleID,
                 partyData
             }
         }, false);
     }
     else
     {
         client.sendCmd(this.m_MarryPartyDataCache.GetPartyList(TCPOutPacketPool.getInstance(), 880), true);
     }
 }
示例#4
0
        public bool IncPartyJoin(int roleid, int maxJoin, out bool remove)
        {
            remove = false;

            MarryPartyData data = null;

            lock (MarryPartyList)
            {
                bool ret = MarryPartyList.TryGetValue(roleid, out data);
                if (ret == true)
                {
                    if (data.JoinCount < maxJoin)
                    {
                        ++data.JoinCount;
                        if (data.JoinCount == maxJoin)
                        {
                            remove = true;
                        }
                    }
                    else
                    {
                        ret = false;
                    }
                }
                return(ret);
            }
        }
示例#5
0
 public void SetPartyTime(MarryPartyData data, long startTime)
 {
     lock (this.MarryPartyList)
     {
         data.StartTime = startTime;
     }
 }
示例#6
0
        public bool IncPartyJoin(int roleid, int maxJoin, out bool remove)
        {
            remove = false;
            MarryPartyData data = null;
            bool           result;

            lock (this.MarryPartyList)
            {
                bool ret = this.MarryPartyList.TryGetValue(roleid, out data);
                if (ret)
                {
                    if (data.JoinCount < maxJoin)
                    {
                        data.JoinCount++;
                        if (data.JoinCount == maxJoin)
                        {
                            remove = true;
                        }
                    }
                    else
                    {
                        ret = false;
                    }
                }
                result = ret;
            }
            return(result);
        }
示例#7
0
        public MarryPartyData GetParty(int roleid)
        {
            MarryPartyData data = null;

            lock (MarryPartyList)
            {
                MarryPartyList.TryGetValue(roleid, out data);
                return(data);
            }
        }
示例#8
0
        public void IncPartyJoinCancel(int roleid)
        {
            MarryPartyData data = null;

            lock (this.MarryPartyList)
            {
                if (this.MarryPartyList.TryGetValue(roleid, out data))
                {
                    data.JoinCount--;
                }
            }
        }
示例#9
0
        public MarryPartyData GetParty(int roleid)
        {
            MarryPartyData data = null;
            MarryPartyData result;

            lock (this.MarryPartyList)
            {
                this.MarryPartyList.TryGetValue(roleid, out data);
                result = data;
            }
            return(result);
        }
示例#10
0
        public void IncPartyJoinCancel(int roleid)
        {
            MarryPartyData data = null;

            lock (MarryPartyList)
            {
                if (MarryPartyList.TryGetValue(roleid, out data) == true)
                {
                    --data.JoinCount;
                }
            }
        }
示例#11
0
        public void OnChangeName(int roleId, string oldName, string newName)
        {
            if (string.IsNullOrEmpty(oldName) || string.IsNullOrEmpty(newName))
            {
                return;
            }

            // 未婚,应该没有婚宴数据,如果申请了婚宴,然后离婚,需要确认是否删除婚宴数据
            SafeClientData clientData = Global.GetSafeClientDataFromLocalOrDB(roleId);

            if (clientData == null ||
                clientData.MyMarriageData == null ||
                clientData.MyMarriageData.nSpouseID == -1)
            {
                return;
            }

            // 修改我或者我的配偶举办的婚宴
            lock (MarryPartyList)
            {
                MarryPartyData data = null;

                // 我举办的婚宴
                MarryPartyList.TryGetValue(clientData.RoleID, out data);
                if (data != null)
                {
                    if (!string.IsNullOrEmpty(data.HusbandName) && data.HusbandName == oldName)
                    {
                        data.HusbandName = newName;
                    }
                    else if (!string.IsNullOrEmpty(data.WifeName) && data.WifeName == oldName)
                    {
                        data.WifeName = newName;
                    }
                }

                // 我的配偶举办的婚宴
                data = null;
                MarryPartyList.TryGetValue(clientData.MyMarriageData.nSpouseID, out data);
                if (data != null)
                {
                    if (!string.IsNullOrEmpty(data.HusbandName) && data.HusbandName == oldName)
                    {
                        data.HusbandName = newName;
                    }
                    else if (!string.IsNullOrEmpty(data.WifeName) && data.WifeName == oldName)
                    {
                        data.WifeName = newName;
                    }
                }
            }
        }
示例#12
0
 public void RemovePartyCancel(MarryPartyData partyData)
 {
     lock (this.MarryPartyList)
     {
         try
         {
             this.MarryPartyList.Add(partyData.RoleID, partyData);
         }
         catch
         {
         }
     }
 }
示例#13
0
        public MarryPartyResult MarryPartyCancel(GameClient client)
        {
            if (!MarryLogic.IsVersionSystemOpenOfMarriage())
            {
                return(MarryPartyResult.NotOpen);
            }

            MarryPartyData partyData = m_MarryPartyDataCache.GetParty(client.ClientData.MyMarriageData.nSpouseID);

            if (partyData != null)
            {
                return(MarryPartyResult.NotOriginator);
            }

            return(MarryPartyRemove(client.ClientData.RoleID, false, client));
        }
        public bool IncPartyJoin(int roleid)
        {
            MarryPartyData data = null;
            bool           result;

            lock (this.MarryPartyList)
            {
                bool ret = this.MarryPartyList.TryGetValue(roleid, out data);
                if (ret)
                {
                    data.JoinCount++;
                }
                result = ret;
            }
            return(result);
        }
示例#15
0
        public MarryPartyResult MarryPartyRemove(int roleID, bool forceRemove, GameClient client)
        {
            MarryPartyData   partyData = this.m_MarryPartyDataCache.GetParty(roleID);
            MarryPartyResult result;

            if (partyData == null)
            {
                result = MarryPartyResult.PartyNotFound;
            }
            else if (!forceRemove && partyData.StartTime <= TimeUtil.NOW())
            {
                result = MarryPartyResult.AlreadyStart;
            }
            else
            {
                MarryPartyConfigData configData = this.GetMarryPartyConfigData(partyData.PartyType);
                if (null == configData)
                {
                    result = MarryPartyResult.InvalidParam;
                }
                else if (!this.MarryPartyRemoveInternal(roleID, forceRemove, client, partyData))
                {
                    result = MarryPartyResult.PartyNotFound;
                }
                else
                {
                    if (!forceRemove)
                    {
                        GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, configData.PartyCost, "婚宴退款", false);
                        this.SendMarryPartyList(client, new MarryPartyData(), -1);
                    }
                    else if (partyData.StartTime > TimeUtil.NOW())
                    {
                        GoodsData goodData = Global.GetNewGoodsData(50014, 1);
                        goodData.GCount = configData.PartyCost / 10000;
                        Global.UseMailGivePlayerAward3(roleID, new List <GoodsData>
                        {
                            goodData
                        }, GLang.GetLang(491, new object[0]), GLang.GetLang(492, new object[0]), 0, 0, 0);
                    }
                    result = MarryPartyResult.Success;
                }
            }
            return(result);
        }
示例#16
0
        public MarryPartyResult MarryPartyCancel(GameClient client)
        {
            MarryPartyResult result;

            if (!MarryLogic.IsVersionSystemOpenOfMarriage())
            {
                result = MarryPartyResult.NotOpen;
            }
            else
            {
                MarryPartyData partyData = this.m_MarryPartyDataCache.GetParty(client.ClientData.MyMarriageData.nSpouseID);
                if (partyData != null)
                {
                    result = MarryPartyResult.NotOriginator;
                }
                else
                {
                    result = this.MarryPartyRemove(client.ClientData.RoleID, false, client);
                }
            }
            return(result);
        }
示例#17
0
 public void OnChangeName(int roleId, string oldName, string newName)
 {
     if (!string.IsNullOrEmpty(oldName) && !string.IsNullOrEmpty(newName))
     {
         SafeClientData clientData = Global.GetSafeClientDataFromLocalOrDB(roleId);
         if (clientData != null && clientData.MyMarriageData != null && clientData.MyMarriageData.nSpouseID != -1)
         {
             lock (this.MarryPartyList)
             {
                 MarryPartyData data = null;
                 this.MarryPartyList.TryGetValue(clientData.RoleID, out data);
                 if (data != null)
                 {
                     if (!string.IsNullOrEmpty(data.HusbandName) && data.HusbandName == oldName)
                     {
                         data.HusbandName = newName;
                     }
                     else if (!string.IsNullOrEmpty(data.WifeName) && data.WifeName == oldName)
                     {
                         data.WifeName = newName;
                     }
                 }
                 data = null;
                 this.MarryPartyList.TryGetValue(clientData.MyMarriageData.nSpouseID, out data);
                 if (data != null)
                 {
                     if (!string.IsNullOrEmpty(data.HusbandName) && data.HusbandName == oldName)
                     {
                         data.HusbandName = newName;
                     }
                     else if (!string.IsNullOrEmpty(data.WifeName) && data.WifeName == oldName)
                     {
                         data.WifeName = newName;
                     }
                 }
             }
         }
     }
 }
示例#18
0
        public MarryPartyResult MarryPartyCreate(GameClient client, int partyType, long startTime)
        {
            MarryPartyResult result2;

            if (!MarryLogic.IsVersionSystemOpenOfMarriage())
            {
                result2 = MarryPartyResult.NotOpen;
            }
            else
            {
                MarryPartyConfigData configData = this.GetMarryPartyConfigData(partyType);
                if (null == configData)
                {
                    result2 = MarryPartyResult.InvalidParam;
                }
                else
                {
                    MarriageData marryData = client.ClientData.MyMarriageData;
                    if (marryData.nSpouseID < 0 || marryData.byMarrytype < 0)
                    {
                        result2 = MarryPartyResult.NotMarry;
                    }
                    else
                    {
                        int    husbandRoleID;
                        string husbandName;
                        int    wifeRoleID;
                        string wifeName;
                        if (1 == marryData.byMarrytype)
                        {
                            husbandRoleID = client.ClientData.RoleID;
                            husbandName   = client.ClientData.RoleName;
                            wifeRoleID    = marryData.nSpouseID;
                            wifeName      = MarryLogic.GetRoleName(marryData.nSpouseID);
                        }
                        else
                        {
                            husbandRoleID = marryData.nSpouseID;
                            husbandName   = MarryLogic.GetRoleName(marryData.nSpouseID);
                            wifeRoleID    = client.ClientData.RoleID;
                            wifeName      = client.ClientData.RoleName;
                        }
                        MarryPartyData partyData = this.m_MarryPartyDataCache.AddParty(client.ClientData.RoleID, partyType, startTime, husbandRoleID, wifeRoleID, husbandName, wifeName);
                        if (partyData == null)
                        {
                            result2 = MarryPartyResult.AlreadyRequest;
                        }
                        else
                        {
                            MarryPartyResult     result   = MarryPartyResult.Success;
                            byte[]               byteData = null;
                            TCPProcessCmdResults dbResult = Global.RequestToDBServer3(Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, 10188, string.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}", new object[]
                            {
                                client.ClientData.RoleID,
                                partyType,
                                startTime,
                                husbandRoleID,
                                wifeRoleID,
                                husbandName,
                                wifeName
                            }), out byteData, client.ServerId);
                            if (TCPProcessCmdResults.RESULT_FAILED == dbResult || byteData == null || byteData.Length <= 6)
                            {
                                result = MarryPartyResult.AlreadyRequest;
                            }
                            if (result == MarryPartyResult.Success)
                            {
                                if (configData.PartyCost > Global.GetTotalBindTongQianAndTongQianVal(client))
                                {
                                    result = MarryPartyResult.NotEnoughMoney;
                                }
                                if (configData.PartyCost > 0)
                                {
                                    if (!Global.SubBindTongQianAndTongQian(client, configData.PartyCost, "举办婚宴"))
                                    {
                                        result = MarryPartyResult.NotEnoughMoney;
                                    }
                                }
                            }
                            if (result != MarryPartyResult.Success)
                            {
                                if (dbResult != TCPProcessCmdResults.RESULT_FAILED)
                                {
                                    try
                                    {
                                        Global.SendAndRecvData <string>(10189, string.Format("{0}", client.ClientData.RoleID), client.ServerId, 0);
                                    }
                                    catch (Exception)
                                    {
                                    }
                                }
                                this.m_MarryPartyDataCache.RemoveParty(client.ClientData.RoleID);
                                result2 = result;
                            }
                            else
                            {
                                int            length      = BitConverter.ToInt32(byteData, 0);
                                MarryPartyData dbPartyData = DataHelper.BytesToObject <MarryPartyData>(byteData, 6, length - 2);
                                this.m_MarryPartyDataCache.SetPartyTime(partyData, dbPartyData.StartTime);
                                this.SendMarryPartyList(client, partyData, -1);
                                result2 = result;
                            }
                        }
                    }
                }
            }
            return(result2);
        }
示例#19
0
        private bool MarryPartyRemoveInternal(int roleID, bool forceRemove, GameClient self, MarryPartyData partyData = null)
        {
            bool result;

            if (!this.m_MarryPartyDataCache.RemoveParty(roleID))
            {
                result = false;
            }
            else
            {
                byte[] byteData = null;
                TCPProcessCmdResults dbResult = Global.RequestToDBServer3(Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, 10189, string.Format("{0}", roleID), out byteData, self.ServerId);
                if (dbResult == TCPProcessCmdResults.RESULT_FAILED)
                {
                    if (!forceRemove)
                    {
                        this.m_MarryPartyDataCache.RemovePartyCancel(partyData);
                        return(false);
                    }
                }
                result = true;
            }
            return(result);
        }
示例#20
0
        public MarryPartyResult MarryPartyJoin(GameClient client, int roleID)
        {
            MarryPartyResult result;

            if (!MarryLogic.IsVersionSystemOpenOfMarriage())
            {
                result = MarryPartyResult.NotOpen;
            }
            else
            {
                MarryPartyData partyData = this.m_MarryPartyDataCache.GetParty(roleID);
                if (partyData == null)
                {
                    result = MarryPartyResult.PartyNotFound;
                }
                else if (partyData.StartTime > TimeUtil.NOW())
                {
                    result = MarryPartyResult.NotStart;
                }
                else
                {
                    MarryPartyConfigData configData = this.GetMarryPartyConfigData(partyData.PartyType);
                    if (null == configData)
                    {
                        result = MarryPartyResult.PartyNotFound;
                    }
                    else if (configData.JoinCost > Global.GetTotalBindTongQianAndTongQianVal(client))
                    {
                        result = MarryPartyResult.NotEnoughMoney;
                    }
                    else
                    {
                        Dictionary <int, int> joinList = client.ClientData.MyMarryPartyJoinList;
                        int  targetPartyJoinCount      = 0;
                        int  allPartyJoinCount         = 0;
                        bool remove = false;
                        lock (joinList)
                        {
                            joinList.TryGetValue(roleID, out targetPartyJoinCount);
                            foreach (KeyValuePair <int, int> kv in client.ClientData.MyMarryPartyJoinList)
                            {
                                allPartyJoinCount += kv.Value;
                            }
                            if (allPartyJoinCount >= this.MarryPartyPlayerMaxJoinCount)
                            {
                                return(MarryPartyResult.ZeroPlayerJoinCount);
                            }
                            if (targetPartyJoinCount >= configData.PlayerMaxJoinCount)
                            {
                                return(MarryPartyResult.ZeroPlayerJoinCount);
                            }
                            if (!this.m_MarryPartyDataCache.IncPartyJoin(roleID, configData.PartyMaxJoinCount, out remove))
                            {
                                return(MarryPartyResult.ZeroPartyJoinCount);
                            }
                            targetPartyJoinCount++;
                            byte[] byteData = null;
                            TCPProcessCmdResults dbResult = Global.RequestToDBServer3(Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, 10190, string.Format("{0}:{1}:{2}", roleID, client.ClientData.RoleID, targetPartyJoinCount), out byteData, client.ServerId);
                            if (TCPProcessCmdResults.RESULT_FAILED == dbResult || byteData == null || byteData.Length <= 6)
                            {
                                this.m_MarryPartyDataCache.IncPartyJoinCancel(roleID);
                                return(MarryPartyResult.ZeroPartyJoinCount);
                            }
                            joinList[roleID] = targetPartyJoinCount;
                        }
                        if (configData.JoinCost > 0)
                        {
                            if (!Global.SubBindTongQianAndTongQian(client, configData.JoinCost, "參予婚宴"))
                            {
                                return(MarryPartyResult.NotEnoughMoney);
                            }
                        }
                        if (configData.RewardExp > 0)
                        {
                            GameManager.ClientMgr.ProcessRoleExperience(client, (long)configData.RewardExp, false, true, false, "none");
                        }
                        if (configData.RewardShengWang > 0)
                        {
                            GameManager.ClientMgr.ModifyShengWangValue(client, configData.RewardShengWang, "婚宴奖励", false, true);
                        }
                        if (configData.RewardXingHun > 0)
                        {
                            GameManager.ClientMgr.ModifyStarSoulValue(client, configData.RewardXingHun, "婚宴奖励", false, true);
                        }
                        if (remove)
                        {
                            this.MarryPartyRemoveInternal(roleID, true, client, null);
                            GoodsData goodData = Global.GetNewGoodsData(configData.RewardItem.GoodsID, configData.RewardItem.Binding);
                            goodData.GCount = configData.JoinCost * configData.PartyMaxJoinCount / configData.GoodWillRatio / 2;
                            List <GoodsData> goodList = new List <GoodsData>();
                            goodList.Add(goodData);
                            string sMsg = GLang.GetLang(493, new object[0]);
                            Global.UseMailGivePlayerAward3(roleID, goodList, GLang.GetLang(494, new object[0]), sMsg, 0, 0, 0);
                            int spouseID = (roleID == partyData.HusbandRoleID) ? partyData.WifeRoleID : partyData.HusbandRoleID;
                            Global.UseMailGivePlayerAward3(spouseID, goodList, GLang.GetLang(494, new object[0]), sMsg, 0, 0, 0);
                        }
                        this.SendMarryPartyJoinList(client);
                        this.SendMarryPartyList(client, partyData, -1);
                        result = MarryPartyResult.Success;
                    }
                }
            }
            return(result);
        }
示例#21
0
        public MarryPartyResult MarryPartyCreate(GameClient client, int partyType, long startTime)
        {
            if (!MarryLogic.IsVersionSystemOpenOfMarriage())
            {
                return(MarryPartyResult.NotOpen);
            }

            MarryPartyConfigData configData = GetMarryPartyConfigData(partyType);

            if (null == configData)
            {
                return(MarryPartyResult.InvalidParam);
            }

            MarriageData marryData = client.ClientData.MyMarriageData;

            if (marryData.nSpouseID < 0 || marryData.byMarrytype < 0)
            {
                return(MarryPartyResult.NotMarry);
            }

            int    husbandRoleID = 0;
            int    wifeRoleID    = 0;
            string husbandName   = "";
            string wifeName      = "";

            if (1 == marryData.byMarrytype)
            {
                husbandRoleID = client.ClientData.RoleID;
                husbandName   = client.ClientData.RoleName;
                wifeRoleID    = marryData.nSpouseID;
                wifeName      = MarryLogic.GetRoleName(marryData.nSpouseID);
            }
            else
            {
                husbandRoleID = marryData.nSpouseID;
                husbandName   = MarryLogic.GetRoleName(marryData.nSpouseID);
                wifeRoleID    = client.ClientData.RoleID;
                wifeName      = client.ClientData.RoleName;
            }

            // 必须先添加,以防夫妻重复举行婚宴。。。想不通为什么找我
            MarryPartyData partyData = m_MarryPartyDataCache.AddParty(client.ClientData.RoleID, partyType, startTime, husbandRoleID, wifeRoleID, husbandName, wifeName);

            if (partyData == null)
            {
                return(MarryPartyResult.AlreadyRequest);
            }

            MarryPartyResult result = MarryPartyResult.Success;

            byte[] byteData = null;
            TCPProcessCmdResults dbResult =
                Global.RequestToDBServer3(Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool,
                                          (int)TCPGameServerCmds.CMD_DB_MARRY_PARTY_ADD,
                                          string.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}", client.ClientData.RoleID, partyType, startTime, husbandRoleID, wifeRoleID, husbandName, wifeName),
                                          out byteData,
                                          client.ServerId
                                          );

            if (TCPProcessCmdResults.RESULT_FAILED == dbResult || null == byteData || byteData.Length <= 6)
            {
                result = MarryPartyResult.AlreadyRequest;
            }

            if (result == MarryPartyResult.Success)
            {
                // 检查举办所需金币是否足够
                if (configData.PartyCost > Global.GetTotalBindTongQianAndTongQianVal(client))
                {
                    result = MarryPartyResult.NotEnoughMoney;
                }
                if (configData.PartyCost > 0)
                {
                    // 扣除举办所需金币
                    if (Global.SubBindTongQianAndTongQian(client, configData.PartyCost, "举办婚宴") == false)
                    {
                        result = MarryPartyResult.NotEnoughMoney;
                    }
                }
            }

            if (result != MarryPartyResult.Success)
            {
                if (dbResult != TCPProcessCmdResults.RESULT_FAILED)
                {
                    try
                    {
                        Global.SendAndRecvData((int)TCPGameServerCmds.CMD_DB_MARRY_PARTY_REMOVE,
                                               string.Format("{0}", client.ClientData.RoleID),
                                               client.ServerId
                                               );
                    }
                    catch (Exception)
                    {
                    }
                }
                m_MarryPartyDataCache.RemoveParty(client.ClientData.RoleID);
                return(result);
            }

            Int32          length      = BitConverter.ToInt32(byteData, 0);
            MarryPartyData dbPartyData = DataHelper.BytesToObject <MarryPartyData>(byteData, 6, length - 2);

            m_MarryPartyDataCache.SetPartyTime(partyData, dbPartyData.StartTime);

            SendMarryPartyList(client, partyData);

            //lock (MarryPartyNPCShowMutex)
            //{
            //    if (MarryPartyNPCShow == false)
            //    {
            //        // TODO: add npc
            //        MarryPartyNPCShow = true;
            //    }
            //}

            return(result);
        }
示例#22
0
        public MarryPartyResult MarryPartyRemove(int roleID, bool forceRemove, GameClient client)
        {
            MarryPartyData partyData = m_MarryPartyDataCache.GetParty(roleID);

            if (partyData == null)
            {
                return(MarryPartyResult.PartyNotFound);
            }

            if (forceRemove == false && partyData.StartTime <= TimeUtil.NOW())
            {
                return(MarryPartyResult.AlreadyStart);
            }

            MarryPartyConfigData configData = GetMarryPartyConfigData(partyData.PartyType);

            if (null == configData)
            {
                return(MarryPartyResult.InvalidParam);
            }

            if (MarryPartyRemoveInternal(roleID, forceRemove, client, partyData) == false)
            {
                return(MarryPartyResult.PartyNotFound);
            }

            if (forceRemove == false)
            {
                // 手动取消,直接返绑金
                GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client,
                                                configData.PartyCost, "婚宴退款", false);

                SendMarryPartyList(client, new MarryPartyData());

                //if (m_MarryPartyDataCache.GetPartyCount() <= 0)
                //{
                //    lock (MarryPartyNPCShowMutex)
                //    {
                //        if (MarryPartyNPCShow == true)
                //        {
                //            // TODO: add npc
                //            MarryPartyNPCShow = false;
                //        }
                //    }
                //}
            }
            else
            {
                // 被动强制取消, 如果婚宴沒开始, 邮件返绑金
                if (partyData.StartTime > TimeUtil.NOW())
                {
                    GoodsData goodData = Global.GetNewGoodsData(50014, 1);
                    goodData.GCount = configData.PartyCost / 10000;
                    List <GoodsData> goodList = new List <GoodsData>();
                    goodList.Add(goodData);

                    Global.UseMailGivePlayerAward3(roleID, goodList, "婚宴取消", "你的婚宴被取消,返回金币请查收!", 0);
                }
            }

            return(MarryPartyResult.Success);
        }
示例#23
0
        private bool MarryPartyRemoveInternal(int roleID, bool forceRemove, GameClient self, MarryPartyData partyData = null)
        {
            if (m_MarryPartyDataCache.RemoveParty(roleID) == false)
            {
                return(false);
            }

            byte[] byteData = null;
            TCPProcessCmdResults dbResult =
                Global.RequestToDBServer3(Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool,
                                          (int)TCPGameServerCmds.CMD_DB_MARRY_PARTY_REMOVE,
                                          string.Format("{0}", roleID),
                                          out byteData,
                                          self.ServerId
                                          );

            if (dbResult == TCPProcessCmdResults.RESULT_FAILED)
            {
                if (forceRemove == false)
                {
                    m_MarryPartyDataCache.RemovePartyCancel(partyData);
                    return(false);
                }
            }
            return(true);
        }
示例#24
0
        public MarryPartyResult MarryPartyJoin(GameClient client, int roleID)
        {
            if (!MarryLogic.IsVersionSystemOpenOfMarriage())
            {
                return(MarryPartyResult.NotOpen);
            }

            MarryPartyData partyData = m_MarryPartyDataCache.GetParty(roleID);

            if (partyData == null)
            {
                return(MarryPartyResult.PartyNotFound);
            }

            if (partyData.StartTime > TimeUtil.NOW())
            {
                return(MarryPartyResult.NotStart);
            }

            MarryPartyConfigData configData = GetMarryPartyConfigData(partyData.PartyType);

            if (null == configData)
            {
                return(MarryPartyResult.PartyNotFound);
            }

            // 检查參予所需金币是否足够
            if (configData.JoinCost > Global.GetTotalBindTongQianAndTongQianVal(client))
            {
                return(MarryPartyResult.NotEnoughMoney);
            }

            // 检查參予次数
            Dictionary <int, int> joinList = client.ClientData.MyMarryPartyJoinList;
            int  targetPartyJoinCount      = 0;
            int  allPartyJoinCount         = 0;
            bool remove = false;

            lock (joinList)
            {
                joinList.TryGetValue(roleID, out targetPartyJoinCount);

                foreach (KeyValuePair <int, int> kv in client.ClientData.MyMarryPartyJoinList)
                {
                    allPartyJoinCount += kv.Value;
                }

                if (allPartyJoinCount >= MarryPartyPlayerMaxJoinCount)
                {
                    return(MarryPartyResult.ZeroPlayerJoinCount);
                }
                if (targetPartyJoinCount >= configData.PlayerMaxJoinCount)
                {
                    return(MarryPartyResult.ZeroPlayerJoinCount);
                }

                // 增加參予次数
                if (m_MarryPartyDataCache.IncPartyJoin(roleID, configData.PartyMaxJoinCount, out remove) == false)
                {
                    return(MarryPartyResult.ZeroPartyJoinCount);
                }

                ++targetPartyJoinCount;

                byte[] byteData = null;
                TCPProcessCmdResults dbResult =
                    Global.RequestToDBServer3(Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool,
                                              (int)TCPGameServerCmds.CMD_DB_MARRY_PARTY_JOIN_INC,
                                              string.Format("{0}:{1}:{2}", roleID, client.ClientData.RoleID, targetPartyJoinCount),
                                              out byteData,
                                              client.ServerId
                                              );
                if (TCPProcessCmdResults.RESULT_FAILED == dbResult || null == byteData || byteData.Length <= 6)
                {
                    m_MarryPartyDataCache.IncPartyJoinCancel(roleID);
                    return(MarryPartyResult.ZeroPartyJoinCount);
                }

                joinList[roleID] = targetPartyJoinCount;
            }

            if (configData.JoinCost > 0)
            {
                // 扣除參予所需金币
                if (Global.SubBindTongQianAndTongQian(client, configData.JoinCost, "參予婚宴") == false)
                {
                    // TODO: 沒处理參予次数已更新数据库的问题
                    return(MarryPartyResult.NotEnoughMoney);
                }
            }

            if (configData.RewardExp > 0)
            {
                GameManager.ClientMgr.ProcessRoleExperience(client, configData.RewardExp, false);
            }

            if (configData.RewardShengWang > 0)
            {
                GameManager.ClientMgr.ModifyShengWangValue(client, configData.RewardShengWang, "婚宴奖励", false);
            }

            if (configData.RewardXingHun > 0)
            {
                GameManager.ClientMgr.ModifyStarSoulValue(client, configData.RewardXingHun, "婚宴奖励", false);
            }

            if (remove == true)
            {
                MarryPartyRemoveInternal(roleID, true, client);

                // 婚宴结算, 换成友善度物品, 个数双方平分
                GoodsData goodData = Global.GetNewGoodsData(configData.RewardItem.GoodsID, configData.RewardItem.Binding);
                goodData.GCount = configData.JoinCost * configData.PartyMaxJoinCount / configData.GoodWillRatio / 2;
                List <GoodsData> goodList = new List <GoodsData>();
                goodList.Add(goodData);

                string sMsg = Global.GetLang("恭喜您成功举办了一场盛大的婚宴,宾客们馈赠的礼物已随这封邮件发送到您手上,请查收附件。");
                Global.UseMailGivePlayerAward3(roleID, goodList, Global.GetLang("婚宴"), sMsg, 0);

                int spouseID = (roleID == partyData.HusbandRoleID)? partyData.WifeRoleID : partyData.HusbandRoleID;
                Global.UseMailGivePlayerAward3(spouseID, goodList, Global.GetLang("婚宴"), sMsg, 0);
            }

            SendMarryPartyJoinList(client);
            SendMarryPartyList(client, partyData);

            //if (m_MarryPartyDataCache.GetPartyCount() <= 0)
            //{
            //    lock (MarryPartyNPCShowMutex)
            //    {
            //        if (MarryPartyNPCShow == true)
            //        {
            //            // TODO: add npc
            //            MarryPartyNPCShow = false;
            //        }
            //    }
            //}

            return(MarryPartyResult.Success);
        }