public static TCPProcessCmdResults ProcessGetPetUIInfo(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, 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}, Client={1}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false)), null, true); return(TCPProcessCmdResults.RESULT_FAILED); } try { string[] fields = cmdData.Split(new char[] { ':' }); if (1 != fields.Length) { LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Client={1}, Recv={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false), fields.Length), null, true); return(TCPProcessCmdResults.RESULT_FAILED); } int roleID = Convert.ToInt32(fields[0]); GameClient client = GameManager.ClientMgr.FindClient(socket); if (KuaFuManager.getInstance().ClientCmdCheckFaild(nID, client, ref roleID)) { LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false), roleID), null, true); return(TCPProcessCmdResults.RESULT_FAILED); } string strcmd = string.Format("{0}:{1}", roleID, CallPetManager.getFreeSec(client)); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, "ProcessGetPetUIInfo", false, false); } return(TCPProcessCmdResults.RESULT_DATA); }
public static CallSpriteResult CallPet(GameClient client, int times, out string strGetGoods) { strGetGoods = ""; CallSpriteResult result; if (times != 1 && times != 10) { result = CallSpriteResult.ErrorParams; } else { CallPetType TypeData = CallPetManager.GetCallPetType(1); if (null == TypeData) { result = CallSpriteResult.ErrorConfig; } else if (client.ClientData.Level < TypeData.MinLevel) { result = CallSpriteResult.ErrorLevel; } else if (client.ClientData.Level > TypeData.MaxLevel) { result = CallSpriteResult.ErrorLevel; } else if (client.ClientData.ChangeLifeCount < TypeData.MinZhuanSheng) { result = CallSpriteResult.ErrorLevel; } else if (client.ClientData.ChangeLifeCount > TypeData.MaxZhuanSheng) { result = CallSpriteResult.ErrorLevel; } else { bool bFreeCall = false; bool bUseGoods = false; int bind = 0; if (1 == times) { if (CallPetManager.getFreeSec(client) <= 0L) { bFreeCall = true; bind = 1; } } if (!bFreeCall && CallPetManager.CallPetGoodsID > 0) { if (1 == times) { if (null != Global.GetGoodsByID(client, CallPetManager.CallPetGoodsID)) { bUseGoods = true; bind = 1; } } } int nNeedLuckStar = CallPetManager.GetCallPetPrice(times); if (nNeedLuckStar < 0) { result = CallSpriteResult.ErrorConfig; } else { if (!bFreeCall && !bUseGoods) { if (Global.IsRoleHasEnoughMoney(client, nNeedLuckStar, 163) < 0 && !HuanLeDaiBiManager.GetInstance().HuanledaibiReplaceEnough(client, nNeedLuckStar, DaiBiSySType.JingLingLieQu)) { return(CallSpriteResult.ZuanShiNotEnough); } } if (CallPetManager.GetMaxPetCount() - CallPetManager.GetPetListCount(client) < times) { result = CallSpriteResult.SpriteBagIsFull; } else { if (!bFreeCall) { if (bUseGoods) { bool usedBinding = false; bool usedTimeLimited = false; if (!GameManager.ClientMgr.NotifyUseGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, CallPetManager.CallPetGoodsID, 1, false, out usedBinding, out usedTimeLimited, false)) { bUseGoods = false; } } } if (!bFreeCall && !bUseGoods) { if (!GameManager.ClientMgr.ModifyLuckStarValue(client, -nNeedLuckStar, "精灵召唤", false, DaiBiSySType.JingLingLieQu)) { return(CallSpriteResult.ZuanShiNotEnough); } bind = 0; } for (int i = 0; i < times; i++) { CallPetConfig CfgData = null; List <CallPetConfig> CfgList = CallPetManager.GetCallPetConfigList(bFreeCall || bUseGoods); if (CfgList == null || CfgList.Count <= 0) { return(CallSpriteResult.ErrorConfig); } int random = Global.GetRandomNumber(1, 100001); foreach (CallPetConfig item in CfgList) { if (random >= item.StartValues && random <= item.EndValues) { CfgData = item; break; } } LogManager.WriteLog(LogTypes.Info, string.Format("获取精灵随机数: random = {0}, GoodsID = {1}", random, CfgData.GoodsID), null, true); if (null != CfgData) { int nExcellenceProp = 0; if (CfgData.ZhuoYueFallID != -1) { nExcellenceProp = GameManager.GoodsPackMgr.GetExcellencePropertysID(CfgData.GoodsID, CfgData.ZhuoYueFallID); } Global.AddGoodsDBCommand(Global._TCPManager.TcpOutPacketPool, client, CfgData.GoodsID, CfgData.Num, 0, "", 0, bind, 4000, "", false, 1, "精灵召唤", "1900-01-01 12:00:00", 0, 0, 0, 0, nExcellenceProp, 0, 0, null, null, 0, true); strGetGoods += string.Format("{0},{1},{2},{3},{4},{5},{6}|", new object[] { CfgData.GoodsID, CfgData.Num, bind, 0, 0, 0, nExcellenceProp }); } } if (bFreeCall) { Global.UpdateRoleParamByName(client, "CallPetFreeTime", Global.GetOffsetSecond(TimeUtil.NowDateTime()).ToString(), true); if (client._IconStateMgr.CheckPetIcon(client)) { client._IconStateMgr.SendIconStateToClient(client); } } else if (!bUseGoods) { int nPetJiFen = (int)((double)nNeedLuckStar * CallPetManager.ConsumeCallPetJiFen); GameManager.ClientMgr.ModifyPetJiFenValue(client, nPetJiFen, "精灵召唤", false, true); } result = CallSpriteResult.Success; } } } } return(result); }