9733 【越南】【主干】【BT7】坐骑幻化支持超过31个
| | |
| | | Head = tagHead()
|
| | | LV = 0 #(BYTE LV)//等阶
|
| | | EatItemCount = 0 #(DWORD EatItemCount)//当前阶已吃丹个数
|
| | | SkinPlusState = 0 #(DWORD SkinPlusState)//幻化激活状态,按位存储是否激活,幻化编号ID对应位
|
| | | SkinPlusState = 0 #(DWORD SkinPlusState)//幻化激活状态,按位存储是否激活,幻化编号ID对应位,废弃,使用 SkinPlusStateList
|
| | | TrainTypes = 0 #(BYTE TrainTypes)//培养类型数
|
| | | TrainLVList = list() #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1
|
| | | TrainItemCountList = list() #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1
|
| | | SkinPlusStateCount = 0 #(BYTE SkinPlusStateCount)//幻化激活状态值数
|
| | | SkinPlusStateList = list() #(vector<DWORD> SkinPlusStateList)//幻化激活状态值列表,按位存储是否激活,幻化编号ID对应位
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | for i in range(self.TrainTypes):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.TrainItemCountList.append(value)
|
| | | self.SkinPlusStateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.SkinPlusStateCount):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.SkinPlusStateList.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | |
| | | self.TrainTypes = 0
|
| | | self.TrainLVList = list()
|
| | | self.TrainItemCountList = list()
|
| | | self.SkinPlusStateCount = 0
|
| | | self.SkinPlusStateList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 1
|
| | | length += 4 * self.TrainTypes
|
| | | length += 4 * self.TrainTypes
|
| | | length += 1
|
| | | length += 4 * self.SkinPlusStateCount
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteDWORD(data, self.TrainLVList[i])
|
| | | for i in range(self.TrainTypes):
|
| | | data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.SkinPlusStateCount)
|
| | | for i in range(self.SkinPlusStateCount):
|
| | | data = CommFunc.WriteDWORD(data, self.SkinPlusStateList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | |
| | | SkinPlusState:%d,
|
| | | TrainTypes:%d,
|
| | | TrainLVList:%s,
|
| | | TrainItemCountList:%s
|
| | | TrainItemCountList:%s,
|
| | | SkinPlusStateCount:%d,
|
| | | SkinPlusStateList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | |
| | | self.SkinPlusState,
|
| | | self.TrainTypes,
|
| | | "...",
|
| | | "...",
|
| | | self.SkinPlusStateCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
| | | # 坐骑
|
| | | Def_PDict_HorserLV = "HorserLV" # 坐骑等级
|
| | | Def_PDict_HorserEatItemCount = "HorserEatItemCount" # 当前阶已吃培养丹个数
|
| | | Def_PDict_HorserSkinPlusState = "HorserSkinPlusState" # 坐骑幻化皮肤激活状态,按二进制位存储,每位代表幻化ID是否已激活
|
| | | Def_PDict_HorserSkinPlusState = "HorserSkinPlusState%s" # 坐骑幻化皮肤激活状态,按二进制位存储,每位代表幻化ID是否已激活,支持多值
|
| | | Def_PDict_HorserSkinEndTime = "HorserSkinEndTime_%s" # 坐骑幻化皮肤激活结束时间戳,仅针对非永久的幻化皮肤
|
| | | Def_PDict_HorserTrainLV = "HorserTrainLV_%s" # 坐骑培养等阶,参数(培养类型)
|
| | | Def_PDict_HorserTrainItemCount = "HorserTrainItemCount_%s" # 坐骑培养当前阶已吃培养丹个数,参数(培养类型)
|
| | |
| | | Head = tagHead()
|
| | | LV = 0 #(BYTE LV)//等阶
|
| | | EatItemCount = 0 #(DWORD EatItemCount)//当前阶已吃丹个数
|
| | | SkinPlusState = 0 #(DWORD SkinPlusState)//幻化激活状态,按位存储是否激活,幻化编号ID对应位
|
| | | SkinPlusState = 0 #(DWORD SkinPlusState)//幻化激活状态,按位存储是否激活,幻化编号ID对应位,废弃,使用 SkinPlusStateList
|
| | | TrainTypes = 0 #(BYTE TrainTypes)//培养类型数
|
| | | TrainLVList = list() #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1
|
| | | TrainItemCountList = list() #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1
|
| | | SkinPlusStateCount = 0 #(BYTE SkinPlusStateCount)//幻化激活状态值数
|
| | | SkinPlusStateList = list() #(vector<DWORD> SkinPlusStateList)//幻化激活状态值列表,按位存储是否激活,幻化编号ID对应位
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | for i in range(self.TrainTypes):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.TrainItemCountList.append(value)
|
| | | self.SkinPlusStateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.SkinPlusStateCount):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.SkinPlusStateList.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | |
| | | self.TrainTypes = 0
|
| | | self.TrainLVList = list()
|
| | | self.TrainItemCountList = list()
|
| | | self.SkinPlusStateCount = 0
|
| | | self.SkinPlusStateList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 1
|
| | | length += 4 * self.TrainTypes
|
| | | length += 4 * self.TrainTypes
|
| | | length += 1
|
| | | length += 4 * self.SkinPlusStateCount
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteDWORD(data, self.TrainLVList[i])
|
| | | for i in range(self.TrainTypes):
|
| | | data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.SkinPlusStateCount)
|
| | | for i in range(self.SkinPlusStateCount):
|
| | | data = CommFunc.WriteDWORD(data, self.SkinPlusStateList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | |
| | | SkinPlusState:%d,
|
| | | TrainTypes:%d,
|
| | | TrainLVList:%s,
|
| | | TrainItemCountList:%s
|
| | | TrainItemCountList:%s,
|
| | | SkinPlusStateCount:%d,
|
| | | SkinPlusStateList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | |
| | | self.SkinPlusState,
|
| | | self.TrainTypes,
|
| | | "...",
|
| | | "...",
|
| | | self.SkinPlusStateCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
| | | import PlayerControl
|
| | | import PlayerHorse
|
| | | import IpyGameDataPY
|
| | | import time
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | #逻辑实现
|
| | |
| | | GameWorld.DebugAnswer(curPlayer, "重置所有: Horse 0")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置进阶: Horse 等阶 丹数")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置培养: Horse 培养类型 等阶 丹数")
|
| | | GameWorld.DebugAnswer(curPlayer, "全部幻化: Horse skin 1")
|
| | | GameWorld.DebugAnswer(curPlayer, "重置幻化: Horse skin 0")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置幻化: Horse skin 幻化ID 状态")
|
| | | return
|
| | |
|
| | | if len(msgList) == 1:
|
| | | if msgList[0] == "skin":
|
| | | if len(msgList) == 2:
|
| | | skinState = msgList[1]
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
|
| | | skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
|
| | | skinID = skinPlusIpyData.GetID()
|
| | | __GMSetHorseSkinState(curPlayer, skinID, skinState, skinPlusIpyData.GetSkinValidTime())
|
| | | elif len(msgList) == 3:
|
| | | skinID = msgList[1]
|
| | | skinState = msgList[2]
|
| | | skinPlusIpyData = IpyGameDataPY.GetIpyGameData("HorseSkinPlus", skinID)
|
| | | if not skinPlusIpyData:
|
| | | GameWorld.DebugAnswer(curPlayer, "坐骑幻化ID不存在! skinID=%s" % skinID)
|
| | | return
|
| | | __GMSetHorseSkinState(curPlayer, skinID, skinState, skinPlusIpyData.GetSkinValidTime())
|
| | | else:
|
| | | return
|
| | | |
| | | elif len(msgList) == 1:
|
| | | if msgList[0] == 0:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserLV, 1)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserEatItemCount, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, 0)
|
| | | for trainType in xrange(1, PlayerHorse.GetHorseTrainTypes() + 1):
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserTrainLV % trainType, 1)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserTrainItemCount % trainType, 0)
|
| | |
| | | skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
|
| | | skinID = skinPlusIpyData.GetID()
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, 0)
|
| | | GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, skinID, 0)
|
| | |
|
| | | elif len(msgList) == 2:
|
| | | lv, eatItemCount = msgList
|
| | |
| | | PlayerHorse.PlayerHorseLogin(curPlayer)
|
| | | return
|
| | |
|
| | | def __GMSetHorseSkinState(curPlayer, skinID, skinState, validTime=0):
|
| | | if not skinState:
|
| | | GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, skinID, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, 0)
|
| | | else:
|
| | | GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, skinID, 1)
|
| | | if validTime > 0:
|
| | | updSkinEndTime = int(time.time()) + validTime
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, updSkinEndTime)
|
| | | return
|
| | |
|
| | |
| | | if not ipyData:
|
| | | return
|
| | |
|
| | | activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState)
|
| | | updSkinEndTime = 0
|
| | | validTime = ipyData.GetSkinValidTime()
|
| | | if validTime:
|
| | |
| | | else:
|
| | | updSkinEndTime = skinEndTime + validTime
|
| | | else:
|
| | | if activateState & pow(2, activateID):
|
| | | GameWorld.DebugLog("该坐骑已幻化!activateState=%s,activateID=%s" % (activateState, activateID))
|
| | | if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, activateID):
|
| | | GameWorld.DebugLog("该坐骑已幻化! activateID=%s" % activateID)
|
| | | return
|
| | |
|
| | | needItemID = ipyData.GetUnlockItemID()
|
| | |
| | | GameWorld.DebugLog("坐骑幻化时效 activateID=%s,updSkinEndTime=%s(%s)" % (activateID, updSkinEndTime, GameWorld.ChangeTimeNumToStr(updSkinEndTime)), playerID)
|
| | |
|
| | | #时效及非时效该状态均设置激活
|
| | | updActivateState = activateState|pow(2, activateID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, updActivateState)
|
| | | activateState, updActivateState = GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, activateID, 1)
|
| | |
|
| | | playerEquip = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
| | | itemRideHorse = playerEquip.GetAt(Def_HorseEquipIndex)
|
| | |
| | | paramList = [skinItemID]
|
| | | PlayerControl.SendMailByKey("HorseSkinInvalidNotify", [playerID], addItemList, paramList)
|
| | |
|
| | | activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState)
|
| | | updActivateState = GameWorld.SetBitValue(activateState, skinID, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, updActivateState)
|
| | | activateState, updActivateState = GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, skinID, 0)
|
| | | GameWorld.Log("坐骑幻化过期更新状态! skinID=%s,activateState=%s,updActivateState=%s" % (skinID, activateState, updActivateState), playerID)
|
| | | Sync_HorseClassData(curPlayer)
|
| | | return False
|
| | | else:
|
| | | activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState)
|
| | | if not activateState & pow(2, skinID):
|
| | | if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, skinID):
|
| | | #GameWorld.DebugLog("坐骑幻化未激活! skinID=%s,activateState=%s" % (skinID, activateState), curPlayer.GetPlayerID())
|
| | | return False
|
| | | return True
|
| | |
| | |
|
| | | 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)
|
| | |
|
| | |
| | | skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
|
| | | skinID = skinPlusIpyData.GetID()
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, 0)
|
| | | GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, skinID, 0)
|
| | |
|
| | | horseID = ipyData.GetHorseSkinID()
|
| | | if not ItemCommon.FindItemInPackByItemID(curPlayer, horseID, IPY_GameWorld.rptEquip):
|
| | |
| | | if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Horse):
|
| | | return
|
| | |
|
| | | # 坐骑幻化状态多值支持修改,线上版本做旧值转移
|
| | | oldVerSkinStateKey = "HorserSkinPlusState"
|
| | | oldVerSkinStateValue = curPlayer.NomalDictGetProperty(oldVerSkinStateKey)
|
| | | if oldVerSkinStateValue:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState % 0, oldVerSkinStateValue)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, oldVerSkinStateKey, 0)
|
| | | GameWorld.Log("线上版本转移坐骑幻化状态记录字典值! oldVerSkinStateValue=%s" % (oldVerSkinStateValue), curPlayer.GetPlayerID())
|
| | | |
| | | # 培养是后面加的功能,每次登录补检查一下功能开始时设置为培养1级
|
| | | for trainType in xrange(1, GetHorseTrainTypes() + 1):
|
| | | if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserTrainLV % trainType) == 0:
|
| | |
| | | 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)
|
| | | horseData.SkinPlusStateList = GetHorseSkinPlusStateList(curPlayer)
|
| | | horseData.SkinPlusStateCount = len(horseData.SkinPlusStateList)
|
| | | NetPackCommon.SendFakePack(curPlayer, horseData)
|
| | | return
|
| | |
|
| | | def GetHorseSkinPlusStateList(curPlayer):
|
| | | maxSkinID = 0
|
| | | skinPlusStateList = []
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | skinCnt = ipyDataMgr.GetHorseSkinPlusCount()
|
| | | for index in xrange(skinCnt):
|
| | | maxSkinID = max(maxSkinID, ipyDataMgr.GetHorseSkinPlusByIndex(index).GetID())
|
| | | for index in xrange(maxSkinID / 31+1):
|
| | | skinPlusStateList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState % index))
|
| | | return skinPlusStateList
|
| | |
|
| | | def GetHorseSumLV(curPlayer):
|
| | | ## 坐骑总等级
|
| | | return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserLV)
|
| | |
| | | import PlayerAttrFruit
|
| | | import ItemControler
|
| | | import IpyGameDataPY
|
| | | import PlayerHorse
|
| | | import ChEquip
|
| | | import FBCommon
|
| | | import BossHurtMng
|
| | |
| | | skinEndTimeInfo[skinID] = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinEndTime % skinID)
|
| | | horseInfo = {"LV":curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserLV),
|
| | | "EatItemCount":curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserEatItemCount),
|
| | | "SkinPlusState":curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState),
|
| | | "SkinPlusStateList":PlayerHorse.GetHorseSkinPlusStateList(curPlayer),
|
| | | "SkinEndTimeInfo":skinEndTimeInfo,
|
| | | }
|
| | | return horseInfo
|