From 867c5145e4e860ed85c8eb24b272f30729e77e34 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 15 一月 2024 21:12:47 +0800
Subject: [PATCH] 10019 【砍树】回合战斗(战斗实例全部统一使用NPC,包含玩家自己及其他玩家镜像数据;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py | 11 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_NormalNPC.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 186 ++++++++++++++++++++++++++++++++--------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 4 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py | 6 +
7 files changed, 146 insertions(+), 70 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
index 4397612..ba2bf0b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -2364,6 +2364,10 @@
if helpBattleFormatKey:
hurtFormulaKey = helpBattleFormatKey
+ # 回合战斗
+ if atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline):
+ hurtFormulaKey = "TurnFight"
+
if hurtFormulaKey not in hurtDist:
GameWorld.ErrLog("CalcAttackValue.txt 伤害公式未配置, key=%s" % (hurtFormulaKey))
return 0, ChConfig.Def_HurtType_Miss
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_NormalNPC.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_NormalNPC.py
index dc598c5..5f596f8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_NormalNPC.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/SummonNPC_Attack_NormalNPC.py
@@ -59,7 +59,7 @@
def GetTagRelation(curSummonNPC, curTagNormalNPC, skill, tick):
#防守方阵营
- defenderCampType = NPCCommon.GetFaction(curTagNormalNPC)
+ defenderCampType = GameObj.GetFaction(curTagNormalNPC)
#玩家的召唤兽才能攻击普通NPC
npcOwner_Player = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curSummonNPC)
@@ -73,7 +73,7 @@
return ChConfig.Type_Relation_Enemy, ChConfig.Def_PASysMessage_None
#攻击方阵营
- attackerCampType = curSummonNPC.GetDictByKey(ChConfig.Def_NpcDictKey_CampType)
+ attackerCampType = GameObj.GetFaction(curSummonNPC)
if attackerCampType != defenderCampType:
return ChConfig.Type_Relation_Enemy, ChConfig.Def_PASysMessage_None
return ChConfig.Type_Relation_Friend, ChConfig.Def_PASysMessage_None
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index 1cdcb8c..95fe4ff 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -34,28 +34,31 @@
import BuffSkill
import FBCommon
import ItemControler
+import PlayerPet
+# 回合战斗流程状态
(
-FightState_Start,
-FightState_Fighting,
-FightState_Win,
-FightState_Fail,
-FightState_Over,
-) = range(5)
+FightState_Start, # 0 起始状态,无特殊意义,仅代表开始了,与Over对应
+FightState_PrepareOK, # 1 准备完毕,包含对战NPC召唤OK、其他等
+FightState_Fighting, # 2 战斗中
+FightState_FightEnd, # 3 战斗结束
+FightState_Award, # 4 结算奖励
+FightState_Over, # 5 结束状态,无特殊意义,仅代表所有处理结束了,与Start对应
+) = range(6)
+# 回合战斗复活类型
(
RebornType_PetSkill,
) = range(1, 1 + 1)
def GetObjName(gameObj):
objName = gameObj.GetName()
- mirrorPlayerID = gameObj.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID)
- if mirrorPlayerID:
- objName = "%s[%s]" % (objName, mirrorPlayerID)
faction = GameObj.GetFaction(gameObj)
fightPlaceNum = gameObj.GetDictByKey(ChConfig.Def_Obj_Dict_FightPetPlaceNum)
- curID = gameObj.GetNPCID() if gameObj.GetGameObjType() == IPY_GameWorld.gotNPC else ""
- return "%s%s %s%s" % ("A" if faction == 1 else "B", fightPlaceNum, objName, curID)
+ curID = gameObj.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID)
+ if not curID and gameObj.GetGameObjType() == IPY_GameWorld.gotNPC:
+ curID = gameObj.GetNPCID()
+ return "%s%s %s[%s-%s]" % ("A" if faction == 1 else "B", fightPlaceNum, objName, gameObj.GetID(), curID)
#// B4 10 回合制战斗 #tagCMTurnFight
#
@@ -96,18 +99,14 @@
def DoTrunFight(curPlayer, mapID, funcLineID, tagPlayerID, tick):
playerID = curPlayer.GetPlayerID()
- posX, posY = curPlayer.GetPosX(), curPlayer.GetPosY()
- GameWorld.DebugLog("===== 执行回合制战斗: mapID=%s,funcLineID=%s,playerID=%s,tagPlayerID=%s" % (mapID, funcLineID, playerID, tagPlayerID))
+
+ PlayerViewCacheTube.UpdPlayerPropPlusCache(curPlayer) # 强制刷一下自己的镜像缓存
+ factionInfoA = {"playerID":playerID, "pet":PlayerPet.GetPetCacheInfo(curPlayer)}
+ factionInfoB = {}
ipyData = None
- tagObj = None
if tagPlayerID:
- npcID = ChConfig.Def_NPCID_PVP
- tagObj = NPCCommon.SummonMapNpc(npcID, posX, posY, sightLevel=playerID, mirrorPlayerID=tagPlayerID)
- if not tagObj:
- return
- PlusData = PlayerViewCacheTube.GetPlayerPropPlusDictByID(playerID)[1] # 从缓存中获取
- petCacheInfo = PlusData.get("Pet")
- fightPetObjListB = PetControl.CalloutFightPet(tagObj, petCacheInfo)
+ PlusData = PlayerViewCacheTube.GetPlayerPropPlusDictByID(tagPlayerID)[1] # 从缓存中获取
+ factionInfoB = {"playerID":tagPlayerID, "pet":PlusData.get("Pet")}
else:
ipyData = IpyGameDataPY.GetIpyGameData("FBTurn", mapID, funcLineID)
if not ipyData:
@@ -115,25 +114,74 @@
npcID = ipyData.GetNPCID()
if not npcID:
return
- tagObj = NPCCommon.SummonMapNpc(npcID, posX, posY, sightLevel=playerID)
- if not tagObj:
- return
petNPCIDList = ipyData.GetPetNPCIDList()
petCacheInfo = [] # 从配表中读取组合,技能默认取NPC表配置的
for state, petNPCID in enumerate(petNPCIDList, 1):
petCacheInfo.append({"npcID":petNPCID, "state":state, "quality":0})
- fightPetObjListB = PetControl.CalloutFightPet(tagObj, petCacheInfo)
+ factionInfoB = {"npcID":npcID, "pet":petCacheInfo}
+ ret = ProcessAutoTurnFight(mapID, funcLineID, factionInfoA, factionInfoB, tick, curPlayer)
+ if not ret:
+ return
+ isWin, turnNum, turnMax, factionTotalHurtDict, playbackID = ret
+
+ # 结算奖励...待扩展
+ awardItemList = []
+ if isWin and ipyData:
+ # 山寨测试先默认都是首次奖励,正式后需删除
+ awardItemList = ipyData.GetAwardItemListFirst()
+
+ GameWorld.DebugLog("奖励物品: %s" % awardItemList)
+ ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["TurnFight", False, {"mapID":mapID, "funcLineID":funcLineID}])
+
+ overMsg = {"isWin":isWin, "itemInfo":FBCommon.GetJsonItemList(awardItemList), "totalHurt":factionTotalHurtDict.get(1, 0)}
+ playbackID and overMsg.update({"playbackID":playbackID})
+ SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, FightState_Award, turnNum, turnMax, overMsg)
+ return
+
+def ProcessAutoTurnFight(mapID, funcLineID, factionInfoA, factionInfoB, tick, syncPlayer=None, isSavePlayback=False):
+ ''' 处理自动回合战斗过程,仅做战斗流程处理,不做及其他功能逻辑
+ @param mapID: 可视为功能ID
+ @param funcLineID: 对功能ID的扩展
+ @param factionInfoA: A方阵营信息,playerID 和 npcID 二选一 {"playerID":主体玩家镜像ID, "npcID":主体NPCID, "pet":[{出战灵宠信息兼容玩家缓存的灵宠信息k:v, ...}, ...]}
+ @param factionInfoB: B方阵营信息
+ @param syncPlayer: 需要通知的玩家,可能为None,注意仅做通知用,该玩家可能和AB阵营无任何关系
+ @param isSavePlayback: 是否保存战斗回放
+ @return: None-无结果;或 (isWin, turnNum, turnMax, factionTotalHurtDict)
+ isWin: 是否获胜
+ turnNum: 打了几回合
+ factionTotalHurtDict: 双方伤血统计
+ '''
+ if syncPlayer:
+ syncPlayer.SetCanAttack(False) # 该玩家设置为不可被攻击
+ playerID = syncPlayer.GetPlayerID()
+ sightLevel, posX, posY = playerID, syncPlayer.GetPosX(), syncPlayer.GetPosY()
+ else:
+ playerID = 0
+ sightLevel, posX, posY = 99, 192, 109 # 系统默认处理的层级及坐标
+
+ objRetA = __SummonFactionObjs(factionInfoA, sightLevel, posX, posY)
+ objRetB = __SummonFactionObjs(factionInfoB, sightLevel, posX, posY)
+ objA, petObjListA, factionSyncInfoA = objRetA if objRetA else (None, [])
+ objB, petObjListB, factionSyncInfoB = objRetB if objRetB else (None, [])
+ if not objA or not objB:
+ return
+ playerIDA = objA.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID) # 可能为0,非玩家镜像时为0
+ playerIDB = objB.GetDictByKey(ChConfig.Def_NPC_Dict_MirrorPlayerID) # 可能为0,非玩家镜像时为0
+
+ objNameA = GetObjName(objA)
+ objNameB = GetObjName(objB)
+ GameWorld.DebugLog("===== 执行回合制战斗: %s VS %s =====" % (objNameA, objNameB))
+
turnMax = IpyGameDataPY.GetFuncCfg("TurnFight", 1)
# 宠物先攻击
- fightPetObjListA = PetControl.CalloutFightPet(curPlayer)
- factionListA = fightPetObjListA + [curPlayer]
- factionListB = fightPetObjListB + [tagObj]
+ factionListA = petObjListA + [objA]
+ factionListB = petObjListB + [objB]
atkFactionList = [factionListA, factionListB]
# 设置战斗主体
- curPlayer.SetDict(ChConfig.Def_Obj_Dict_TurnFightMainRole, 1)
- tagObj.SetDict(ChConfig.Def_Obj_Dict_TurnFightMainRole, 1)
+ objA.SetDict(ChConfig.Def_Obj_Dict_TurnFightMainRole, 1)
+ objB.SetDict(ChConfig.Def_Obj_Dict_TurnFightMainRole, 1)
# 战斗前初始化,可能会改变攻速,所以先初始化
for faction, factionObjList in enumerate(atkFactionList, 1):
@@ -149,22 +197,24 @@
fightObjList.sort(key=lambda o: (GameObj.GetAtkSpeed(o), (10 - GameObj.GetFaction(o)), o.GetID()), reverse=True)
#方式2:根据阵营主角攻速决定先手,然后每个阵营轮流固定位置攻击
elif sortType == 2:
- if GameObj.GetAtkSpeed(curPlayer) < GameObj.GetAtkSpeed(tagObj):
+ if GameObj.GetAtkSpeed(objA) < GameObj.GetAtkSpeed(objB):
atkFactionList = [factionListB, factionListA]
for i in range(len(factionListA)):
for factionObjList in atkFactionList:
fightObjList.append(factionObjList[i])
+ SyncTurnFightState(syncPlayer, mapID, funcLineID, playerIDB, FightState_PrepareOK, msg=[factionSyncInfoA, factionSyncInfoB])
+
isWin = None
for turnNum in range(1, turnMax + 1):
GameWorld.DebugLog("【----- 回合制战斗轮次: %s -----】" % turnNum)
- SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, FightState_Fighting, turnNum, turnMax)
+ SyncTurnFightState(syncPlayer, mapID, funcLineID, playerIDB, FightState_Fighting, turnNum, turnMax)
# 回合开始: 做一些每回合重置逻辑或者某些根据回合触发的效果等
for gameObj in fightObjList:
TurnFightObjPerTurnStart(gameObj, turnNum, tick)
- isWin = CheckIswin(curPlayer, tagObj)
+ isWin = CheckIswin(objA, objB)
if isWin != None:
break
@@ -179,7 +229,7 @@
objType = gameObj.GetGameObjType()
objID = gameObj.GetID()
- SyncTurnFightObjAction(curPlayer, turnNum, objType, objID)
+ SyncTurnFightObjAction(syncPlayer, turnNum, objType, objID)
if GameObj.GetHP(gameObj) <= 0:
# 复活时机在自己行动节点
@@ -190,7 +240,7 @@
objName = GetObjName(gameObj)
curHP = GameObj.GetHP(gameObj)
- tagGameObj = tagObj if faction == 1 else curPlayer
+ tagGameObj = objB if faction == 1 else objA
tagObjType = tagGameObj.GetGameObjType()
tagObjID = tagGameObj.GetID()
tagHP = GameObj.GetHP(tagGameObj)
@@ -201,14 +251,16 @@
if not DoAttack(gameObj, tagGameObj, tick):
continue
- isWin = CheckIswin(curPlayer, tagObj)
+ isWin = CheckIswin(objA, objB)
if isWin != None:
break
if isWin != None:
break
-
- GameWorld.DebugLog("--- 战斗结束处理 ---")
+
+ GameWorld.DebugLog("--- 战斗结束处理 --- isWin=%s" % isWin)
+ isWin = 1 if isWin else 0
+
# 统计总伤害
factionTotalHurtDict = {}
for gameObj in fightObjList:
@@ -224,28 +276,46 @@
for faction, totalHurt in factionTotalHurtDict.items():
GameWorld.DebugLog("faction=%s, 阵营总输出: %s" % (faction, totalHurt))
- GameWorld.DebugLog("玩家剩余血量: %s / %s" % (GameObj.GetHP(curPlayer), GameObj.GetMaxHP(curPlayer)))
- GameWorld.DebugLog("对方剩余血量: %s / %s" % (GameObj.GetHP(tagObj), GameObj.GetMaxHP(tagObj)))
+ GameWorld.DebugLog("A剩余血量: %s / %s" % (GameObj.GetHP(objA), GameObj.GetMaxHP(objA)))
+ GameWorld.DebugLog("B剩余血量: %s / %s" % (GameObj.GetHP(objB), GameObj.GetMaxHP(objB)))
- # 结算奖励...待扩展
- awardItemList = []
- if isWin and ipyData:
- # 山寨测试先默认都是首次奖励,正式后需删除
- awardItemList = ipyData.GetAwardItemListFirst()
-
- GameWorld.DebugLog("奖励物品: %s" % awardItemList)
- ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["TurnFight", False, {"mapID":mapID, "funcLineID":funcLineID}])
-
- overMsg = {"itemInfo":FBCommon.GetJsonItemList(awardItemList), "totalHurt":factionTotalHurtDict.get(1, 0)}
- overState = FightState_Win if isWin else FightState_Fail
- SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, overState, turnNum, turnMax, str(overMsg))
+ SyncTurnFightState(syncPlayer, mapID, funcLineID, playerIDB, FightState_FightEnd, turnNum, turnMax)
for gameObj in fightObjList:
TurnFightObjOverReset(gameObj, tick)
- GameWorld.DebugLog("===== 回合制战斗结束: mapID=%s,funcLineID=%s,playerID=%s,tagPlayerID=%s,isWin=%s,overState=%s"
- % (mapID, funcLineID, playerID, tagPlayerID, isWin, overState))
- return
+ playbackID = 0 # 战斗回放ID,可根据该ID查看回放
+ #playbackInfo = "" # 战斗回放信息
+ if isSavePlayback:
+ pass
+
+ GameWorld.DebugLog("===== 回合制战斗结束: mapID=%s,funcLineID=%s,playerIDA=%s,playerIDB=%s,isWin=%s"
+ % (mapID, funcLineID, playerIDA, playerIDB, isWin))
+ return isWin, turnNum, turnMax, factionTotalHurtDict, playbackID
+
+def __SummonFactionObjs(factionInfo, sightLevel, posX, posY):
+ ## 召唤阵营战斗实例
+ factionSyncInfo = {} # 同步前端的阵营信息,包含主ID、灵宠、其他灵通等
+ playerID = factionInfo.get("playerID")
+ npcID = factionInfo.get("npcID")
+ if playerID:
+ npcID = ChConfig.Def_NPCID_PVP
+ mainObj = NPCCommon.SummonMapNpc(npcID, posX, posY, sightLevel=sightLevel, mirrorPlayerID=playerID)
+ factionSyncInfo["playerID"] = playerID
+ elif npcID:
+ mainObj = NPCCommon.SummonMapNpc(npcID, posX, posY, sightLevel=sightLevel)
+ factionSyncInfo["npcID"] = npcID
+ else:
+ return
+ if not mainObj:
+ return
+ petObjList = PetControl.CalloutFightPet(mainObj, factionInfo.get("pet"))
+ petObjIDList = []
+ for petObj in petObjList:
+ if petObj:
+ petObjIDList.append(petObj.GetID())
+ factionSyncInfo.update({"objID":mainObj.GetID(), "petObjIDList":petObjIDList})
+ return mainObj, petObjList, factionSyncInfo
def CheckIswin(curPlayer, tagObj):
## 检查是否结束
@@ -824,6 +894,8 @@
return useSkillResult
def SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, state, turnNum=0, turnMax=0, msg=""):
+ if not curPlayer:
+ return
clientPack = ChPyNetSendPack.tagMCTurnFightState()
clientPack.Clear()
clientPack.MapID = mapID
@@ -832,12 +904,14 @@
clientPack.State = state
clientPack.TurnNum = turnNum
clientPack.TurnMax = turnMax
- clientPack.Msg = msg
+ clientPack.Msg = str(msg)
clientPack.Len = len(clientPack.Msg)
NetPackCommon.SendFakePack(curPlayer, clientPack)
return
def SyncTurnFightObjAction(curPlayer, turnNum, objType, objID):
+ if not curPlayer:
+ return
clientPack = ChPyNetSendPack.tagMCTurnFightObjAction()
clientPack.Clear()
clientPack.TurnNum = turnNum
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 5f2ab02..18a1c3e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1180,9 +1180,6 @@
#朋友
Type_Relation_Friend = 2
-Def_NpcDictKey_CampType = 'CampType'
-#阵营 三种 中立 正义 邪恶
-
CampType_Neutral = ShareDefine.CampType_Neutral # 中立
CampType_Justice = ShareDefine.CampType_Justice # 正义
CampType_Evil = ShareDefine.CampType_Evil # 邪恶
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
index 08b1acd..c9a1e62 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
@@ -124,16 +124,15 @@
return
#---------------------------------------------------------------------
-def CalloutFightPet(curObj, petCacheInfo=None):
- ## 出战上阵的灵宠
- # @param petCacheInfo: 玩家灵宠功能缓存信息
+def CalloutFightPet(curObj, petCacheInfo):
+ ## 召唤出战上阵的灵宠
+ # @param curObj: 灵宠所属战斗实例
+ # @param petCacheInfo: 出战灵宠信息列表,兼容灵宠功能缓存信息
# @return: [第1位置实例, 第2, ...] 按位置顺序,实例可能为None
fightPlaceCount = len(IpyGameDataPY.GetFuncEvalCfg("PetGoOutFight", 1)) # 战斗位置数
fightPetObjList = [None] * fightPlaceCount
- if petCacheInfo == None and curObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- petCacheInfo = PlayerPet.GetPetCacheInfo(curObj)
- if not petCacheInfo: # 没有灵宠
+ if not petCacheInfo:
return fightPetObjList
fightPetDict = {} # 上阵的灵宠
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
index 4cf25cc..2510bfd 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
@@ -423,7 +423,7 @@
Sync_PlayerCache(curPlayer, findPlayerID)
callFunc(curPlayer, findPlayerID, callData, dataDict)
return dataDict
- PyGameData.g_viewCacheCallback[playerID] = [callFunc, callData]
+ PyGameData.g_viewCacheCallback[playerID] = [callFunc, callData, syncClient]
#GameWorld.DebugLog("发送到GameServer查询玩家缓存! playerID=%s,findPlayerID=%s" % (playerID, findPlayerID), playerID)
sendPack = ChMapToGamePyPack.tagMGQueryPlayerCache()
@@ -470,10 +470,12 @@
callback = PyGameData.g_viewCacheCallback.pop(playerID, None)
if not callback:
return
- callFunc, callData = callback
+ callFunc, callData, syncClient = callback
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
if not curPlayer:
return
+ if syncClient:
+ Sync_PlayerCache(curPlayer, findPlayerID)
callFunc(curPlayer, findPlayerID, callData, curPlayerPropDict)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
index d000762..007e3ad 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
@@ -574,7 +574,7 @@
lvSummonNPC = curPlayer.GetLV()
summonNPC.SetLV(lvSummonNPC)
summonNPC.SetCountry(curPlayer.GetCountry())
- summonNPC.SetDict(ChConfig.Def_NpcDictKey_CampType, curPlayer.GetFaction())
+ GameObj.SetFaction(summonNPC, curPlayer.GetFaction())
summonNPC.GetNPCAngry().Init(ChConfig.Def_SummonNPC_Angry_Count)
#设置召唤兽属性
SetSummonNPCProperty(curPlayer, summonNPC, curSkill)
--
Gitblit v1.8.0