From a9b193b0135c6630edaed8e1bb9770d16bba0e9b Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 02 七月 2021 18:50:06 +0800 Subject: [PATCH] 9046 【主干】【BT2】【BT3】【后端】培养功能 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py | 133 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 132 insertions(+), 1 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py index 5c0a763..4ad4fe1 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py @@ -316,7 +316,9 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserLV, horseLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserEatItemCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, 0) - + for trainType in xrange(1, GetHorseTrainTypes() + 1): + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserTrainLV % trainType, 1) + horseID = ipyData.GetHorseSkinID() if not ItemCommon.FindItemInPackByItemID(curPlayer, horseID, IPY_GameWorld.rptEquip): isOK = ItemControler.PutItemInTempSwap(curPlayer, horseID) @@ -350,6 +352,7 @@ allAttrList = [{} for _ in range(4)] allAttrListHorseSoul = [{} for _ in range(4)] allAttrListSkin = [{} for _ in range(4)] + allAttrListTrain = [{} for _ in range(4)] horseSpeed = 0 # 坐骑功能增加的速度值,骑乘时才有效果 horseLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserLV) @@ -399,6 +402,40 @@ continue PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSkin) + # 新培养属性 + for index in xrange(ipyDataMgr.GetHorseTrainCount()): + trainIpyData = ipyDataMgr.GetHorseTrainByIndex(index) + trainType = trainIpyData.GetTrainType() + dataTrainLV = trainIpyData.GetTrainLV() + trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserTrainLV % trainType) + + if dataTrainLV > trainLV: + continue + elif dataTrainLV == trainLV: + trainItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserTrainItemCount % trainType) + else: + trainItemCount = trainIpyData.GetEatCntTotal() + + # 等阶额外属性 + lvAttrTypeList = trainIpyData.GetLVAttrTypeList() + lvAttrValueList = trainIpyData.GetLVAttrValueList() + for i, attrID in enumerate(lvAttrTypeList): + attrValue = lvAttrValueList[i] + if attrID == ShareDefine.Def_Effect_Speed: + horseSpeed += attrValue + continue + PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListTrain) + + # 培养丹增加属性 + eatCntEverytime = trainIpyData.GetEatCntEverytime() + if trainItemCount and eatCntEverytime: + eatItemAttrTypeList = trainIpyData.GetEatItemAttrTypeList() + eatItemAttrValueList = trainIpyData.GetEatItemAttrValueList() + attrMultiple = trainItemCount / eatCntEverytime + for i, attrID in enumerate(eatItemAttrTypeList): + attrValue = eatItemAttrValueList[i] + PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrListTrain) + curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Horse, initFPAdd) #GameWorld.DebugLog("坐骑功能属性: horseLV=%s,horseSpeed=%s,totalItemCount=%s,initFPAdd=%s" % (horseLV, horseSpeed, totalItemCount, initFPAdd)) @@ -414,6 +451,7 @@ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Horse, allAttrList) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSoul, allAttrListHorseSoul) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSkin, allAttrListSkin) + PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseTarin, allAttrListTrain) return #// A5 27 坐骑提升 #tagCMHorseUp @@ -502,11 +540,98 @@ RefreshHorseAttr(curPlayer) return +#// A5 31 坐骑培养 #tagCMHorseTrain +# +#struct tagCMHorseTrain +#{ +# tagHead Head; +# BYTE TrainType; //培养类型: 1-基础培养,2-特殊培养,3-百分比培养 +# WORD UseItemCnt; //消耗材料个数 +#}; +def OnHorseTrain(index, curPackData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + trainType = curPackData.TrainType # 培养类型 + costItemCount = curPackData.UseItemCnt # 消耗材料个数 + + trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserTrainLV % trainType) + curEatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserTrainItemCount % trainType) + GameWorld.DebugLog("坐骑培养: trainType=%s,trainLV=%s,costItemCount=%s,curEatItemCount=%s" + % (trainType, trainLV, costItemCount, curEatItemCount)) + + if trainType <= 0 or trainType > GetHorseTrainTypes(): + return + + if trainLV <= 0: + GameWorld.DebugLog(" 坐骑培养未激活 trainType=%s" % trainType) + return + + trainIpyData = IpyGameDataPY.GetIpyGameData("HorseTrain", trainType, trainLV) + if not trainIpyData: + return + + needRealmLV = trainIpyData.GetNeedRealmLV() + curRealmLV = curPlayer.GetOfficialRank() + if curRealmLV < needRealmLV: + GameWorld.DebugLog(" 境界不足,无法培养! curRealmLV(%s) < needRealmLV(%s)" % (curRealmLV, needRealmLV)) + return + + needEatCountTotal = trainIpyData.GetEatCntTotal() + if not needEatCountTotal: + GameWorld.DebugLog(" 该培养已满级!") + return + + costItemIDList = IpyGameDataPY.GetFuncEvalCfg("HorseTrain", 1) + costItemID = costItemIDList[trainType - 1] + if not costItemID or not costItemCount: + return + + costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount) + lackCnt = costItemCount - bindCnt - unBindCnt + if lackCnt > 0: + GameWorld.DebugLog(" 消耗道具不足,无法培养!costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" + % (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt)) + return + + delCnt = costItemCount + + # 扣除消耗 + if delCnt: + ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, ChConfig.ItemDel_Horse) + + updClassLV = trainLV + updEatItemCount = curEatItemCount + costItemCount + GameWorld.DebugLog(" updEatItemCount=%s,needEatCountTotal=%s" % (updEatItemCount, needEatCountTotal)) + + if updEatItemCount >= needEatCountTotal: + updClassLV += 1 + updEatItemCount -= needEatCountTotal + GameWorld.DebugLog(" 进阶: updClassLV=%s,updEatItemCount=%s" % (updClassLV, updEatItemCount)) + + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserTrainLV % trainType, updClassLV) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserTrainItemCount % trainType, updEatItemCount) + + # 升阶 + if updClassLV > trainLV: + pass + + Sync_HorseClassData(curPlayer) + # 刷属性,更新排行榜 + RefreshHorseAttr(curPlayer) + return + +def GetHorseTrainTypes(): + return len(IpyGameDataPY.GetFuncEvalCfg("HorseTrain", 1)) + def PlayerHorseLogin(curPlayer): ##坐骑登录处理 if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Horse): return + # 培养是后面加的功能,每次登录补检查一下功能开始时设置为培养1级 + for trainType in xrange(1, GetHorseTrainTypes() + 1): + if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserTrainLV % trainType) == 0: + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserTrainLV % trainType, 1) + Sync_HorseClassData(curPlayer) SyncHorsePetSkinData(curPlayer) return @@ -517,6 +642,12 @@ horseData.LV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserLV) horseData.EatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserEatItemCount) horseData.SkinPlusState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState) + horseData.TrainLVList = [] + horseData.TrainItemCountList = [] + for trainType in xrange(1, GetHorseTrainTypes() + 1): + horseData.TrainLVList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserTrainLV % trainType)) + horseData.TrainItemCountList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserTrainItemCount % trainType)) + horseData.TrainTypes = len(horseData.TrainLVList) NetPackCommon.SendFakePack(curPlayer, horseData) return -- Gitblit v1.8.0