9300 【BT5】【主干】【后端】新增:法器进阶
| | |
| | | DWORD FamilyStoreItemScore; //仙盟宝库积分
|
| | | };
|
| | |
|
| | | //法器升级表
|
| | |
|
| | | struct tagFaQiLVUp
|
| | | {
|
| | | BYTE _FaQiLV; //法器等级
|
| | | WORD NeedEatCount; //升级所需个数(非累计)
|
| | | list LVAttrType; //每级额外属性类型(非累积)
|
| | | list LVAttrValue; //每级额外属性值(非累积)
|
| | | list UpItemAttrType; //每x个培养丹增加属性类型,x=UpEatItemPerCount
|
| | | list UpItemAttrValue; //每x个培养丹增加属性值,x=UpEatItemPerCount
|
| | | DWORD UpEatItemPerCount; //每次培养消耗x个
|
| | | };
|
| | |
|
| | | //坐骑升级表
|
| | |
|
| | | struct tagHorseLVUp
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 32 法器升级 #tagCMFaQiLVUp
|
| | |
|
| | | class tagCMFaQiLVUp(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("UseItemCnt", c_ushort), #消耗材料个数
|
| | | ("IsAutoBuy", c_ubyte), #是否自动购买
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x32
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x32
|
| | | self.UseItemCnt = 0
|
| | | self.IsAutoBuy = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMFaQiLVUp)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A5 32 法器升级 //tagCMFaQiLVUp:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | UseItemCnt:%d,
|
| | | IsAutoBuy:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.UseItemCnt,
|
| | | self.IsAutoBuy
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMFaQiLVUp=tagCMFaQiLVUp()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFaQiLVUp.Cmd,m_NAtagCMFaQiLVUp.SubCmd))] = m_NAtagCMFaQiLVUp
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 1C 聚魂合成 #tagCMGatherSoulCompound
|
| | |
|
| | | class tagCMGatherSoulCompound(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 54 法器信息 #tagMCFaQiInfo
|
| | |
|
| | | class tagMCFaQiInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("LV", c_ubyte), #等阶
|
| | | ("EatItemCount", c_int), #当前阶已吃丹个数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x54
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x54
|
| | | self.LV = 0
|
| | | self.EatItemCount = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCFaQiInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 54 法器信息 //tagMCFaQiInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | LV:%d,
|
| | | EatItemCount:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.LV,
|
| | | self.EatItemCount
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCFaQiInfo=tagMCFaQiInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFaQiInfo.Cmd,m_NAtagMCFaQiInfo.SubCmd))] = m_NAtagMCFaQiInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo
|
| | |
|
| | | class tagMCFBEncourageCnt(Structure):
|
| | |
| | | GameFuncID_SuperGift = 150 # 超值礼包
|
| | | GameFuncID_ZhuXianBoss = 163 # 诛仙BOSS
|
| | | GameFuncID_Arena = 195 # 竞技场
|
| | | GameFuncID_FaQi = 199 # 法器
|
| | | # 以下为暂时无用的
|
| | | GameFuncID_Truck = 33 # 运镖
|
| | | GameFuncID_RunDaily = 34 # 日常跑环
|
| | |
| | | ClientServerMsg_CollectNPC = "CollectNPC" # 采集NPC
|
| | | ClientServerMsg_EnterFB = "EnterFB" # 请求进入跨服副本
|
| | | ClientServerMsg_AddBuff = "AddBuff" # 添加BUFF
|
| | | ClientServerMsg_LuckyCloudBuy = "LuckyCloudBuy" # 幸运云购
|
| | |
|
| | | #跨服广播类型定义
|
| | | CrossNotify_CrossAct = "CrossAct"
|
| | |
| | | Def_MFPType_MagicWeapon3, # 仙族法宝 17
|
| | | Def_MFPType_PetSoul, # 灵宠魂石 18
|
| | | Def_MFPType_HorseSoul, # 坐骑魂石 19
|
| | | Def_MFPType_20,
|
| | | Def_MFPType_FaQi, # 法器 20
|
| | | Def_MFPType_Dogz, # 神兽 21
|
| | | Def_MFPType_GatherSoul, # 聚魂 22
|
| | | Def_MFPType_MagicWeapon4, # 王者法宝 23
|
| | |
| | | PacketSubCMD_6=0x08
|
| | | PacketCallFunc_6=OnItemTimeout
|
| | |
|
| | | ;法器
|
| | | [PlayerFaQi]
|
| | | ScriptName = Player\PlayerFaQi.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 1
|
| | |
|
| | | PacketCMD_1=0xA5
|
| | | PacketSubCMD_1=0x32
|
| | | PacketCallFunc_1=OnFaQiLVUp
|
| | |
|
| | | ;坐骑培养
|
| | | [PlayerHorse]
|
| | | ScriptName = Player\PlayerHorse.py
|
| | |
| | | Def_PDict_OSC_RecordData = "OSCRecordData_%s" # 开服活动记录数值, 参数(活动类型)
|
| | | Def_PDict_OSC_EndMailState = "EndMailState" # 开服活动结束发放邮件处理状态, 记录该状态的目的是防止开服活动版本变更导致旧号重复补发奖励;
|
| | |
|
| | | # 法器
|
| | | Def_PDict_FaQiLV = "FaQiLV" # 法器等级
|
| | | Def_PDict_FaQiEatItemCount = "FaQiEatItemCount" # 当前阶已吃丹个数
|
| | |
|
| | | # 坐骑
|
| | | Def_PDict_HorserLV = "HorserLV" # 坐骑等级
|
| | | Def_PDict_HorserEatItemCount = "HorserEatItemCount" # 当前阶已吃培养丹个数
|
| | |
| | | Def_CalcAttrFunc_WingTarin, # 翅膀培养 45
|
| | | Def_CalcAttrFunc_PeerlessWeaponTrain, # 灭世培养 46
|
| | | Def_CalcAttrFunc_PeerlessWeapon2Train, # 噬魂培养 47
|
| | | ) = range(48)
|
| | | Def_CalcAttrFunc_FaQi, # 法器 48
|
| | | ) = range(49)
|
| | |
|
| | | # 技能功能点列表 - 默认不算战力,不享受百分比加成,技能功能点暂时配置,之后优化技能属性逻辑后可去掉
|
| | | CalcAttrFuncSkillList = [Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_PetSkill, Def_CalcAttrFunc_DogzBattleSkill]
|
| | |
| | | ShareDefine.Def_MFPType_PetSoul:[Def_CalcAttrFunc_PetSoul],
|
| | | ShareDefine.Def_MFPType_Horse:[Def_CalcAttrFunc_Horse, Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_HorseSkin, Def_CalcAttrFunc_HorseTarin],
|
| | | ShareDefine.Def_MFPType_HorseSoul:[Def_CalcAttrFunc_HorseSoul],
|
| | | ShareDefine.Def_MFPType_FaQi:[Def_CalcAttrFunc_FaQi],
|
| | | ShareDefine.Def_MFPType_Prestige:[Def_CalcAttrFunc_Prestige],
|
| | | ShareDefine.Def_MFPType_GodWeapon:[Def_CalcAttrFunc_GodWeapon],
|
| | | ShareDefine.Def_MFPType_Dienstgrad:[Def_CalcAttrFunc_Dienstgrad],
|
| | |
| | | Def_Cost_BuyKillBossCnt, #购买boss次数
|
| | | Def_Cost_EquipStar, #装备升星
|
| | | Def_Cost_ActivityPlace, #活跃放置 50
|
| | | Def_Cost_FaQi, # 法器
|
| | | #-----------以下为暂时没用的,先不删除,如有新增消费点则放在这些之前------------
|
| | | Def_Cost_RefreshArrestTask, # 刷新悬赏任务
|
| | | Def_Cost_OffLineExp, # 兑换离线经验
|
| | |
| | | Def_Cost_Trade, # 交易
|
| | | Def_Cost_Rename, # 改名
|
| | | Def_Cost_SkillLvUp, # 技能升级
|
| | | ) = range(2000, 2000 + 62)
|
| | | ) = range(2000, 2000 + 63)
|
| | |
|
| | | Def_Cost_Reason_SonKey = "reason_name_son" # 消费点原因子类说明key
|
| | |
|
| | |
| | | Def_Cost_BuyKillBossCnt:"BuyKillBossCnt",
|
| | | Def_Cost_EquipStar:"EquipStar",
|
| | | Def_Cost_ActivityPlace:"ActivityPlace",
|
| | | Def_Cost_FaQi:"FaQi",
|
| | | }
|
| | | ## -----------------------------------------------------
|
| | |
|
| | |
| | | ItemDel_HorsePetAwake, # 骑宠觉醒
|
| | | ItemDel_ActivityPlace, # 活跃放置
|
| | | ItemDel_AuctionHouse, # 拍卖
|
| | | ) = range(2000, 2000 + 44)
|
| | | ItemDel_FaQi, # 法器
|
| | | ) = range(2000, 2000 + 45)
|
| | |
|
| | | # 物品扣除类型对应信息 {类型:eventName, ...}
|
| | | ItemDelTypeDict = {
|
| | |
| | | ItemDel_HorsePetAwake:"HorsePetAwake",
|
| | | ItemDel_ActivityPlace:"ActivityPlace",
|
| | | ItemDel_AuctionHouse:"AuctionHouse",
|
| | | ItemDel_FaQi:"FaQi",
|
| | | }
|
| | |
|
| | | ##==================================================================================================
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 32 法器升级 #tagCMFaQiLVUp
|
| | |
|
| | | class tagCMFaQiLVUp(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("UseItemCnt", c_ushort), #消耗材料个数
|
| | | ("IsAutoBuy", c_ubyte), #是否自动购买
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x32
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x32
|
| | | self.UseItemCnt = 0
|
| | | self.IsAutoBuy = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMFaQiLVUp)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A5 32 法器升级 //tagCMFaQiLVUp:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | UseItemCnt:%d,
|
| | | IsAutoBuy:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.UseItemCnt,
|
| | | self.IsAutoBuy
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMFaQiLVUp=tagCMFaQiLVUp()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFaQiLVUp.Cmd,m_NAtagCMFaQiLVUp.SubCmd))] = m_NAtagCMFaQiLVUp
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 1C 聚魂合成 #tagCMGatherSoulCompound
|
| | |
|
| | | class tagCMGatherSoulCompound(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 54 法器信息 #tagMCFaQiInfo
|
| | |
|
| | | class tagMCFaQiInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("LV", c_ubyte), #等阶
|
| | | ("EatItemCount", c_int), #当前阶已吃丹个数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x54
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x54
|
| | | self.LV = 0
|
| | | self.EatItemCount = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCFaQiInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 54 法器信息 //tagMCFaQiInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | LV:%d,
|
| | | EatItemCount:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.LV,
|
| | | self.EatItemCount
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCFaQiInfo=tagMCFaQiInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFaQiInfo.Cmd,m_NAtagMCFaQiInfo.SubCmd))] = m_NAtagMCFaQiInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo
|
| | |
|
| | | class tagMCFBEncourageCnt(Structure):
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package GM.Commands.FaQi
|
| | | #
|
| | | # @todo:法器
|
| | | # @author hxp
|
| | | # @date 2021-10-14
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 法器
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2021-10-14 15:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import ChConfig
|
| | | import GameWorld
|
| | | import PlayerControl
|
| | | import PlayerFaQi
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | #逻辑实现
|
| | |
|
| | | ## GM命令执行入口
|
| | | # @param curPlayer 当前玩家
|
| | | # @param msgList 参数列表
|
| | | # @return None
|
| | | # @remarks 函数详细说明.
|
| | | def OnExec(curPlayer, msgList):
|
| | | |
| | | if not msgList:
|
| | | GameWorld.DebugAnswer(curPlayer, "重置法器: FaQi 0")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置法器: FaQi 等阶 本阶已吃丹数")
|
| | | return
|
| | | |
| | | if len(msgList) == 1:
|
| | | if msgList[0] == 0:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiLV, 1)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiEatItemCount, 0)
|
| | | |
| | | elif len(msgList) == 2:
|
| | | lv, eatItemCount = msgList
|
| | | if lv < 1:
|
| | | GameWorld.DebugAnswer(curPlayer, "等级不能小于1")
|
| | | return
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiLV, lv)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiEatItemCount, eatItemCount)
|
| | | |
| | | else:
|
| | | return
|
| | | |
| | | PlayerFaQi.RefreshFaQiAttr(curPlayer)
|
| | | PlayerFaQi.PlayerFaQiLogin(curPlayer)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | ShareDefine.Def_MFPType_MagicWeapon4:"王者",
|
| | | ShareDefine.Def_MFPType_PetSoul:"宠魂",
|
| | | ShareDefine.Def_MFPType_HorseSoul:"骑魂",
|
| | | ShareDefine.Def_MFPType_FaQi:"法器",
|
| | | ShareDefine.Def_MFPType_Dogz:"神兽",
|
| | | ShareDefine.Def_MFPType_Coat:"ʱװ",
|
| | | ShareDefine.Def_MFPType_Other:"其他",
|
| | |
| | | ChConfig.Def_CalcAttrFunc_WingTarin:"翅膀培养",
|
| | | ChConfig.Def_CalcAttrFunc_PeerlessWeaponTrain:"灭世培养",
|
| | | ChConfig.Def_CalcAttrFunc_PeerlessWeapon2Train:"噬魂培养",
|
| | | ChConfig.Def_CalcAttrFunc_FaQi:"法器",
|
| | | }
|
| | |
|
| | | GameWorld.DebugAnswer(curPlayer, "PrintFightPower 模块类型(可选)")
|
| | |
| | | ("DWORD", "FamilyStoreItemScore", 0),
|
| | | ),
|
| | |
|
| | | "FaQiLVUp":(
|
| | | ("BYTE", "FaQiLV", 1),
|
| | | ("WORD", "NeedEatCount", 0),
|
| | | ("list", "LVAttrType", 0),
|
| | | ("list", "LVAttrValue", 0),
|
| | | ("list", "UpItemAttrType", 0),
|
| | | ("list", "UpItemAttrValue", 0),
|
| | | ("DWORD", "UpEatItemPerCount", 0),
|
| | | ),
|
| | |
|
| | | "HorseLVUp":(
|
| | | ("BYTE", "HorseLV", 1),
|
| | | ("DWORD", "HorseSkinID", 0),
|
| | |
| | | def GetEquipClass(self): return self.EquipClass # 装备阶数
|
| | | def GetExp(self): return self.Exp # 获得灵兽升级经验
|
| | | def GetFamilyStoreItemScore(self): return self.FamilyStoreItemScore # 仙盟宝库积分 |
| | | |
| | | # 法器升级表 |
| | | class IPY_FaQiLVUp(): |
| | | |
| | | def __init__(self): |
| | | self.FaQiLV = 0
|
| | | self.NeedEatCount = 0
|
| | | self.LVAttrType = []
|
| | | self.LVAttrValue = []
|
| | | self.UpItemAttrType = []
|
| | | self.UpItemAttrValue = []
|
| | | self.UpEatItemPerCount = 0 |
| | | return |
| | | |
| | | def GetFaQiLV(self): return self.FaQiLV # 法器等级
|
| | | def GetNeedEatCount(self): return self.NeedEatCount # 升级所需个数(非累计)
|
| | | def GetLVAttrType(self): return self.LVAttrType # 每级额外属性类型(非累积)
|
| | | def GetLVAttrValue(self): return self.LVAttrValue # 每级额外属性值(非累积)
|
| | | def GetUpItemAttrType(self): return self.UpItemAttrType # 每x个培养丹增加属性类型,x=UpEatItemPerCount
|
| | | def GetUpItemAttrValue(self): return self.UpItemAttrValue # 每x个培养丹增加属性值,x=UpEatItemPerCount
|
| | | def GetUpEatItemPerCount(self): return self.UpEatItemPerCount # 每次培养消耗x个 |
| | | |
| | | # 坐骑升级表 |
| | | class IPY_HorseLVUp(): |
| | |
| | | self.ipyPetClassCostLen = len(self.ipyPetClassCostCache)
|
| | | self.ipyPetEatEquipCache = self.__LoadFileData("PetEatEquip", IPY_PetEatEquip)
|
| | | self.ipyPetEatEquipLen = len(self.ipyPetEatEquipCache)
|
| | | self.ipyFaQiLVUpCache = self.__LoadFileData("FaQiLVUp", IPY_FaQiLVUp)
|
| | | self.ipyFaQiLVUpLen = len(self.ipyFaQiLVUpCache)
|
| | | self.ipyHorseLVUpCache = self.__LoadFileData("HorseLVUp", IPY_HorseLVUp)
|
| | | self.ipyHorseLVUpLen = len(self.ipyHorseLVUpCache)
|
| | | self.ipyHorseTrainCache = self.__LoadFileData("HorseTrain", IPY_HorseTrain)
|
| | |
| | | def GetPetClassCostByIndex(self, index): return self.ipyPetClassCostCache[index]
|
| | | def GetPetEatEquipCount(self): return self.ipyPetEatEquipLen
|
| | | def GetPetEatEquipByIndex(self, index): return self.ipyPetEatEquipCache[index]
|
| | | def GetFaQiLVUpCount(self): return self.ipyFaQiLVUpLen
|
| | | def GetFaQiLVUpByIndex(self, index): return self.ipyFaQiLVUpCache[index]
|
| | | def GetHorseLVUpCount(self): return self.ipyHorseLVUpLen
|
| | | def GetHorseLVUpByIndex(self, index): return self.ipyHorseLVUpCache[index]
|
| | | def GetHorseTrainCount(self): return self.ipyHorseTrainLen
|
| | |
| | | import PlayerDogz
|
| | | import PlayerCoat
|
| | | import PlayerFB
|
| | | import PlayerFaQi
|
| | | import SkillShell
|
| | | import PlayerYinji
|
| | | import GameObj
|
| | |
| | | # 坐骑相关通知
|
| | | PlayerHorse.PlayerHorseLogin(curPlayer)
|
| | |
|
| | | # 法器
|
| | | PlayerFaQi.PlayerFaQiLogin(curPlayer)
|
| | | |
| | | PlayerTreasure.OnTreasureLogin(curPlayer)
|
| | |
|
| | | # 通知累计登陆礼
|
| | |
| | | import ItemCommon
|
| | | import ItemControler
|
| | | import PlayerArena
|
| | | import PlayerFaQi
|
| | | import PlayerTJG
|
| | |
|
| | |
|
| | |
| | | ShareDefine.GameFuncID_Talent:lambda curObj:PlayerGreatMaster.DoTalentOpen(curObj),
|
| | | ShareDefine.GameFuncID_TJG:lambda curObj:PlayerTJG.DoTJGOpen(curObj),
|
| | | ShareDefine.GameFuncID_Arena:lambda curObj:PlayerArena.DoArenaOpen(curObj),
|
| | | ShareDefine.GameFuncID_FaQi:lambda curObj:PlayerFaQi.DoFaQiOpen(curObj),
|
| | | #ShareDefine.GameFuncID_RunDaily:lambda curObj:FBCommon.DoFuncOpen_RunDaily(curObj),
|
| | | #ShareDefine.GameFuncID_RunFamily:lambda curObj:FBCommon.DoFuncOpen_RunFamily(curObj),
|
| | | #ShareDefine.GameFuncID_RefineExp:lambda curObj:Operate_PlayerBuyZhenQi.DoFuncOpen_RefineExp(curObj),
|
| | |
| | | import PlayerState
|
| | | import QuestCommon
|
| | | import PlayerDogz
|
| | | import PlayerFaQi
|
| | | import ChPlayer
|
| | | import GMShell
|
| | | import GameObj
|
| | |
| | | PlayerDogz.RefreshDogzAttr(curPlayer)
|
| | | PlayerGatherSoul.RefreshGatherSoulAttr(curPlayer)
|
| | | PlayerCoat.CalcClothesCoatSkinAttr(curPlayer)
|
| | | PlayerFaQi.CalcFaQiAttr(curPlayer)
|
| | | self.RefreshAllState(isForce=True)
|
| | | GameWorld.DebugLog("End ReCalcAllState!!!")
|
| | | return
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Player.PlayerFaQi
|
| | | #
|
| | | # @todo:法器系统
|
| | | # @author hxp
|
| | | # @date 2021-10-13
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 法器系统
|
| | | #
|
| | | # 注: 与法宝系统没有关系
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2021-10-14 15:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameWorld
|
| | | import IPY_GameWorld
|
| | | import PlayerControl
|
| | | import ChPyNetSendPack
|
| | | import NetPackCommon
|
| | | import IpyGameDataPY
|
| | | import ItemCommon
|
| | | import ChConfig
|
| | |
|
| | | def DoFaQiOpen(curPlayer):
|
| | | ## 功能开启
|
| | | faQiLV = 1
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("FaQiLVUp", faQiLV)
|
| | | if not ipyData:
|
| | | return
|
| | | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiLV, faQiLV)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiEatItemCount, 0)
|
| | | |
| | | GameWorld.DebugLog("法器功能开启! faQiLV=%s" % faQiLV)
|
| | | Sync_FaQiLVInfo(curPlayer)
|
| | | RefreshFaQiAttr(curPlayer)
|
| | | return True
|
| | |
|
| | | def PlayerFaQiLogin(curPlayer):
|
| | | if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiLV):
|
| | | return
|
| | | Sync_FaQiLVInfo(curPlayer)
|
| | | return
|
| | |
|
| | | #// A5 32 法器升级 #tagCMFaQiLVUp
|
| | | #
|
| | | #struct tagCMFaQiLVUp
|
| | | #{
|
| | | # tagHead Head;
|
| | | # WORD UseItemCnt; //消耗材料个数
|
| | | # BYTE IsAutoBuy; //是否自动购买
|
| | | #};
|
| | | def OnFaQiLVUp(index, curPackData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | costItemCount = curPackData.UseItemCnt # 消耗材料个数
|
| | | isAutoBuy = curPackData.IsAutoBuy # 是否自动购买
|
| | | |
| | | faQiLV = max(1, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiLV))
|
| | | curEatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiEatItemCount)
|
| | | |
| | | ipyData = IpyGameDataPY.GetIpyGameData("FaQiLVUp", faQiLV)
|
| | | if not ipyData:
|
| | | return
|
| | | |
| | | needEatCount = ipyData.GetNeedEatCount()
|
| | | if not needEatCount:
|
| | | GameWorld.DebugLog("法器已满级!faQiLV=%s" % faQiLV)
|
| | | return
|
| | | |
| | | costItemID = IpyGameDataPY.GetFuncCfg("FaQiUpItem", 1)
|
| | | if not costItemID or not costItemCount:
|
| | | return
|
| | | |
| | | costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
|
| | | lackCnt = costItemCount - bindCnt - unBindCnt
|
| | | if lackCnt > 0 and not isAutoBuy:
|
| | | GameWorld.DebugLog("消耗道具不足,无法升级法器!costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" |
| | | % (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt))
|
| | | return
|
| | | |
| | | delCnt = costItemCount
|
| | | if lackCnt > 0:
|
| | | autoBuyMoneyType = IPY_GameWorld.TYPE_Price_Gold_Money
|
| | | lackCost = ItemCommon.GetAutoBuyItemNeedGold({costItemID:lackCnt}, autoBuyMoneyType)
|
| | | if lackCost <= 0:
|
| | | return
|
| | | infoDict = {ChConfig.Def_Cost_Reason_SonKey:costItemID}
|
| | | if not PlayerControl.PayMoney(curPlayer, autoBuyMoneyType, lackCost, ChConfig.Def_Cost_FaQi, infoDict):
|
| | | return
|
| | | delCnt -= lackCnt
|
| | | |
| | | # 扣除消耗
|
| | | if delCnt:
|
| | | ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, ChConfig.ItemDel_FaQi)
|
| | | |
| | | updClassLV = faQiLV
|
| | | updEatItemCount = curEatItemCount + costItemCount
|
| | | GameWorld.DebugLog("法器培养: faQiLV=%s,curEatItemCount=%s,costItemCount=%s,updEatItemCount=%s,needEatCount=%s" |
| | | % (faQiLV, curEatItemCount, costItemCount, updEatItemCount, needEatCount))
|
| | | |
| | | if updEatItemCount >= needEatCount:
|
| | | updClassLV += 1
|
| | | updEatItemCount -= needEatCount
|
| | | GameWorld.DebugLog(" 升阶: updClassLV=%s,updEatItemCount=%s" % (updClassLV, updEatItemCount))
|
| | | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiLV, updClassLV)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiEatItemCount, updEatItemCount)
|
| | | |
| | | # 升阶
|
| | | if updClassLV > faQiLV:
|
| | | pass
|
| | | |
| | | Sync_FaQiLVInfo(curPlayer)
|
| | | # 刷属性,更新排行榜
|
| | | RefreshFaQiAttr(curPlayer)
|
| | | return
|
| | |
|
| | | def RefreshFaQiAttr(curPlayer):
|
| | | CalcFaQiAttr(curPlayer)
|
| | | PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
|
| | | return
|
| | |
|
| | | def CalcFaQiAttr(curPlayer):
|
| | | |
| | | faQiLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiLV)
|
| | | if not faQiLV:
|
| | | return
|
| | | |
| | | allAttrList = [{} for _ in range(4)]
|
| | | |
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in xrange(ipyDataMgr.GetFaQiLVUpCount()):
|
| | | lvupIpyData = ipyDataMgr.GetFaQiLVUpByIndex(index)
|
| | | dataLV = lvupIpyData.GetFaQiLV()
|
| | | if dataLV > faQiLV:
|
| | | break
|
| | | elif dataLV == faQiLV:
|
| | | upItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiEatItemCount)
|
| | | else:
|
| | | upItemCount = lvupIpyData.GetNeedEatCount()
|
| | | |
| | | # 等阶额外属性
|
| | | lvAttrTypeList = lvupIpyData.GetLVAttrType()
|
| | | lvAttrValueList = lvupIpyData.GetLVAttrValue()
|
| | | for i, attrID in enumerate(lvAttrTypeList):
|
| | | attrValue = lvAttrValueList[i]
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
|
| | | |
| | | # 培养丹增加属性
|
| | | upItemPerCount = lvupIpyData.GetUpEatItemPerCount()
|
| | | if upItemCount and upItemPerCount:
|
| | | upItemAttrTypeList = lvupIpyData.GetUpItemAttrType()
|
| | | upItemAttrValueList = lvupIpyData.GetUpItemAttrValue()
|
| | | attrMultiple = upItemCount / upItemPerCount
|
| | | for i, attrID in enumerate(upItemAttrTypeList):
|
| | | attrValue = upItemAttrValueList[i]
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrList)
|
| | | |
| | | # 保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi, allAttrList)
|
| | | return
|
| | |
|
| | | def Sync_FaQiLVInfo(curPlayer):
|
| | | clientPack = ChPyNetSendPack.tagMCFaQiInfo()
|
| | | clientPack.Clear()
|
| | | clientPack.LV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiLV)
|
| | | clientPack.EatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiEatItemCount)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|
| | |
| | | GameFuncID_SuperGift = 150 # 超值礼包
|
| | | GameFuncID_ZhuXianBoss = 163 # 诛仙BOSS
|
| | | GameFuncID_Arena = 195 # 竞技场
|
| | | GameFuncID_FaQi = 199 # 法器
|
| | | # 以下为暂时无用的
|
| | | GameFuncID_Truck = 33 # 运镖
|
| | | GameFuncID_RunDaily = 34 # 日常跑环
|
| | |
| | | Def_MFPType_MagicWeapon3, # 仙族法宝 17
|
| | | Def_MFPType_PetSoul, # 灵宠魂石 18
|
| | | Def_MFPType_HorseSoul, # 坐骑魂石 19
|
| | | Def_MFPType_20,
|
| | | Def_MFPType_FaQi, # 法器 20
|
| | | Def_MFPType_Dogz, # 神兽 21
|
| | | Def_MFPType_GatherSoul, # 聚魂 22
|
| | | Def_MFPType_MagicWeapon4, # 王者法宝 23
|