10156 副本功能玩法关联回合战斗表现(竞技场战斗改为回合制,功能玩法不变,配置不变;)
| | |
| | | Def_FBMapID_CrossGrasslandXian = 32050
|
| | | #跨服战场
|
| | | Def_FBMapID_CrossBattlefield = 32060
|
| | | #竞技场战斗
|
| | | Def_FBMapID_ArenaBattle = 31290
|
| | | #情缘副本
|
| | | Def_FBMapID_Love = 31300
|
| | |
|
| | |
| | | #需要统计副本功能线路ID人数的跨服地图
|
| | | Def_NeedCountFBFuncLinePlayerCrossMap = [Def_FBMapID_CrossDemonKing]
|
| | |
|
| | | # 回合战斗目标类型
|
| | | TurnBattle_TagType_NPC = 0
|
| | | TurnBattle_TagType_Player = 1
|
| | | TurnBattle_TagType_Team = 2
|
| | |
|
| | | #同系职业枚举
|
| | | JOB_TYPY_COUNT = 5
|
| | | (
|
| | |
| | | Job = 0 #(BYTE Job)
|
| | | LV = 0 #(WORD LV)//等级
|
| | | RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
|
| | | FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
|
| | | Score = 0 #(DWORD Score)//积分
|
| | |
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | |
| | | self.Job = 0
|
| | | self.LV = 0
|
| | | self.RealmLV = 0
|
| | | self.Face = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | self.Score = 0
|
| | |
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteWORD(data, self.LV)
|
| | | data = CommFunc.WriteWORD(data, self.RealmLV)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPower)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPowerEx)
|
| | | data = CommFunc.WriteDWORD(data, self.Score)
|
| | |
| | | Job:%d,
|
| | | LV:%d,
|
| | | RealmLV:%d,
|
| | | Face:%d,
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d,
|
| | | Score:%d
|
| | |
| | | self.Job,
|
| | | self.LV,
|
| | | self.RealmLV,
|
| | | self.Face,
|
| | | self.FightPower,
|
| | | self.FightPowerEx,
|
| | | self.Score
|
| | |
| | | Job = 0 #(BYTE Job)
|
| | | LV = 0 #(WORD LV)//等级
|
| | | RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
|
| | | FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
|
| | | Score = 0 #(DWORD Score)//积分
|
| | |
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | |
| | | self.Job = 0
|
| | | self.LV = 0
|
| | | self.RealmLV = 0
|
| | | self.Face = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | self.Score = 0
|
| | |
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | length += len(self.AddScore)
|
| | | length += 1
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteWORD(data, self.LV)
|
| | | data = CommFunc.WriteWORD(data, self.RealmLV)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPower)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPowerEx)
|
| | | data = CommFunc.WriteDWORD(data, self.Score)
|
| | |
| | | Job:%d,
|
| | | LV:%d,
|
| | | RealmLV:%d,
|
| | | Face:%d,
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d,
|
| | | Score:%d,
|
| | |
| | | self.Job,
|
| | | self.LV,
|
| | | self.RealmLV,
|
| | | self.Face,
|
| | | self.FightPower,
|
| | | self.FightPowerEx,
|
| | | self.Score,
|
| | |
| | | Job = 0 #(BYTE Job)
|
| | | LV = 0 #(WORD LV)//等级
|
| | | RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
|
| | | FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
|
| | | Score = 0 #(DWORD Score)//积分
|
| | |
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | |
| | | self.Job = 0
|
| | | self.LV = 0
|
| | | self.RealmLV = 0
|
| | | self.Face = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | self.Score = 0
|
| | |
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteWORD(data, self.LV)
|
| | | data = CommFunc.WriteWORD(data, self.RealmLV)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPower)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPowerEx)
|
| | | data = CommFunc.WriteDWORD(data, self.Score)
|
| | |
| | | Job:%d,
|
| | | LV:%d,
|
| | | RealmLV:%d,
|
| | | Face:%d,
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d,
|
| | | Score:%d
|
| | |
| | | self.Job,
|
| | | self.LV,
|
| | | self.RealmLV,
|
| | | self.Face,
|
| | | self.FightPower,
|
| | | self.FightPowerEx,
|
| | | self.Score
|
| | |
| | | import NetPackCommon
|
| | | import IpyGameDataPY
|
| | | import PyGameData
|
| | | import ChConfig
|
| | |
|
| | | import random
|
| | | import time
|
| | |
| | | GameWorld.Log(" 奖励保底玩家信息: %s" % floorPlayerIDList)
|
| | | return
|
| | |
|
| | | def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | if not valueList or len(valueList) < 1:
|
| | | GameWorld.DebugLog("没有指定valueList!", playerID)
|
| | | return
|
| | | tagPlayerID = valueList[0]
|
| | | |
| | | isFindTag, tagLV, tagJob, tagScore = __findBattleTag(playerID, tagPlayerID)
|
| | | if not isFindTag:
|
| | | GameWorld.ErrLog("找不到对战对手,不在匹配列表或对战记录里!不能战斗!tagPlayerID=%s" % tagPlayerID, playerID)
|
| | | return
|
| | | |
| | | if tagPlayerID <= MaxRobotID:
|
| | | #验证NPCID是否正确
|
| | | if tagType != ChConfig.TurnBattle_TagType_NPC:
|
| | | GameWorld.ErrLog("竞技场请求回合战斗目标为机器人时tagType错误! tagType=%s != %s" |
| | | % (tagType, ChConfig.TurnBattle_TagType_NPC), playerID)
|
| | | return
|
| | | robotLVNPCIDDict = IpyGameDataPY.GetFuncEvalCfg("ArenaRobotLVNPC", 1, {})
|
| | | lvList = [int(lvStr) for lvStr in robotLVNPCIDDict.keys()]
|
| | | lvList.sort()
|
| | | tagLVStr = ""
|
| | | for lv in lvList:
|
| | | if tagLV <= lv:
|
| | | tagLVStr = str(lv)
|
| | | break
|
| | | if tagLVStr not in robotLVNPCIDDict:
|
| | | GameWorld.ErrLog("竞技场找不到该等级机器人对应的回合战斗NPCID! tagPlayerID=%s,tagLV=%s" % (tagPlayerID, tagLV), playerID)
|
| | | return
|
| | | npcID = robotLVNPCIDDict[tagLVStr]
|
| | | if npcID != tagID:
|
| | | GameWorld.ErrLog("竞技场请求回合战斗的机器人等级对应的NPCID不一致! tagPlayerID=%s,tagLV=%s,tagID=%s != npcID=%s" |
| | | % (tagPlayerID, tagLV, tagID, npcID), playerID)
|
| | | return
|
| | | |
| | | return True
|
| | |
|
| | | def MapServer_Arena(curPlayer, msgList):
|
| | | GameWorld.DebugLog("MapServer_Arena %s" % str(msgList), curPlayer.GetPlayerID())
|
| | | if not msgList:
|
| | |
| | | matchInfo.RealmLV = cacheDict["RealmLV"]
|
| | | matchInfo.FightPower = fightPower % ShareDefine.Def_PerPointValue
|
| | | matchInfo.FightPowerEx = fightPower / ShareDefine.Def_PerPointValue
|
| | | matchInfo.Face = cacheDict.get("Face", 0)
|
| | | else:
|
| | | # 此处机器人的暂忽略等级变化的同步,仅在刷新、更新积分时同步,此处省略查询机器人所属榜单排名
|
| | | pass
|
| | |
| | | clientPack.MatchCount = len(clientPack.MatchList)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|
| | | def __findBattleTag(playerID, tagPlayerID):
|
| | | ## 检查查找要战斗的对象是否合法
|
| | | |
| | | isFindTag = False
|
| | | tagLV, tagJob, tagScore = 0, 0, 0
|
| | | |
| | | # 先找匹配列表
|
| | | matchList = PyGameData.g_arenaPlayerMatchDict.get(playerID, [])
|
| | | for matchPlayer in matchList:
|
| | | if matchPlayer.tagPlayerID == tagPlayerID:
|
| | | isFindTag = True
|
| | | tagLV, tagJob, tagScore = matchPlayer.tagLV, matchPlayer.tagJob, matchPlayer.tagScore
|
| | | GameWorld.DebugLog(" 对手在匹配列表中! tagLV=%s, tagJob=%s, tagScore=%s" % (tagLV, tagJob, tagScore), playerID)
|
| | | break
|
| | | |
| | | # 在找对战记录列表
|
| | | curBattleRecList = GetPlayerArenaBattleRecList(playerID)
|
| | | if not isFindTag:
|
| | | for battleRec in curBattleRecList:
|
| | | if battleRec.tagPlayerID == tagPlayerID:
|
| | | isFindTag = True
|
| | | tagLV, tagJob, tagScore = battleRec.tagLV, battleRec.tagJob, battleRec.tagScore
|
| | | GameWorld.DebugLog(" 对手在对战记录中! tagLV=%s, tagJob=%s, tagScore=%s" % (tagLV, tagJob, tagScore), playerID)
|
| | | break
|
| | | |
| | | return isFindTag, tagLV, tagJob, tagScore
|
| | |
|
| | | def __DoArenaBattleResult(curPlayer, cmdDict):
|
| | | ## 地图玩家同步战斗结果
|
| | |
| | | '''
|
| | |
|
| | | curScore = playerScore
|
| | | isFindTag = False
|
| | | tagLV, tagJob, tagScore = 0, 0, 0
|
| | | tagRealmLV, tagFightPower, tagAccID = 0, 0, "" # 机器人无值
|
| | |
|
| | | # 先找匹配列表
|
| | | matchList = PyGameData.g_arenaPlayerMatchDict.get(playerID, [])
|
| | | for matchPlayer in matchList:
|
| | | if matchPlayer.tagPlayerID == tagPlayerID:
|
| | | isFindTag = True
|
| | | tagLV, tagJob, tagScore = matchPlayer.tagLV, matchPlayer.tagJob, matchPlayer.tagScore
|
| | | GameWorld.DebugLog(" 对手在匹配列表中! tagLV=%s, tagJob=%s, tagScore=%s" % (tagLV, tagJob, tagScore), playerID)
|
| | | break
|
| | | |
| | | # 在找对战记录列表
|
| | | curBattleRecList = GetPlayerArenaBattleRecList(playerID)
|
| | | if not isFindTag:
|
| | | for battleRec in curBattleRecList:
|
| | | if battleRec.tagPlayerID == tagPlayerID:
|
| | | isFindTag = True
|
| | | tagLV, tagJob, tagScore = battleRec.tagLV, battleRec.tagJob, battleRec.tagScore
|
| | | GameWorld.DebugLog(" 对手在对战记录中! tagLV=%s, tagJob=%s, tagScore=%s" % (tagLV, tagJob, tagScore), playerID)
|
| | | break
|
| | | |
| | | isFindTag, tagLV, tagJob, tagScore = __findBattleTag(playerID, tagPlayerID)
|
| | | if not isFindTag:
|
| | | GameWorld.ErrLog("找不到对战对手,不在匹配列表或对战记录里!不处理结算!tagPlayerID=%s" % tagPlayerID, playerID)
|
| | | return retDict
|
| | |
|
| | | curBattleRecList = GetPlayerArenaBattleRecList(playerID)
|
| | | billBoard = GameWorld.GetBillboard().FindBillboard(ShareDefine.Def_BT_Arena)
|
| | | if not billBoard:
|
| | | return retDict
|
| | |
| | | recInfo.RealmLV = cacheDict["RealmLV"]
|
| | | recInfo.FightPower = fightPower % ShareDefine.Def_PerPointValue
|
| | | recInfo.FightPowerEx = fightPower / ShareDefine.Def_PerPointValue
|
| | | recInfo.Face = cacheDict.get("Face", 0)
|
| | |
|
| | | clientPack.BattleRecordList.append(recInfo)
|
| | |
|
| | |
| | | clientPack.RealmLV = cacheDict["RealmLV"]
|
| | | clientPack.FightPower = fightPower % ShareDefine.Def_PerPointValue
|
| | | clientPack.FightPowerEx = fightPower / ShareDefine.Def_PerPointValue
|
| | | clientPack.Face = cacheDict.get("Face", 0)
|
| | |
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
| | |
|
| | | import GameWorld
|
| | | import GameWorldMineArea
|
| | | import GameWorldArena
|
| | | import ChConfig
|
| | |
|
| | | def MapServer_TurnFight(curPlayer, msgList):
|
| | |
| | | if mapID == ChConfig.Def_TFMapID_MineArea:
|
| | | return GameWorldMineArea.OnTurnFightRequest(curPlayer, mapID, funcLineID, tagID, valueList)
|
| | |
|
| | | if mapID == ChConfig.Def_FBMapID_ArenaBattle:
|
| | | return GameWorldArena.OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList)
|
| | | |
| | | return
|
| | |
|
| | | def __OnTurnFightOver(curPlayer, dataMsg):
|
| | |
| | |
|
| | | if mapID == ChConfig.Def_TFMapID_MineArea:
|
| | | return GameWorldMineArea.OnTurnFightOver(curPlayer, mapID, funcLineID, tagID, valueList, fightRet, awardItemList)
|
| | | |
| | | |
| | | if mapID == ChConfig.Def_FBMapID_ArenaBattle:
|
| | | # 竞技场的over通知走原来的途径,仅请求战斗增加GameServer验证
|
| | | return
|
| | | |
| | | return
|
| | |
|
| | |
|
| | |
| | | Def_TFMapID_Adventure = 5000 # 冒险
|
| | |
|
| | | #回合战斗自定义地图需要发送GameServer的列表
|
| | | Def_TFMapID_SendToGameServer = [Def_TFMapID_MineArea]
|
| | | Def_TFMapID_SendToGameServer = [Def_TFMapID_MineArea, Def_FBMapID_ArenaBattle]
|
| | |
|
| | | #前端自定义场景地图
|
| | | ClientCustomScene = [Def_FBMapID_PersonalBoss, Def_FBMapID_ArenaBattle]
|
| | |
| | | Job = 0 #(BYTE Job)
|
| | | LV = 0 #(WORD LV)//等级
|
| | | RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
|
| | | FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
|
| | | Score = 0 #(DWORD Score)//积分
|
| | |
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | |
| | | self.Job = 0
|
| | | self.LV = 0
|
| | | self.RealmLV = 0
|
| | | self.Face = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | self.Score = 0
|
| | |
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteWORD(data, self.LV)
|
| | | data = CommFunc.WriteWORD(data, self.RealmLV)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPower)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPowerEx)
|
| | | data = CommFunc.WriteDWORD(data, self.Score)
|
| | |
| | | Job:%d,
|
| | | LV:%d,
|
| | | RealmLV:%d,
|
| | | Face:%d,
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d,
|
| | | Score:%d
|
| | |
| | | self.Job,
|
| | | self.LV,
|
| | | self.RealmLV,
|
| | | self.Face,
|
| | | self.FightPower,
|
| | | self.FightPowerEx,
|
| | | self.Score
|
| | |
| | | Job = 0 #(BYTE Job)
|
| | | LV = 0 #(WORD LV)//等级
|
| | | RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
|
| | | FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
|
| | | Score = 0 #(DWORD Score)//积分
|
| | |
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | |
| | | self.Job = 0
|
| | | self.LV = 0
|
| | | self.RealmLV = 0
|
| | | self.Face = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | self.Score = 0
|
| | |
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | length += len(self.AddScore)
|
| | | length += 1
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteWORD(data, self.LV)
|
| | | data = CommFunc.WriteWORD(data, self.RealmLV)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPower)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPowerEx)
|
| | | data = CommFunc.WriteDWORD(data, self.Score)
|
| | |
| | | Job:%d,
|
| | | LV:%d,
|
| | | RealmLV:%d,
|
| | | Face:%d,
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d,
|
| | | Score:%d,
|
| | |
| | | self.Job,
|
| | | self.LV,
|
| | | self.RealmLV,
|
| | | self.Face,
|
| | | self.FightPower,
|
| | | self.FightPowerEx,
|
| | | self.Score,
|
| | |
| | | Job = 0 #(BYTE Job)
|
| | | LV = 0 #(WORD LV)//等级
|
| | | RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
|
| | | FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
|
| | | Score = 0 #(DWORD Score)//积分
|
| | |
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | |
| | | self.Job = 0
|
| | | self.LV = 0
|
| | | self.RealmLV = 0
|
| | | self.Face = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | self.Score = 0
|
| | |
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteWORD(data, self.LV)
|
| | | data = CommFunc.WriteWORD(data, self.RealmLV)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPower)
|
| | | data = CommFunc.WriteDWORD(data, self.FightPowerEx)
|
| | | data = CommFunc.WriteDWORD(data, self.Score)
|
| | |
| | | Job:%d,
|
| | | LV:%d,
|
| | | RealmLV:%d,
|
| | | Face:%d,
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d,
|
| | | Score:%d
|
| | |
| | | self.Job,
|
| | | self.LV,
|
| | | self.RealmLV,
|
| | | self.Face,
|
| | | self.FightPower,
|
| | | self.FightPowerEx,
|
| | | self.Score
|
| | |
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 竞技场战斗,目前主要做自定义副本流程桥梁吧,暂时没什么额外逻辑,战斗过程前端自行处理,后端只处理击杀木桩后结算
|
| | | # 砍树版本改为回合战斗
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2020-12-07 19:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import ChConfig
|
| | | import GameWorld
|
| | | import PlayerControl
|
| | | import PlayerArena
|
| | |
|
| | | ## 是否能够通过活动查询进入
|
| | | def OnEnterFBEvent(curPlayer, mapID, lineID, tick):
|
| | | def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
|
| | | ## 回合战斗请求 - 地图验证
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | if not PlayerArena.CheckArenaBattleCount(curPlayer):
|
| | | GameWorld.DebugLog("竞技场已经没有对战次数!", playerID)
|
| | | return
|
| | | |
| | | if not valueList:
|
| | | GameWorld.DebugLog("竞技场没有发送回合战斗的PlayerID,在valueList里,索引0的值为PlayerID!", playerID)
|
| | | return
|
| | | tagPlayerID = valueList[0]
|
| | | GameWorld.DebugLog("竞技场请求对战! tagType=%s,tagID=%s,tagPlayerID=%s" % (tagType, tagID, tagPlayerID), playerID)
|
| | | |
| | | return True
|
| | |
|
| | | ## 是否需要做进入副本通用检查条件逻辑,默认需要检查
|
| | | def OnNeedCheckCanEnterFBComm(curPlayer, mapID, lineID):
|
| | | ## 进行中的不需要重复检查,防止断线重连被禁止进入
|
| | | return False
|
| | |
|
| | | ## 客户端进入自定义场景
|
| | | def OnEnterCustomScene(curPlayer, mapID, lineID):
|
| | | return
|
| | |
|
| | | ## 判断可否召唤木桩怪
|
| | | def OnCanSummonPriWoodPile(curPlayer, mapID, lineID, npcID, count):
|
| | | return True
|
| | |
|
| | | ## 自定义场景副本击杀NPC
|
| | | def DoCustomScene_Player_KillNPC(curPlayer, curNPC, mapID, lineID):
|
| | | PlayerArena.OnKillBattleNPC(curPlayer, curNPC)
|
| | | return
|
| | |
|
| | |
|
| | |
|
| | | def OnTurnFightOver(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet):
|
| | | ## 回合战斗结束
|
| | | # @return: 是否需要同步GameServer, 奖励列表, 同步结果信息
|
| | | needSendGameServer = False
|
| | | awardItemList = []
|
| | | overInfoEx = {}
|
| | | isWin = fightRet[0]
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | if not valueList:
|
| | | return
|
| | | tagPlayerID = valueList[0]
|
| | | |
| | | if not PlayerArena.CheckArenaBattleCount(curPlayer):
|
| | | return
|
| | | |
| | | playerLV = curPlayer.GetLV()
|
| | | playerScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)
|
| | | msgInfo = str(["BattleResult", {"tagPlayerID":tagPlayerID, "isWin":isWin, "playerLV":playerLV, "playerScore":playerScore, |
| | | "realmLV":curPlayer.GetOfficialRank(), "fightPower":PlayerControl.GetFightPower(curPlayer)}])
|
| | | GameWorld.DebugLog("竞技场发送GameServer结算: %s" % msgInfo, playerID)
|
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "Arena", msgInfo, len(msgInfo))
|
| | | |
| | | return needSendGameServer, awardItemList, overInfoEx
|
| | |
| | | # BYTE Result; // 0-进入自定义场景发送通知后端;1-胜利(后端处理,暂时不需要发送此状态);2-失败(前端被对手击杀需要发送此状态)
|
| | | #};
|
| | | def OnArenaBattle(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | tagPlayerID = clientData.TagPlayerID
|
| | | result = clientData.Result
|
| | | |
| | | GameWorld.DebugLog("竞技场挑战玩家! tagPlayerID=%s,result=%s" % (tagPlayerID, result), playerID)
|
| | | if not tagPlayerID:
|
| | | return
|
| | | |
| | | if not result:
|
| | | GameWorld.DebugLog("更新竞技场对战对手ID! tagPlayerID=%s" % tagPlayerID, playerID)
|
| | | # 记录对手ID
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaBattleTagID, tagPlayerID)
|
| | | return
|
| | | |
| | | isWin = 1 if result == 1 else 0
|
| | | # # 木桩被击杀,后端判断,其他前端同步
|
| | | # if isWin:
|
| | | # GameWorld.ErrLog("前端不能同步竞技场胜利状态!", playerID)
|
| | | # return
|
| | | |
| | | recTagPlayerID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleTagID)
|
| | | if tagPlayerID != recTagPlayerID:
|
| | | GameWorld.ErrLog("竞技场结算时对手ID不一致! tagPlayerID(%s) != recTagPlayerID(%s)" % (tagPlayerID, recTagPlayerID), playerID)
|
| | | __DoArenaBattleOver(curPlayer)
|
| | | return
|
| | | |
| | | # 失败结算入口: 前端同步
|
| | | SendGameServer_ArenaBattleOver(curPlayer, isWin)
|
| | | # 改为回合战斗
|
| | | return
|
| | | # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | # playerID = curPlayer.GetPlayerID()
|
| | | # tagPlayerID = clientData.TagPlayerID
|
| | | # result = clientData.Result
|
| | | # |
| | | # GameWorld.DebugLog("竞技场挑战玩家! tagPlayerID=%s,result=%s" % (tagPlayerID, result), playerID)
|
| | | # if not tagPlayerID:
|
| | | # return
|
| | | # |
| | | # if not result:
|
| | | # GameWorld.DebugLog("更新竞技场对战对手ID! tagPlayerID=%s" % tagPlayerID, playerID)
|
| | | # # 记录对手ID
|
| | | # PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaBattleTagID, tagPlayerID)
|
| | | # return
|
| | | # |
| | | # isWin = 1 if result == 1 else 0
|
| | | # # 木桩被击杀,后端判断,其他前端同步
|
| | | # #if isWin:
|
| | | # # GameWorld.ErrLog("前端不能同步竞技场胜利状态!", playerID)
|
| | | # # return
|
| | | # |
| | | # recTagPlayerID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleTagID)
|
| | | # if tagPlayerID != recTagPlayerID:
|
| | | # GameWorld.ErrLog("竞技场结算时对手ID不一致! tagPlayerID(%s) != recTagPlayerID(%s)" % (tagPlayerID, recTagPlayerID), playerID)
|
| | | # __DoArenaBattleOver(curPlayer)
|
| | | # return
|
| | | # |
| | | # # 失败结算入口: 前端同步
|
| | | # SendGameServer_ArenaBattleOver(curPlayer, isWin)
|
| | | # return
|
| | |
|
| | | def OnKillBattleNPC(curPlayer, curNPC):
|
| | | # ## 击杀对手,前端本,使用木桩NPC作为对手
|
| | |
| | |
|
| | | def SendGameServer_ArenaBattleOver(curPlayer, isWin):
|
| | | ## 发送GameServer通知战斗结算
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | tagPlayerID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleTagID)
|
| | | if not tagPlayerID:
|
| | | GameWorld.ErrLog("竞技场结算时没有对手ID!", playerID)
|
| | | __DoArenaBattleOver(curPlayer)
|
| | | return
|
| | | |
| | | if not CheckArenaBattleCount(curPlayer):
|
| | | GameWorld.ErrLog("竞技场已经没有对战次数!", playerID)
|
| | | __DoArenaBattleOver(curPlayer)
|
| | | return
|
| | | |
| | | tick = GameWorld.GetGameWorld().GetTick()
|
| | | if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Arena, tick):
|
| | | GameWorld.ErrLog("结算竞技场CD中!tagPlayerID=%s" % tagPlayerID, playerID)
|
| | | return
|
| | | |
| | | playerLV = curPlayer.GetLV()
|
| | | playerScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)
|
| | | msgInfo = str(["BattleResult", {"tagPlayerID":tagPlayerID, "isWin":isWin, "playerLV":playerLV, "playerScore":playerScore, |
| | | "realmLV":curPlayer.GetOfficialRank(), "fightPower":PlayerControl.GetFightPower(curPlayer)}])
|
| | | GameWorld.DebugLog("竞技场发送GameServer结算: %s" % msgInfo, playerID)
|
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "Arena", msgInfo, len(msgInfo))
|
| | | #改为回合战斗
|
| | | return
|
| | | # playerID = curPlayer.GetPlayerID()
|
| | | # tagPlayerID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleTagID)
|
| | | # if not tagPlayerID:
|
| | | # GameWorld.ErrLog("竞技场结算时没有对手ID!", playerID)
|
| | | # __DoArenaBattleOver(curPlayer)
|
| | | # return
|
| | | # |
| | | # if not CheckArenaBattleCount(curPlayer):
|
| | | # GameWorld.ErrLog("竞技场已经没有对战次数!", playerID)
|
| | | # __DoArenaBattleOver(curPlayer)
|
| | | # return
|
| | | # |
| | | # tick = GameWorld.GetGameWorld().GetTick()
|
| | | # if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Arena, tick):
|
| | | # GameWorld.ErrLog("结算竞技场CD中!tagPlayerID=%s" % tagPlayerID, playerID)
|
| | | # return
|
| | | # |
| | | # playerLV = curPlayer.GetLV()
|
| | | # playerScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)
|
| | | # msgInfo = str(["BattleResult", {"tagPlayerID":tagPlayerID, "isWin":isWin, "playerLV":playerLV, "playerScore":playerScore, |
| | | # "realmLV":curPlayer.GetOfficialRank(), "fightPower":PlayerControl.GetFightPower(curPlayer)}])
|
| | | # GameWorld.DebugLog("竞技场发送GameServer结算: %s" % msgInfo, playerID)
|
| | | # GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "Arena", msgInfo, len(msgInfo))
|
| | | return
|
| | |
|
| | | def __DoArenaBattleOver(curPlayer, retDict={}):
|