public static TCPProcessCmdResults ProcessGetNewzoneActiveAward(DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket) { tcpOutPacket = null; string cmdData = null; try { cmdData = new UTF8Encoding().GetString(data, 0, count); } catch (Exception) { LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID), null, true); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767); return(TCPProcessCmdResults.RESULT_DATA); } TCPProcessCmdResults ret = TCPProcessCmdResults.RESULT_FAILED; try { string[] fields = cmdData.Split(new char[] { ':' }); if (fields.Length != 5) { LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}", (TCPGameServerCmds)nID, fields.Length, cmdData), null, true); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767); return(TCPProcessCmdResults.RESULT_DATA); } int roleID = Convert.ToInt32(fields[0]); string fromDate = fields[1].Replace('$', ':'); string toDate = fields[2].Replace('$', ':'); int activetype = Global.SafeConvertToInt32(fields[4], 10); string[] minYuanBaoArr = fields[3].Split(new char[] { '_' }); List <int> minGateValueList = new List <int>(); foreach (string item in minYuanBaoArr) { minGateValueList.Add(Global.SafeConvertToInt32(item, 10)); } switch (activetype) { case 34: ret = NewZoneActiveMgr.GetRechargeKingAward(dbMgr, pool, nID, roleID, activetype, fromDate, toDate, minGateValueList, out tcpOutPacket); break; case 35: ret = NewZoneActiveMgr.GetConsumeKingAward(dbMgr, pool, nID, roleID, activetype, fromDate, toDate, minGateValueList, out tcpOutPacket); break; case 36: ret = NewZoneActiveMgr.GetBossKillAward(dbMgr, pool, nID, roleID, activetype, fromDate, toDate, minGateValueList, out tcpOutPacket); break; case 37: ret = NewZoneActiveMgr.GetNewFanliAward(dbMgr, pool, nID, roleID, activetype, fromDate, toDate, minGateValueList, out tcpOutPacket); break; } } catch (Exception ex) { } return(ret); }
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); }
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); }
/// <summary> /// 根据帮会id查找帮会副本信息 /// </summary> public GuildCopyMapDB FindGuildCopyMapDB(int guildid) { GuildCopyMapDB data = null; lock (GuildCopyMapDBDict) { // 先在缓存里查找 if (GuildCopyMapDBDict.ContainsKey(guildid)) { data = GuildCopyMapDBDict[guildid]; } // 缓存里没有就去数据库申请 else { // 去db要数据 string[] dbFields = null; string strDbCmd = string.Format("{0}", guildid); TCPProcessCmdResults dbRequestResult = Global.RequestToDBServer(Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool , (int)TCPGameServerCmds.CMD_SPR_GETBANGHUIFUBEN, strDbCmd, out dbFields); if (dbRequestResult == TCPProcessCmdResults.RESULT_FAILED) { LogManager.WriteLog(LogTypes.Error, string.Format("GuildCopyMapDBManager::FindGuildCopyMapDB dbRequestResult == TCPProcessCmdResults.RESULT_FAILED strDbCmd={0}", strDbCmd)); return(null); } if (dbFields.Length < 5 || Convert.ToInt32(dbFields[0]) <= 0) { LogManager.WriteLog(LogTypes.Error, string.Format("GuildCopyMapDBManager::FindGuildCopyMapDB 参数数量错误或失败 strDbCmd={0}, dbFields.Length={1}", strDbCmd, dbFields.Length)); return(null); } try { data = new GuildCopyMapDB() { GuildID = Convert.ToInt32(dbFields[0]), FuBenID = Convert.ToInt32(dbFields[1]), State = Convert.ToInt32(dbFields[2]), OpenDay = Convert.ToInt32(dbFields[3]), Killers = dbFields[4], }; // 加入缓存 AddGuildCopyMapDB(data); if (guildid != Convert.ToInt32(dbFields[0])) { LogManager.WriteLog(LogTypes.Error, string.Format("GuildCopyMapDBManager::FindGuildCopyMapDB DB返回的id不符,guildid={0}, dbFields[0]={1}", guildid, Convert.ToInt32(dbFields[0]))); return(null); } } catch (Exception) { LogManager.WriteLog(LogTypes.Error, string.Format("GuildCopyMapDBManager::FindGuildCopyMapDB参数解析失败?")); return(null); } } } return(data); }
private bool CreateOccupationSummoner(GameClient client, int nID, byte[] bytes, string[] cmdParams) { int PurchaseOccupationGoods = 0; lock (this.RuntimeData.Mutex) { PurchaseOccupationGoods = this.RuntimeData.PurchaseOccupationGoods; } bool result2; if (!SummonerData.CreateMapSet.Contains(client.CurrentMapCode)) { string strcmd = string.Format("{0}:{1}", -21, string.Format("{0}${1}${2}${3}${4}${5}", new object[] { "", "", "", "", "", "" })); client.sendCmd(nID, strcmd, false); result2 = true; } else { int GoodsNum = Global.GetTotalGoodsCountByID(client, PurchaseOccupationGoods); if (GoodsNum <= 0) { string strcmd = string.Format("{0}:{1}", -6, string.Format("{0}${1}${2}${3}${4}${5}", new object[] { "", "", "", "", "", "" })); client.sendCmd(nID, strcmd, false); result2 = true; } else { TMSKSocket clientSocket = GameManager.OnlineUserSession.FindSocketByUserID(client.strUserID); if (null == clientSocket) { result2 = true; } else { string userID = cmdParams[0]; string userName = cmdParams[1]; int sex = Convert.ToInt32(cmdParams[2]); int occup = Convert.ToInt32(cmdParams[3]); string[] nameAndPingTaiID = cmdParams[4].Split(new char[] { '$' }); int zoneID = Convert.ToInt32(cmdParams[5]); string deviceID = clientSocket.deviceID; if (sex != 1 || occup != 5 || !GameManager.SummonerMgr.IsVersionSystemOpenOfSummoner()) { string strcmd = string.Format("{0}:{1}", -12, string.Format("{0}${1}${2}${3}${4}${5}", new object[] { "", "", "", "", "", "" })); client.sendCmd(nID, strcmd, false); result2 = true; } else { string name = nameAndPingTaiID[0]; int ret = NameServerNamager.CheckInvalidCharacters(name, false); if (ret <= 0) { string strcmd = string.Format("{0}:{1}", ret, string.Format("{0}${1}${2}${3}${4}${5}", new object[] { "", "", "", "", "", "" })); client.sendCmd(nID, strcmd, false); result2 = true; } else if (!SingletonTemplate <NameManager> .Instance().IsNameLengthOK(name)) { string strcmd = string.Format("{0}:{1}", -2, string.Format("{0}${1}${2}${3}${4}${5}", new object[] { "", "", "", "", "", "" })); client.sendCmd(nID, strcmd, false); result2 = true; } else { ret = NameServerNamager.RegisterNameToNameServer(zoneID, userID, nameAndPingTaiID, 0, 0); if (ret <= 0) { string strcmd = string.Format("{0}:{1}", ret, string.Format("{0}${1}${2}${3}${4}${5}", new object[] { "", "", "", "", "", "" })); client.sendCmd(nID, strcmd, false); result2 = true; } else { int NotifyLeftTime = 0; if (!SingletonTemplate <CreateRoleLimitManager> .Instance().IfCanCreateRole(userID, userName, deviceID, ((IPEndPoint)clientSocket.RemoteEndPoint).Address.ToString(), out NotifyLeftTime)) { string strcmd = string.Format("{0}:{1}", -7, NotifyLeftTime); client.sendCmd(nID, strcmd, false); result2 = true; } else { string cmddata = string.Format("{0}:{1}", new UTF8Encoding().GetString(bytes, 0, bytes.Length), 1); byte[] bytesCmd = new UTF8Encoding().GetBytes(cmddata); TCPOutPacket tcpOutPacket = null; TCPProcessCmdResults result = Global.TransferRequestToDBServer(TCPManager.getInstance(), clientSocket, Global._TCPManager.tcpClientPool, TCPManager.getInstance().tcpRandKey, Global._TCPManager.TcpOutPacketPool, 102, bytesCmd, bytesCmd.Length, out tcpOutPacket, clientSocket.ServerId); if (null == tcpOutPacket) { result2 = true; } else { tcpOutPacket.PacketCmdID = (ushort)nID; string strCmdResult = null; tcpOutPacket.GetPacketCmdData(out strCmdResult); client.sendCmd(tcpOutPacket, true); if (null != strCmdResult) { string[] ResultField = strCmdResult.Split(new char[] { ':' }); if (ResultField.Length == 2 && Global.SafeConvertToInt32(ResultField[0]) == 1) { bool usedBinding = false; bool usedTimeLimited = false; GameManager.ClientMgr.NotifyUseGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, PurchaseOccupationGoods, 1, false, out usedBinding, out usedTimeLimited, false); SingletonTemplate <CreateRoleLimitManager> .Instance().ModifyCreateRoleNum(userID, userName, deviceID, ((IPEndPoint)clientSocket.RemoteEndPoint).Address.ToString()); string[] fields = ResultField[1].Split(new char[] { '$' }); int newRoleID = Global.SafeConvertToInt32(fields[0]); client.sendCmd <int>(13999, newRoleID, false); } } result2 = true; } } } } } } } } return(result2); }
/// <summary> /// 重置世界等级 /// </summary> public void ResetWorldLevel() { int dayID = DateTime.Now.DayOfYear; if (m_nResetWorldLevelDayID == dayID) { return; } TCPOutPacket tcpOutPacket = null; string strcmd = string.Format("{0}:{1}", 0, (int)PaiHangTypes.RoleLevel); TCPProcessCmdResults dbRequestResult = Global.RequestToDBServer2(Global._TCPManager.tcpClientPool, TCPOutPacketPool.getInstance(), (int)TCPGameServerCmds.CMD_SPR_GETPAIHANGLIST, strcmd, out tcpOutPacket); if (dbRequestResult == TCPProcessCmdResults.RESULT_FAILED) { LogManager.WriteLog(LogTypes.Error, "世界等级装入异常"); return; } int nBakResetWorldLevelDayID = m_nResetWorldLevelDayID; m_nResetWorldLevelDayID = dayID; // 处理本地精简的好友列表数据 PaiHangData paiHangData = DataHelper.BytesToObject <PaiHangData>(tcpOutPacket.GetPacketBytes(), 6, tcpOutPacket.PacketDataSize - 6); if (null != paiHangData) { int nLevelCount = 0; if (null != paiHangData.PaiHangList) { for (int i = 0; i < 10 && i < paiHangData.PaiHangList.Count; i++) { nLevelCount += paiHangData.PaiHangList[i].Val2 * 100 + paiHangData.PaiHangList[i].Val1; } } m_nWorldLevel = nLevelCount / 10; } else { LogManager.WriteLog(LogTypes.Error, "世界等级装入时,获取等级排行榜失败"); return; } if (0 != nBakResetWorldLevelDayID) { List <GameClient> allClient = GameManager.ClientMgr.GetAllClients(); if (null != allClient) { for (int i = 0; i < allClient.Count(); i++) { if (null != allClient[i]) { UpddateWorldLevelBuff(allClient[i]); } } } } }
public void AutoGiveMagicSwordGoods(GameClient client) { if (null == client) { LogManager.WriteLog(LogTypes.Error, string.Format("client不存在,服务器无法给与魔剑士新手装备", new object[0]), null, true); } else if (this.IsMagicSword(client)) { int nRoleID = client.ClientData.RoleID; try { List <List <int> > giveEquip; if (EMagicSwordTowardType.EMST_Strength == this.GetMagicSwordTowardType(client)) { giveEquip = ConfigParser.ParserIntArrayList(GameManager.systemParamsList.GetParamValueByName("LiMJSZhuangBei"), true, '|', ','); if (null == giveEquip) { LogManager.WriteLog(LogTypes.Error, string.Format("魔剑士初始化装备默认数据报错.RoleID{0}", nRoleID), null, true); return; } if (giveEquip.Count <= 0) { LogManager.WriteLog(LogTypes.Error, string.Format("魔剑士初始化装备数量为空.RoleID{0}", nRoleID), null, true); return; } } else { giveEquip = ConfigParser.ParserIntArrayList(GameManager.systemParamsList.GetParamValueByName("ZhiMJSZhuangBei"), true, '|', ','); if (null == giveEquip) { LogManager.WriteLog(LogTypes.Error, string.Format("魔剑士初始化装备默认数据报错.RoleID{0}", nRoleID), null, true); return; } if (giveEquip.Count <= 0) { LogManager.WriteLog(LogTypes.Error, string.Format("魔剑士初始化装备数量为空.RoleID{0}", nRoleID), null, true); return; } } bool bRingFalg = false; for (int i = 0; i < giveEquip.Count; i++) { int nGoodID = giveEquip[i][0]; int nNum = giveEquip[i][1]; int nBind = giveEquip[i][2]; int nIntensify = giveEquip[i][3]; int nAppendPropLev = giveEquip[i][4]; int nLuck = giveEquip[i][5]; int nExcellence = giveEquip[i][6]; SystemXmlItem sytemGoodsItem = null; if (!GameManager.SystemGoods.SystemXmlItemDict.TryGetValue(nGoodID, out sytemGoodsItem)) { LogManager.WriteLog(LogTypes.Error, string.Format("魔剑士初始化装备数量ID不存在:RoleID{0},GoodsID={1}", nRoleID, nGoodID), null, true); } else if (!Global.IsRoleOccupationMatchGoods(client, nGoodID)) { LogManager.WriteLog(LogTypes.Error, string.Format("魔剑士初始化装备与职业不符RoleID{0}, 物品id{1}.", nRoleID, nGoodID), null, true); } else if (1 != nNum) { LogManager.WriteLog(LogTypes.Error, string.Format("魔剑士初始化装备数量必须为1件RoleID{0}, 数量{1}.", nRoleID, nNum), null, true); } else { int nSeriralID = Global.AddGoodsDBCommand(Global._TCPManager.TcpOutPacketPool, client, nGoodID, nNum, 0, "", nIntensify, nBind, 0, "", false, 1, "自动给于魔剑士装备", "1900-01-01 12:00:00", 0, 0, nLuck, 0, nExcellence, nAppendPropLev, 0, null, null, 0, true); if (nSeriralID <= 0) { LogManager.WriteLog(LogTypes.Error, string.Format("魔剑士初始化装备数量[AddGoodsDBCommand]失败.RoleID{0}", nRoleID), null, true); } else { GoodsData newEquip = Global.GetGoodsByDbID(client, nSeriralID); if (null == newEquip) { LogManager.WriteLog(LogTypes.Error, string.Format("魔剑士初始化装备数量[GetGoodsByID]失败.RoleID{0}", nRoleID), null, true); } else { int nBagIndex = 0; int nCatetoriy = Global.GetGoodsCatetoriy(newEquip.GoodsID); if (nCatetoriy == 6 && bRingFalg) { nBagIndex++; } string cmdData = string.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}", new object[] { client.ClientData.RoleID, 1, newEquip.Id, newEquip.GoodsID, 1, newEquip.Site, newEquip.GCount, nBagIndex, "" }); TCPProcessCmdResults eErrorCode = Global.ModifyGoodsByCmdParams(client, cmdData, "客户端修改", null); if (TCPProcessCmdResults.RESULT_FAILED == eErrorCode) { LogManager.WriteLog(LogTypes.Error, string.Format("魔剑士初始化装备数量[ModifyGoodsByCmdParams]失败.RoleID{0}", nRoleID), null, true); } else { Global.RefreshEquipProp(client, newEquip); if (nCatetoriy == 6) { bRingFalg = true; } } } } } } } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } } }
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); }
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); }
public static TCPProcessCmdResults UpgradeDamonProcess(TCPOutPacketPool pool, GameClient client, GoodsData goodsData, out TCPOutPacket tcpOutPacket, int nID, TCPClientPool tcpClientPool, TCPManager tcpMgr) { tcpOutPacket = null; SystemXmlItem xmlItem = null; TCPProcessCmdResults result; if (!GameManager.SystemGoods.SystemXmlItemDict.TryGetValue(goodsData.GoodsID, out xmlItem) || null == xmlItem) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -13, client.ClientData.RoleID, goodsData.Id, 0, 0 }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else { int MaxUpgradeLevel = xmlItem.GetIntValue("SuitID", -1) * 10 + 9; if (goodsData.Forge_level >= MaxUpgradeLevel) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -4, client.ClientData.RoleID, goodsData.Id, goodsData.Forge_level, goodsData.Binding }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else if (goodsData.Site != 5000) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -9, client.ClientData.RoleID, goodsData.Id, goodsData.Forge_level, goodsData.Binding }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else { SystemXmlItem xmlItems = null; GameManager.SystemDamonUpgrade.SystemXmlItemDict.TryGetValue(goodsData.Forge_level + 2, out xmlItems); if (null == xmlItems) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -6, client.ClientData.RoleID, goodsData.Id, 0, 0 }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else { int nReqMoHe = xmlItems.GetIntValue("NeedEXP", -1); long lHaveMoHe = (long)GameManager.ClientMgr.GetMUMoHeValue(client); if (lHaveMoHe < (long)nReqMoHe) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -11, client.ClientData.RoleID, goodsData.Id, goodsData.Forge_level, goodsData.Binding }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else { GameManager.ClientMgr.ModifyMUMoHeValue(client, -nReqMoHe, "精灵升级", true, true, false); int nBingProp = 1; string[] dbFields = null; string strDbCmd = Global.FormatUpdateDBGoodsStr(new object[] { client.ClientData.RoleID, goodsData.Id, "*", goodsData.Forge_level + 1, "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", nBingProp, "*", "*", "*", "*", "*", "*", "*" }); TCPProcessCmdResults dbRequestResult = Global.RequestToDBServer(tcpClientPool, pool, 10006, strDbCmd, out dbFields, client.ServerId); if (dbRequestResult == TCPProcessCmdResults.RESULT_FAILED) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -10, client.ClientData.RoleID, goodsData.Id, 0, 0 }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else if (dbFields.Length <= 0 || Convert.ToInt32(dbFields[1]) < 0) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -10, client.ClientData.RoleID, goodsData.Id, 0, 0 }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else { int oldUsing = goodsData.Using; if (goodsData.Using > 0) { goodsData.Using = 0; Global.RefreshEquipProp(client, goodsData); } goodsData.Forge_level++; goodsData.Binding = nBingProp; JingLingQiYuanManager.getInstance().RefreshProps(client, true); if (oldUsing != goodsData.Using) { goodsData.Using = oldUsing; if (Global.RefreshEquipProp(client, goodsData)) { GameManager.ClientMgr.NotifyUpdateEquipProps(tcpMgr.MySocketListener, pool, client); GameManager.ClientMgr.NotifyOthersLifeChanged(tcpMgr.MySocketListener, pool, client, true, false, 7); } } Global.ModRoleGoodsEvent(client, goodsData, 0, "强化", false); EventLogManager.AddGoodsEvent(client, OpTypes.Forge, OpTags.None, goodsData.GoodsID, (long)goodsData.Id, 0, goodsData.GCount, "强化"); string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { 1, client.ClientData.RoleID, goodsData.Id, goodsData.Forge_level, nBingProp }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } } } } } return(result); }
/// <summary> /// 激活星座信息 /// </summary> public int ActivationStarConstellation(GameClient client, int nStarSiteID) { if (nStarSiteID < 1 || nStarSiteID > m_MaxStarSiteID) { return(-1); } if (client.ClientData.RoleStarConstellationInfo == null) { client.ClientData.RoleStarConstellationInfo = new Dictionary <int, int>(); } int nStarSlot = 0; client.ClientData.RoleStarConstellationInfo.TryGetValue(nStarSiteID, out nStarSlot); if (nStarSlot >= m_MaxStarSlotID) { return(-1); } ++nStarSlot; int nOccupation = client.ClientData.Occupation; Dictionary <int, Dictionary <int, StarConstellationDetailInfo> > dicTmp = null; if (!m_StarConstellationDetailInfo.TryGetValue(nOccupation, out dicTmp) || dicTmp == null) { return(-2); } Dictionary <int, StarConstellationDetailInfo> dicTmpInfo = null; if (!dicTmp.TryGetValue(nStarSiteID, out dicTmpInfo) || dicTmpInfo == null) { return(-2); } StarConstellationDetailInfo tmpInfo = null; if (!dicTmpInfo.TryGetValue(nStarSlot, out tmpInfo) || tmpInfo == null) { return(-2); } int nNeeChangeLife = 0; nNeeChangeLife = tmpInfo.ChangeLifeLimit; int nNeedLev = tmpInfo.LevelLimit; int nReqUnionLevel = Global.GetUnionLevel(nNeeChangeLife, nNeedLev); if (Global.GetUnionLevel(client.ClientData.ChangeLifeCount, client.ClientData.Level) < nReqUnionLevel) { return(-3); } int nGoods = tmpInfo.NeedGoodsID; int nNum = tmpInfo.NeedGoodsNum; if (nGoods > 0 && nNum > 0) { GoodsData goods = null; goods = Global.GetGoodsByID(client, nGoods); if (goods == null || goods.GCount < nNum) { GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("所需物品不足")), GameInfoTypeIndexes.Hot, ShowGameInfoTypes.ErrAndBox); return(-5); } } int nNeedStarSoul = tmpInfo.NeedStarSoul; if (nNeedStarSoul > 0) { if (nNeedStarSoul > client.ClientData.StarSoul) { GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("星魂不足")), GameInfoTypeIndexes.Hot, ShowGameInfoTypes.ErrAndBox); return(-9); } } int nNeedMoney = tmpInfo.NeedJinBi; if (nNeedMoney > 0) { if (!Global.SubBindTongQianAndTongQian(client, nNeedMoney, "激活星座")) { GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("金币不足")), GameInfoTypeIndexes.Hot, ShowGameInfoTypes.ErrAndBox); return(-10); } } if (nGoods > 0 && nNum > 0) { bool usedBinding = false; bool usedTimeLimited = false; if (!GameManager.ClientMgr.NotifyUseGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, nGoods, nNum, false, out usedBinding, out usedTimeLimited)) { return(-6); } } if (nNeedStarSoul > 0) { GameManager.ClientMgr.ModifyStarSoulValue(client, -nNeedStarSoul, "激活星座", true, true); //client.ClientData.StarSoul -= nNeedStarSoul; //if (client.ClientData.StarSoul < 0) // client.ClientData.StarSoul = 0; //Global.SaveRoleParamsInt32ValueToDB(client, RoleParamName.StarSoul, client.ClientData.StarSoul, true); //GameManager.ClientMgr.NotifySelfParamsValueChange(client, RoleCommonUseIntParamsIndexs.StarSoulValue, client.ClientData.StarSoul); } // 概率 int nRate = 0; nRate = Global.GetRandomNumber(1, 10001); if (nRate > tmpInfo.SuccessRate) { GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("激活星位失败")), GameInfoTypeIndexes.Hot, ShowGameInfoTypes.ErrAndBox); return(-100); } // 通知DB TCPOutPacket tcpOutPacket = null; string strDbCmd = string.Format("{0}:{1}:{2}", client.ClientData.RoleID, nStarSiteID, nStarSlot); TCPProcessCmdResults dbRequestResult = Global.RequestToDBServer2(Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, (int)TCPGameServerCmds.CMD_DB_UPDATESTARCONSTELLATION, strDbCmd, out tcpOutPacket); if (TCPProcessCmdResults.RESULT_FAILED == dbRequestResult) { return(-7); } Global.PushBackTcpOutPacket(tcpOutPacket); PropertyInfo tmpProp = null; tmpProp = tmpInfo.Propertyinfo; if (tmpProp == null) { return(-8); } client.ClientData.RoleStarConstellationInfo[nStarSiteID] = nStarSlot; ActivationStarConstellationProp(client, tmpProp); /*int nCount = 0; * * if (!client.ClientData.StarConstellationCount.TryGetValue(nStarSiteID, out nCount)) * { ++nCount; * client.ClientData.StarConstellationCount.Add(nStarSiteID, nCount); * } * else * { ++client.ClientData.StarConstellationCount[nStarSiteID]; * }*/ if (0 == nStarSlot % 12) { ActivationStarConstellationExtendProp(client, nStarSiteID); // 星座属性 [8/4/2014 LiaoWei] GameManager.StarConstellationMgr.InitPlayerStarConstellationPorperty(client); } GameManager.ClientMgr.NotifyUpdateEquipProps(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client); client.ClientData.LifeV = (int)RoleAlgorithm.GetMaxLifeV(client); client.ClientData.MagicV = (int)RoleAlgorithm.GetMaxLifeV(client); GameManager.ClientMgr.NotifySelfLifeChanged(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client); return(1); }
/// <summary> /// 新区获得奖励 /// </summary> /// <param name="dbMgr"></param> /// <param name="pool"></param> /// <param name="nID"></param> /// <param name="data"></param> /// <param name="count"></param> /// <param name="tcpOutPacket"></param> /// <returns></returns> public static TCPProcessCmdResults ProcessGetNewzoneActiveAward(DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket) { tcpOutPacket = null; string cmdData = null; try { cmdData = new UTF8Encoding().GetString(data, 0, count); } catch (Exception) //解析错误 { LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID)); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN); return(TCPProcessCmdResults.RESULT_DATA); } TCPProcessCmdResults ret = TCPProcessCmdResults.RESULT_FAILED; try { string[] fields = cmdData.Split(':'); if (fields.Length != 5) { LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}", (TCPGameServerCmds)nID, fields.Length, cmdData)); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN); return(TCPProcessCmdResults.RESULT_DATA); } int roleID = Convert.ToInt32(fields[0]); string fromDate = fields[1].Replace('$', ':'); string toDate = fields[2].Replace('$', ':'); int activetype = Global.SafeConvertToInt32(fields[4]); //排名最低元宝要求列表,依次为第一名的最小元宝,第二名的最小元宝...... string[] minYuanBaoArr = fields[3].Split('_'); List <int> minGateValueList = new List <int>(); foreach (var item in minYuanBaoArr) { minGateValueList.Add(Global.SafeConvertToInt32(item)); } switch (activetype) { case (int)ActivityTypes.NewZoneBosskillKing: { ret = GetBossKillAward(dbMgr, pool, nID, roleID, activetype, fromDate, toDate, minGateValueList, out tcpOutPacket); break; } case (int)ActivityTypes.NewZoneConsumeKing: { ret = GetConsumeKingAward(dbMgr, pool, nID, roleID, activetype, fromDate, toDate, minGateValueList, out tcpOutPacket); break; } case (int)ActivityTypes.NewZoneFanli: { ret = GetNewFanliAward(dbMgr, pool, nID, roleID, activetype, fromDate, toDate, minGateValueList, out tcpOutPacket); break; } case (int)ActivityTypes.NewZoneRechargeKing: { ret = GetRechargeKingAward(dbMgr, pool, nID, roleID, activetype, fromDate, toDate, minGateValueList, out tcpOutPacket); break; } case (int)ActivityTypes.NewZoneUpLevelMadman: { break; } // tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)ret); } }catch (Exception ex) { } return(ret); }