public static int GetIdleSlotOfBag(GameClient client) { int idelPos = -1; int result; if (null == client.ClientData.PetList) { result = 0; } else { List <int> usedBagIndex = new List <int>(); for (int i = 0; i < client.ClientData.PetList.Count; i++) { if (usedBagIndex.IndexOf(client.ClientData.PetList[i].BagIndex) < 0) { usedBagIndex.Add(client.ClientData.PetList[i].BagIndex); } } for (int j = 0; j < CallPetManager.GetMaxPetCount(); j++) { if (usedBagIndex.IndexOf(j) < 0) { return(j); } } result = idelPos; } return(result); }
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); }