| | |
| | | # summonIndex += 1
|
| | |
|
| | |
|
| | | # 更新最后一次离开的非中立常规地图, 从中立地图退出时需要回到该地方,必须在 DoResetWorldPosAndClear 之前更新
|
| | | if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull and curPlayer.GetMapID() not in IpyGameDataPY.GetFuncEvalCfg("MapLine", 4):
|
| | | mapID = curPlayer.GetMapID()
|
| | | posX = curPlayer.GetPosX()
|
| | | posY = curPlayer.GetPosY()
|
| | | lineID = curPlayer.GetClientLineID()
|
| | | NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FromMapID, mapID)
|
| | | NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FromPosX, posX)
|
| | | NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FromPosY, posY)
|
| | | NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FromLineID, lineID)
|
| | | GameWorld.DebugLog("最后一次离开的非中立常规地图更新!mapID=%s,lineID=%s,Pos(%s,%s)" % (mapID, lineID, posX, posY))
|
| | | else:
|
| | | mapID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FromMapID)
|
| | | posX = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FromPosX)
|
| | | posY = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FromPosY)
|
| | | lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FromLineID)
|
| | | GameWorld.DebugLog("最后一次离开的非中立常规地图不变!mapID=%s,lineID=%s,Pos(%s,%s)" % (mapID, lineID, posX, posY))
|
| | | |
| | | #2. 调用切换地图接口
|
| | | curPlayer.DoResetWorldPosAndClear()
|
| | |
|
| | |
| | | #RouteServer未初始化不允许切换地图, 缓存处理
|
| | | GameServerRefresh.Set_PlayerRouteServerInitOK_OnLeaveFB(curPlayer, 1)
|
| | | return
|
| | | |
| | |
|
| | | #中立地图回到上一次非中立常规地图 |
| | | if curPlayer.GetMapID() in IpyGameDataPY.GetFuncEvalCfg("MapLine", 4):
|
| | | mapID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FromMapID)
|
| | | posX = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FromPosX)
|
| | | posY = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FromPosY)
|
| | | lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FromLineID)
|
| | | # 老号支持,本来就在中立地图的,返回新手村
|
| | | if not mapID:
|
| | | # {ְҵ:[dataMapID,posX,posY], ...}
|
| | | createRoleMapDict = IpyGameDataPY.GetFuncEvalCfg("CreateRoleMap", 1, {})
|
| | | if not createRoleMapDict:
|
| | | return
|
| | | job = curPlayer.GetJob()
|
| | | lineID = 0
|
| | | if job in createRoleMapDict:
|
| | | mapID, posX, posY = createRoleMapDict[job]
|
| | | else:
|
| | | mapInfoList = createRoleMapDict.values()
|
| | | mapID, posX, posY = mapInfoList[0]
|
| | | #离开副本
|
| | | mapID = curPlayer.GetFromMapID()
|
| | | posX = curPlayer.GetFromPosX()
|
| | | posY = curPlayer.GetFromPosY()
|
| | | |
| | | else:
|
| | | mapID = curPlayer.GetFromMapID()
|
| | | posX = curPlayer.GetFromPosX()
|
| | | posY = curPlayer.GetFromPosY()
|
| | | lineID = curPlayer.GetFromLineID()
|
| | | |
| | | if mapID == curPlayer.GetMapID():
|
| | | # 如果在同一张地图, 取DB重生点, 普通地图下线重上时FromMapID会被设置为本地图
|
| | | gameMap = GameWorld.GetMap()
|
| | |
| | | #copyMapID = curPlayer.GetCopyMapID()
|
| | | GameWorld.Log("PlayerLeaveFB MapID = %d, PosX = %d, PosY = %d" % (mapID, posX, posY), curPlayer.GetPlayerID())
|
| | |
|
| | | if GameWorld.GetMap().GetAutoSize() and GameWorld.GetGameWorld().GetMapCopyPlayerManager().GetPlayerCount() == 1:
|
| | | if GameWorldProcess.IsNoPlayerNeedCloseFB() and GameWorld.GetGameWorld().GetMapCopyPlayerManager().GetPlayerCount() == 1:
|
| | | #如果副本中只有这一个人, 那么把这个副本设置为玩家安全下线, 关闭副本
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | gameFB.SetIsSafeClose(1)
|
| | |
| | | # ChangePlayerAction(curPlayer, IPY_GameWorld.paNull)
|
| | | #===============================================================================================
|
| | |
|
| | | PlayerResetWorldPosFB(curPlayer, mapID, posX, posY, False, curPlayer.GetFromLineID())
|
| | | PlayerResetWorldPosFB(curPlayer, mapID, posX, posY, False, lineID)
|
| | |
|
| | | #在空闲或者移动状态下,才能锁死玩家
|
| | | if curPlayer.GetPlayerAction() in [IPY_GameWorld.paNull] or curPlayer.IsMoving():
|
| | |
| | | # @remarks 获得玩家升级, 获得的属性点
|
| | | def GetLvUp_AddPoint(curPlayer):
|
| | | curPlayerID = curPlayer.GetID()
|
| | | curReinCnt = curPlayer.GetReincarnationLv() # 当前转生次数
|
| | | curLV = curPlayer.GetLV() # 当前等级
|
| | |
|
| | | addPointList = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1)
|
| | | |
| | | addPoint = addPointList[-1] if curReinCnt >= len(addPointList) else addPointList[curReinCnt]
|
| | | addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {})
|
| | | addPoint = GameWorld.GetDictValueByRangeKey(addPointDict, curLV, 0)
|
| | |
|
| | | if addPoint == None:
|
| | | raise Exception('玩家获得升级属性点异常, reincarnationLv = %s PlayerID = %s' % (curReinCnt, curPlayerID))
|
| | | raise Exception('玩家获得升级属性点异常, curLV = %s PlayerID = %s' % (curLV, curPlayerID))
|
| | | return
|
| | |
|
| | | return int(addPoint)
|
| | |
|
| | | def DoAddPointOpen(curPlayer):
|
| | | '''加点功能开启 处理给自由属性点及老号处理 |
| | | 清除老服玩家未加点的点数(清零),以前加的加点属性不清除,属性不变,战力不减, 根据最新的加点开启等级和老服玩家的当前等级,相差的差值给予玩家对应的加点点数'''
|
| | | beforeFreePoint = curPlayer.GetFreePoint()
|
| | | addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {})
|
| | | initFreePoint = IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 2)
|
| | | openLV = GameFuncComm.GetFuncLimitLV(ShareDefine.GameFuncID_AddPoint)
|
| | | setFreePoint = initFreePoint
|
| | | curLV = curPlayer.GetLV()
|
| | | for lv in xrange(openLV, curLV+1):
|
| | | setFreePoint += GameWorld.GetDictValueByRangeKey(addPointDict, lv, 0)
|
| | | addDataDict = {'beforeFreePoint':beforeFreePoint}
|
| | | DataRecordPack.DR_Freepoint(curPlayer, "AddPointOpen", setFreePoint, addDataDict)
|
| | | curPlayer.SetFreePoint(setFreePoint)
|
| | | GameWorld.DebugLog(' 加点功能开启处理 beforeFreePoint=%s,curLV=%s, setFreePoint=%s'%(beforeFreePoint, curLV, setFreePoint), curPlayer.GetID())
|
| | | return
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | ## 功能模块战斗力类
|
| | |
| | | #其他需作为公式参数的系数
|
| | | AtkSpeedParameter = fpParam.GetCftAtkSpeed()
|
| | | LuckyHitParameter = fpParam.GetCftLuckyHit()
|
| | | |
| | | |
| | | #获取策划配置的表格
|
| | | FightpowerFormula = IpyGameDataPY.GetFuncCfg("FightpowerFormula")
|
| | | totalFightPower = eval(FormulaControl.GetCompileFormula("FightpowerFormula", FightpowerFormula))
|
| | |
| | | curPlayer.SetHP(curPlayer.GetMaxHP())
|
| | | if curPlayer.GetMaxMP() > 0:
|
| | | curPlayer.SetMP(curPlayer.GetMaxMP())
|
| | | |
| | | |
| | | FBLogic.OnPlayerLVUp(curPlayer)
|
| | | # 记录开服活动冲级数据
|
| | | OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_LV, curPlayer.GetLV())
|
| | |
|
| | |
| | | def GetVIPExpireTime(curPlayer): return curPlayer.GetExAttr9()
|
| | | def SetVIPExpireTime(curPlayer, expireTime): return curPlayer.SetExAttr9(expireTime, False, True)
|
| | |
|
| | | ##聊天气泡框
|
| | | def GetChatBubbleBox(curPlayer): return curPlayer.GetExAttr10()
|
| | | def SetChatBubbleBox(curPlayer, value): return curPlayer.SetExAttr10(value, False, True)
|
| | |
|
| | | ##获得玩家威望值
|
| | | def GetPrestige(curPlayer): return 0
|
| | | def SetPrestige(curPlayer, value): return
|
| | |
| | | # @param value: 威望值
|
| | | # @return:
|
| | | def SetMergeWarRank(curPlayer, value):
|
| | | curPlayer.SetExAttr10(value, True, True)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | # @param curPlayer: 玩家实例
|
| | | # @return: 威望值
|
| | | def GetMergeWarRank(curPlayer):
|
| | | return curPlayer.GetExAttr10()
|
| | | return 0
|
| | |
|
| | |
|
| | | ## 设置玩家官爵星级
|
| | |
| | | def GetCalcAttrListValue(curPlayer, funcIndex):
|
| | | ## 获取功能点预先计算的所加属性值
|
| | | attrList = [{} for _ in range(4)]
|
| | | for attrIndex, attrDict in enumerate(attrList):
|
| | | for i in xrange(Def_MaxAddAttrTypeCnt):
|
| | | attrType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CalcAddAttrType % (funcIndex, attrIndex, i))
|
| | | if attrType == 0:
|
| | | break
|
| | | attrDict[attrType] = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CalcAddAttrValue % (funcIndex, attrIndex, i))
|
| | | if isinstance(funcIndex, int):
|
| | | funcIndexList = [funcIndex]
|
| | | elif isinstance(funcIndex, list):
|
| | | funcIndexList = funcIndex
|
| | | else:
|
| | | return attrList
|
| | | |
| | | for funcIndex in funcIndexList:
|
| | | for attrIndex, attrDict in enumerate(attrList):
|
| | | for i in xrange(Def_MaxAddAttrTypeCnt):
|
| | | attrType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CalcAddAttrType % (funcIndex, attrIndex, i))
|
| | | if attrType == 0:
|
| | | break
|
| | | attrValue = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CalcAddAttrValue % (funcIndex, attrIndex, i))
|
| | | if attrType in attrDict:
|
| | | attrDict[attrType] = attrValue + attrDict[attrType]
|
| | | else:
|
| | | attrDict[attrType] = attrValue |
| | | return attrList
|
| | |
|
| | | ## 刷属性时累加功能事先计算好的属性值
|