| | |
| | | import PlayerFamily
|
| | | import PlayerActivity
|
| | | import PlayerSuccess
|
| | | import PlayerMagicWeapon
|
| | | import GameFuncComm
|
| | | import PyGameData
|
| | | import PlayerVip
|
| | | import GameObj
|
| | |
| | | return
|
| | |
|
| | | def GetJsonItemList(itemList):
|
| | | ## [[itemID,itemCount,isBind], curItem] -> [{"ItemID":101, "Count":10, "IsBind":1, "IsSuite":1, "UserData":"自定义属性字符串"}]
|
| | | ## [[itemID,itemCount,isAuctionItem], curItem] -> [{"ItemID":101, "Count":10, "IsAuctionItem":1, "UserData":"自定义属性字符串"}]
|
| | | jsonItemList = []
|
| | | for itemInfo in itemList:
|
| | | itemDict = {}
|
| | |
| | | if infolen > 1:
|
| | | itemDict['Count'] = itemInfo[1]
|
| | | if infolen > 2:
|
| | | itemDict['IsBind'] = int(itemInfo[2])
|
| | | itemDict['IsAuctionItem'] = int(itemInfo[2])
|
| | | elif isinstance(itemInfo, int):
|
| | | itemDict['ItemID'] = itemInfo
|
| | | else: #物品实例
|
| | |
| | | continue
|
| | | itemDict['ItemID'] = itemInfo.GetItemTypeID()
|
| | | itemDict['Count'] = itemInfo.GetCount()
|
| | | itemDict['IsBind'] = int(itemInfo.GetIsBind())
|
| | | itemDict['IsSuite'] = int(itemInfo.GetIsSuite())
|
| | | itemDict['IsAuctionItem'] = itemInfo.GetIsBind()
|
| | | #itemDict['IsSuite'] = int(itemInfo.GetIsSuite())
|
| | | itemDict['UserData'] = itemInfo.GetUserData()
|
| | | jsonItemList.append(itemDict)
|
| | | return jsonItemList
|
| | |
| | | #---------------------------------------------------------------------
|
| | | def SyncDynamicBarrierState(barrierPointList, state, curPlayer=None):
|
| | | '''同步动态障碍物是否有效性
|
| | | @param barrierPointList: 障碍物点列表 [[aPosX,aPosY,bPosX,bPosY], [aPosX,aPosY,bPosX,bPosY], ...]
|
| | | @param barrierPointList: 障碍物点列表 [[aPosX,aPosY,bPosX,bPosY,angle可选], [aPosX,aPosY,bPosX,bPosY,angle可选], ...]
|
| | | @param state: 是否有效
|
| | | @param curPlayer: 指定通知目标玩家,为None时广播本地图所有玩家
|
| | | '''
|
| | |
| | | barrierStatePack.Clear()
|
| | | barrierStatePack.State = state
|
| | | barrierStatePack.BarrierList = []
|
| | | for aPosX, aPosY, bPosX, bPosY in barrierPointList:
|
| | | for posInfo in barrierPointList:
|
| | | aPosX, aPosY, bPosX, bPosY = posInfo[:4]
|
| | | angle = posInfo[4] if len(posInfo) > 4 else 0
|
| | | barrier = ChPyNetSendPack.tagMCDynamicBarrier()
|
| | | barrier.APosX = aPosX
|
| | | barrier.APosY = aPosY
|
| | | barrier.BPosX = bPosX
|
| | | barrier.BPosY = bPosY
|
| | | barrier.Angle = angle
|
| | | barrierStatePack.BarrierList.append(barrier)
|
| | | barrierStatePack.Count = len(barrierStatePack.BarrierList)
|
| | | if curPlayer:
|
| | |
| | | newEnterCnt = max(0, dayTimes - (maxCnt - enterCnt))
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, enterCntKey, newEnterCnt)
|
| | | GameWorld.DebugLog(" 特殊副本已进入次数更新: newEnterCnt=%s" % newEnterCnt)
|
| | | elif mapID == ChConfig.Def_FBMapID_ZhuXianBoss:
|
| | | if GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_ZhuXianBoss):
|
| | | curCnt = min(maxCnt - enterCnt + IpyGameDataPY.GetFuncCfg('ZhuXianBossCntCfg'), IpyGameDataPY.GetFuncCfg('ZhuXianBossCntCfg', 2))
|
| | | if curCnt > dayTimes:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, itemAddCntKey, curCnt - dayTimes)
|
| | | elif curCnt < dayTimes:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, enterCntKey, dayTimes - curCnt)
|
| | |
|
| | | mapIDInfo.append(mapID)
|
| | |
|
| | |
| | | if mapID == ChConfig.Def_FBMapID_SealDemon and maxDayTimes and maxCnt - enterCnt >= maxDayTimes:
|
| | | GameWorld.DebugLog('当前次数已满,无需购买。。')
|
| | | return
|
| | | if mapID == ChConfig.Def_FBMapID_ZhuXianBoss and maxCnt - enterCnt >= IpyGameDataPY.GetFuncCfg('ZhuXianBossCntCfg', 2):
|
| | | return
|
| | | |
| | | if hasBuyCnt >= canBuyCnt:
|
| | | GameWorld.DebugLog("购买次数已经用完mapID=%s"%mapID)
|
| | | return
|
| | |
| | | # @param tick 当前时间
|
| | | # @param isMaxlv 是否直接满级
|
| | | # @return None
|
| | | def FbEncourageBuff(curPlayer, key, encourageType, tick, isMaxlv=False):
|
| | | def FbEncourageBuff(curPlayer, key, encourageType, tick, ownerID=0):
|
| | | #GameWorld.Log("FbEncourageBuff moneyType=%s" % (moneyType))
|
| | | curMapID = curPlayer.GetMapID()
|
| | | curMapID = GetRecordMapID(curMapID)
|
| | |
| | | return
|
| | | maxCnt = ipyData.GetInspireMaxLV()
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | curPlayerID = curPlayer.GetID()
|
| | | encourageLV = gameFB.GetPlayerGameFBDictByKey(curPlayerID, key)
|
| | | ownerID = ownerID or curPlayer.GetID()
|
| | | encourageLV = gameFB.GetPlayerGameFBDictByKey(ownerID, key)
|
| | | encourageCntKey = 'FbEncourageCnt_%s' % encourageType
|
| | | encourageCnt = gameFB.GetPlayerGameFBDictByKey(curPlayerID, encourageCntKey)
|
| | | encourageCnt = gameFB.GetPlayerGameFBDictByKey(ownerID, encourageCntKey)
|
| | | maxLV = IpyGameDataPY.GetFuncEvalCfg('FBEncourageBuff', 2, {}).get(curMapID, 0)
|
| | | if encourageLV >= maxLV:
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_93643")
|
| | |
| | | return
|
| | |
|
| | | buffType = SkillCommon.GetBuffType(skillBuff)
|
| | | BuffSkill.DoAddBuff(curPlayer, buffType, skillBuff, tick)
|
| | | gameFB.SetPlayerGameFBDict(curPlayerID, key, encourageLV+1)
|
| | | gameFB.SetPlayerGameFBDict(curPlayerID, encourageCntKey, encourageCnt+1)
|
| | | |
| | | gameFB.SetPlayerGameFBDict(ownerID, key, encourageLV+1)
|
| | | gameFB.SetPlayerGameFBDict(ownerID, encourageCntKey, encourageCnt+1)
|
| | | #GameWorld.Log("FbEncourageBuff encourage nextLV=%s success" % encourageLV)
|
| | | addHurtNum = IpyGameDataPY.GetFuncEvalCfg('FBEncourageBuff', 3, {}).get(curMapID, 0)
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_628920", [(encourageLV+1)*addHurtNum])
|
| | | SendFBEncourageInfo(curPlayer, encourageLV+1)
|
| | | #成就
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FBEncourage, 1, [curMapID])
|
| | | EventShell.EventRespons_FBEncourage(curPlayer, curMapID)
|
| | | return
|
| | | if curMapID == ChConfig.Def_FBMapID_AllFamilyBoss:
|
| | | #给副本里所有盟成员提示
|
| | | playerManager = GameWorld.GetMapCopyPlayerManager()
|
| | | for index in xrange(playerManager.GetPlayerCount()):
|
| | | player = playerManager.GetPlayerByIndex(index)
|
| | | if not player:
|
| | | continue
|
| | | if player.GetFamilyID() != ownerID:
|
| | | continue
|
| | | BuffSkill.DoAddBuff(player, buffType, skillBuff, tick)
|
| | | PlayerControl.NotifyCode(player, "AllianceBossText2", [curPlayer.GetName(), encourageLV+1])
|
| | | SendFBEncourageInfo(player, encourageLV+1, ownerID)
|
| | | if player.GetID() == curPlayer.GetID():
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FBEncourage, 1, [curMapID])
|
| | | EventShell.EventRespons_FBEncourage(curPlayer, curMapID)
|
| | | |
| | | else:
|
| | | BuffSkill.DoAddBuff(curPlayer, buffType, skillBuff, tick)
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_628920", [(encourageLV+1)*addHurtNum])
|
| | | SendFBEncourageInfo(curPlayer, encourageLV+1, ownerID)
|
| | | #成就
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FBEncourage, 1, [curMapID])
|
| | | EventShell.EventRespons_FBEncourage(curPlayer, curMapID)
|
| | | return True
|
| | |
|
| | | ## 添加副本鼓舞buff,一般用于玩家掉线后,在规定时间内重新上线回到副本时重新上buff
|
| | | # @param curPlayer 玩家
|
| | | # @param key 副本玩家字典key
|
| | | # @param tick 当前时间
|
| | | # @return None
|
| | | def AddFbEncourageBuff(curPlayer, key, tick):
|
| | | def AddFbEncourageBuff(curPlayer, key, tick, ownerID=0):
|
| | | curPlayerID = curPlayer.GetID()
|
| | | GameWorld.Log("AddFbEncourageBuff() curPlayerID=%s" % curPlayerID)
|
| | |
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | encourageLV = gameFB.GetPlayerGameFBDictByKey(curPlayerID, key)
|
| | | encourageLV = gameFB.GetPlayerGameFBDictByKey(ownerID, key)
|
| | | if not encourageLV:
|
| | | return
|
| | | mapID = GameWorld.GetMap().GetMapID()
|
| | |
| | | buffType = SkillCommon.GetBuffType(skillBuff)
|
| | | BuffSkill.DoAddBuff(curPlayer, buffType, skillBuff, tick)
|
| | |
|
| | | SendFBEncourageInfo(curPlayer, encourageLV)
|
| | | SendFBEncourageInfo(curPlayer, encourageLV, ownerID)
|
| | | return
|
| | |
|
| | | ## 清除鼓舞buff
|
| | |
| | | ## 发送副本鼓舞信息
|
| | | # @param curPlayer 玩家
|
| | | # @return None
|
| | | def SendFBEncourageInfo(curPlayer, lv):
|
| | | def SendFBEncourageInfo(curPlayer, lv, ownerID=0):
|
| | | #//A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo
|
| | | curMapID = curPlayer.GetMapID()
|
| | | curMapID = GetRecordMapID(curMapID)
|
| | |
| | | encourageInfo.InfoList = []
|
| | | encourageCntKey = 'FbEncourageCnt_%s'
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | curPlayerID = curPlayer.GetID()
|
| | | ownerID = ownerID or curPlayer.GetID()
|
| | | for ipyData in ipyDataList:
|
| | | inspireType = ipyData.GetInspireType()
|
| | | packData = ChPyNetSendPack.tagMCFBEncourageCnt()
|
| | | packData.MoneyType = inspireType
|
| | | packData.EncourageCnt = gameFB.GetPlayerGameFBDictByKey(curPlayerID, encourageCntKey % inspireType)
|
| | | packData.EncourageCnt = gameFB.GetPlayerGameFBDictByKey(ownerID, encourageCntKey % inspireType)
|
| | | encourageInfo.InfoList.append(packData)
|
| | | encourageInfo.Cnt = len(encourageInfo.InfoList)
|
| | | NetPackCommon.SendFakePack(curPlayer, encourageInfo)
|