129 【战斗】战斗系统-服务端(等级表增加NPC参数星级;战斗结算增加同步等级、星级、皮肤ID)
| | |
| | | DWORD MaxHP; //生命
|
| | | DWORD Atk; //攻击
|
| | | DWORD Def; //防御
|
| | | BYTE ReHeroStar; //参考星级
|
| | | BYTE ReHeroBreakLV; //参考突破等级
|
| | | BYTE ReHeroAwakeLV; //参考觉醒等级
|
| | | DWORD ReAtk; //参考攻击
|
| | |
| | | self.sex = 0
|
| | | self.job = 0
|
| | | self.lv = 1
|
| | | self._star = 0
|
| | | self.fightPower = 0
|
| | | self.faction = 0 # 所属阵营,一般只有双方阵营, 1 或 2,发起方默认1
|
| | | self.lineupNum = 1 # 阵容位置编号,一般多V多时有用,通常默认1
|
| | |
| | | def SetFightPower(self, fightPower): self.fightPower = fightPower
|
| | | def GetLV(self): return self.lv
|
| | | def SetLV(self, lv): self.lv = lv
|
| | | def GetStar(self): return self._star
|
| | | def SetStar(self, star): self._star = star
|
| | | def GetDictByKey(self, key): return self._kvDict.get(key, 0)
|
| | | def SetDict(self, key, value): self._kvDict[key] = value
|
| | |
|
| | |
| | | hero = lineup.GetLineupHero(posNum)
|
| | | heroID = hero.heroID
|
| | | itemIndex = hero.itemIndex
|
| | | userData = ""
|
| | | heroLV = 1
|
| | | star = 0
|
| | | if itemIndex >= 0 and itemIndex < curPack.GetCount():
|
| | | heroItem = curPack.GetAt(itemIndex)
|
| | | if heroItem and not heroItem.IsEmpty():
|
| | | userData = heroItem.GetUserData()
|
| | | heroLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroLV)
|
| | | star = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroStar)
|
| | | #breakLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
|
| | | #awakeLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroAwakeLV)
|
| | |
|
| | | skillIDlist = []
|
| | | skillIDlist += hero.heroSkillIDList
|
| | |
| | | "HeroID":heroID,
|
| | | "SkinID":hero.skinID,
|
| | | "LV":heroLV,
|
| | | "Data":userData,
|
| | | "Star":star,
|
| | | #"BreakLV":breakLV,
|
| | | #"AwakeLV":awakeLV,
|
| | | "FightPower":hero.fightPower,
|
| | | "AttrDict":{str(k):v for k, v in hero.heroBatAttrDict.items() if v > 0},
|
| | | "SkillIDList":skillIDlist,
|
| | |
| | | return
|
| | | heroID = npcData.GetRelatedHeroID()
|
| | | npcLV = npcData.GetLV()
|
| | | star, breakLV, awakeLV = 0, 0, 0
|
| | |
|
| | | lvIpyData = None
|
| | | heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID) if heroID else None
|
| | |
| | | npcLV = strongerLV
|
| | | if not lvIpyData:
|
| | | lvIpyData = IpyGameDataPY.GetIpyGameData("PlayerLV", npcLV)
|
| | | |
| | | if lvIpyData:
|
| | | star = lvIpyData.GetReHeroStar()
|
| | | breakLV = lvIpyData.GetReHeroBreakLV()
|
| | | awakeLV = lvIpyData.GetReHeroAwakeLV()
|
| | | if heroIpyData and lvIpyData:
|
| | | skinIDList = heroIpyData.GetSkinIDList()
|
| | | skinID = skinIDList[0] if skinIDList else 0
|
| | | skillIDList = GetNPCHeroSkillIDList(heroID, heroIpyData, lvIpyData.GetReHeroBreakLV(), lvIpyData.GetReHeroAwakeLV())
|
| | | skillIDList = GetNPCHeroSkillIDList(heroID, heroIpyData, breakLV, awakeLV)
|
| | | else:
|
| | | heroID = 0
|
| | | skinID = 0
|
| | |
| | | "HeroID":heroID,
|
| | | "SkinID":skinID,
|
| | | "LV":npcLV,
|
| | | "Star":star,
|
| | | #"BreakLV":breakLV,
|
| | | #"AwakeLV":awakeLV,
|
| | | "AttrDict":{str(k):v for k, v in batAttrDict.items() if v > 0},
|
| | | "SkillIDList":skillIDList,
|
| | | }
|
| | |
| | | heroID = heroInfo.get("HeroID", 0)
|
| | | skinID = heroInfo.get("SkinID", 0)
|
| | | lv = heroInfo.get("LV", 1)
|
| | | star = heroInfo.get("Star", 0)
|
| | | specialty, atkDistType, country, sex, job = 0, 1, 0, 1, 0
|
| | | heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID) if heroID else None
|
| | | if heroIpyData:
|
| | |
| | | batObj.SetLineupPos(posNum, num)
|
| | | batObj.SetFightPower(fightPower)
|
| | | batObj.SetLV(lv)
|
| | | batObj.SetStar(star)
|
| | | batObj.SetAtkDistType(atkDistType)
|
| | | batObj.SetSpecialty(specialty)
|
| | | batObj.SetCountry(country)
|
| | |
| | |
|
| | | batLineup.posObjIDDict[posNum] = objID
|
| | | batLineup.heroObjIDDict[heroID] = objID
|
| | | GameWorld.DebugLog("AddBatObj %s,skill=%s" % (GetObjName(batObj), skillManager.GetSkillIDList()))
|
| | | GameWorld.DebugLog("AddBatObj %s,lv=%s,star=%s,skill=%s" % (GetObjName(batObj), lv, star, skillManager.GetSkillIDList()))
|
| | | ResetObjSkill(batObj)
|
| | |
|
| | | if npcID:
|
| | |
| | | batFaction.totalHurt += atkHurt
|
| | | GameWorld.DebugLog(" Pos:%s ID=%s,npcID=%s,heroID=%s,HP=%s/%s, 输出=%s,承伤=%s,治疗=%s"
|
| | | % (posNum, objID, npcID, heroID, batObj.GetHP(), batObj.GetMaxHP(), atkHurt, defHurt, cureHP))
|
| | | lineupStatInfo[str(posNum)] = {"ObjID":objID, "HeroID":heroID, "NPCID":npcID, "AtkHurt":atkHurt, "DefHurt":defHurt, "CureHP":cureHP}
|
| | | lineupStatInfo[str(posNum)] = {"ObjID":objID, "HeroID":heroID, "NPCID":npcID, "AtkHurt":atkHurt, "DefHurt":defHurt, "CureHP":cureHP, |
| | | "LV":batObj.GetLV(), "Star":batObj.GetStar(), "Skin":batObj.GetSkinID()}
|
| | |
|
| | | statMsg = {"winFaction":winFaction, "statInfo":statInfo}
|
| | |
|
| | |
| | | ("DWORD", "MaxHP", 0),
|
| | | ("DWORD", "Atk", 0),
|
| | | ("DWORD", "Def", 0),
|
| | | ("BYTE", "ReHeroStar", 0),
|
| | | ("BYTE", "ReHeroBreakLV", 0),
|
| | | ("BYTE", "ReHeroAwakeLV", 0),
|
| | | ("DWORD", "ReAtk", 0),
|
| | |
| | | def GetMaxHP(self): return self.attrTuple[2] # 生命 DWORD
|
| | | def GetAtk(self): return self.attrTuple[3] # 攻击 DWORD
|
| | | def GetDef(self): return self.attrTuple[4] # 防御 DWORD
|
| | | def GetReHeroBreakLV(self): return self.attrTuple[5] # 参考突破等级 BYTE
|
| | | def GetReHeroAwakeLV(self): return self.attrTuple[6] # 参考觉醒等级 BYTE
|
| | | def GetReAtk(self): return self.attrTuple[7] # 参考攻击 DWORD
|
| | | def GetReDef(self): return self.attrTuple[8] # 防御 DWORD
|
| | | def GetReMaxHP(self): return self.attrTuple[9] # 生命 DWORD
|
| | | def GetReStunRate(self): return self.attrTuple[10] # DWORD
|
| | | def GetReSuperHitRate(self): return self.attrTuple[11] # DWORD
|
| | | def GetReComboRate(self): return self.attrTuple[12] # DWORD
|
| | | def GetReMissRate(self): return self.attrTuple[13] # DWORD
|
| | | def GetReParryRate(self): return self.attrTuple[14] # DWORD
|
| | | def GetReSuckHPPer(self): return self.attrTuple[15] # DWORD
|
| | | def GetReStunRateDef(self): return self.attrTuple[16] # DWORD
|
| | | def GetReSuperHitRateDef(self): return self.attrTuple[17] # DWORD
|
| | | def GetReComboRateDef(self): return self.attrTuple[18] # DWORD
|
| | | def GetReMissRateDef(self): return self.attrTuple[19] # DWORD
|
| | | def GetReParryRateDef(self): return self.attrTuple[20] # DWORD
|
| | | def GetReSuckHPPerDef(self): return self.attrTuple[21] # DWORD |
| | | def GetReHeroStar(self): return self.attrTuple[5] # 参考星级 BYTE
|
| | | def GetReHeroBreakLV(self): return self.attrTuple[6] # 参考突破等级 BYTE
|
| | | def GetReHeroAwakeLV(self): return self.attrTuple[7] # 参考觉醒等级 BYTE
|
| | | def GetReAtk(self): return self.attrTuple[8] # 参考攻击 DWORD
|
| | | def GetReDef(self): return self.attrTuple[9] # 防御 DWORD
|
| | | def GetReMaxHP(self): return self.attrTuple[10] # 生命 DWORD
|
| | | def GetReStunRate(self): return self.attrTuple[11] # DWORD
|
| | | def GetReSuperHitRate(self): return self.attrTuple[12] # DWORD
|
| | | def GetReComboRate(self): return self.attrTuple[13] # DWORD
|
| | | def GetReMissRate(self): return self.attrTuple[14] # DWORD
|
| | | def GetReParryRate(self): return self.attrTuple[15] # DWORD
|
| | | def GetReSuckHPPer(self): return self.attrTuple[16] # DWORD
|
| | | def GetReStunRateDef(self): return self.attrTuple[17] # DWORD
|
| | | def GetReSuperHitRateDef(self): return self.attrTuple[18] # DWORD
|
| | | def GetReComboRateDef(self): return self.attrTuple[19] # DWORD
|
| | | def GetReMissRateDef(self): return self.attrTuple[20] # DWORD
|
| | | def GetReParryRateDef(self): return self.attrTuple[21] # DWORD
|
| | | def GetReSuckHPPerDef(self): return self.attrTuple[22] # DWORD |
| | | |
| | | # 特殊地图玩家属性公式表 |
| | | class IPY_SpecMapPlayerAttrFormat(): |