|  |  | 
 |  |  | #@return 返回值无意义
 | 
 |  |  | #@remarks //03 01 加属性点#tagCAddPoint
 | 
 |  |  | def AddPoint(index, tick):
 | 
 |  |  |     GameWorld.GetPsycoFunc(__Func_AddPoint)(index, tick)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | ##//03 01 加属性点#tagCAddPoint
 | 
 |  |  | #@param index 玩家索引
 | 
 |  |  | #@param tick 时间戳
 | 
 |  |  | #@return 返回值无意义
 | 
 |  |  | #@remarks //03 01 加属性点#tagCAddPoint
 | 
 |  |  | def __Func_AddPoint(index, tick):
 | 
 |  |  | #// B2 06 玩家加点 #tagCMAddPoint
 | 
 |  |  | #
 | 
 |  |  | #struct    tagCMAddPoint
 | 
 |  |  | #{
 | 
 |  |  | #    tagHead         Head;
 | 
 |  |  | #    BYTE        PointAttrIDCount;    // 加点属性ID个数
 | 
 |  |  | #    BYTE        PointAttrIDList[PointAttrIDCount];    // 加点属性ID列表
 | 
 |  |  | #    WORD        PointValueList[PointAttrIDCount];    // 加点属性ID对应的点数列表
 | 
 |  |  | #};
 | 
 |  |  | def OnAddPoint(index, clientData, tick):
 | 
 |  |  |     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
 | 
 |  |  |     playerControl = PlayerControl.PlayerControl(curPlayer)
 | 
 |  |  |     #JobQuotiety = PlayerControl.JobQuotiety
 | 
 |  |  |     pointAttrIDList = clientData.PointAttrIDList
 | 
 |  |  |     pointValueList = clientData.PointValueList
 | 
 |  |  |     if not pointAttrIDList or not pointValueList or len(pointAttrIDList) != len(pointValueList):
 | 
 |  |  |         return
 | 
 |  |  |      | 
 |  |  |     needTotalPoint = 0
 | 
 |  |  |     for i, attrID in enumerate(pointAttrIDList):
 | 
 |  |  |         if not IpyGameDataPY.GetIpyGameData("RolePoint", attrID):
 | 
 |  |  |             return
 | 
 |  |  |         needTotalPoint += pointValueList[i]
 | 
 |  |  |          | 
 |  |  |     curFreePoint = curPlayer.GetFreePoint()
 | 
 |  |  |     #job = curPlayer.GetJob()
 | 
 |  |  |     recvAddPoint = IPY_GameWorld.IPY_CAddPoint()
 | 
 |  |  |     addValue = recvAddPoint.GetPoint()
 | 
 |  |  |      | 
 |  |  |     #检验是否能够加点
 | 
 |  |  |     if addValue < 1 or addValue > curFreePoint:
 | 
 |  |  |         #检验不通过, 返回
 | 
 |  |  |         #GameWorld.ErrLog("(%s,%s)检验是否能够加点,检验不通过, 返回"%(addValue,curFreePoint) , curPlayer.GetPlayerID())
 | 
 |  |  |     if needTotalPoint > curFreePoint:
 | 
 |  |  |         GameWorld.DebugLog("剩余点数不足! curFreePoint(%s) < needTotalPoint(%s)" % (curFreePoint, needTotalPoint))
 | 
 |  |  |         return
 | 
 |  |  |     
 | 
 |  |  |     #封包加点类型
 | 
 |  |  |     addPointType = recvAddPoint.GetType()
 | 
 |  |  |      | 
 |  |  |     #加点  | 
 |  |  |     if addPointType == ShareDefine.Def_Effect_STR:
 | 
 |  |  |         curPlayer.SetBaseSTR(addValue + curPlayer.GetBaseSTR())
 | 
 |  |  |     curPlayer.SetFreePoint(curFreePoint - needTotalPoint)
 | 
 |  |  |     for i, attrID in enumerate(pointAttrIDList):
 | 
 |  |  |         addPoint = pointValueList[i]
 | 
 |  |  |         curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % attrID)
 | 
 |  |  |         updPoint = curPoint + addPoint
 | 
 |  |  |         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AddPointValue % attrID, updPoint)
 | 
 |  |  |         GameWorld.DebugLog("玩家加点: attrID=%s,curPoint=%s,addPoint=%s,updPoint=%s" % (attrID, curPoint, addPoint, updPoint))
 | 
 |  |  |         
 | 
 |  |  |     elif addPointType == ShareDefine.Def_Effect_PNE:
 | 
 |  |  |         curPlayer.SetBasePNE(addValue + curPlayer.GetBasePNE())
 | 
 |  |  |          | 
 |  |  |     elif addPointType == ShareDefine.Def_Effect_PHY:
 | 
 |  |  |         curPlayer.SetBasePHY(addValue + curPlayer.GetBasePHY())
 | 
 |  |  |          | 
 |  |  |     elif addPointType == ShareDefine.Def_Effect_CON:
 | 
 |  |  |         curPlayer.SetBaseCON(addValue + curPlayer.GetBaseCON())
 | 
 |  |  |          | 
 |  |  |     else:
 | 
 |  |  |         #异常超出边界
 | 
 |  |  |         GameWorld.ErrLog("AddPoint GetTypeErr = %s" % (addPointType) , curPlayer.GetID())
 | 
 |  |  |         return
 | 
 |  |  |      | 
 |  |  |     curPlayer.SetFreePoint(curFreePoint - addValue)
 | 
 |  |  |      | 
 |  |  |     DataRecordPack.DR_Freepoint(curPlayer, "AddPoint", curFreePoint, {"AddPointType":addPointType})
 | 
 |  |  |     playerControl.RefreshPlayerAttrState()      | 
 |  |  |      | 
 |  |  |     NotifyPlayerBasePoint(curPlayer, pointAttrIDList)
 | 
 |  |  |     playerControl = PlayerControl.PlayerControl(curPlayer)
 | 
 |  |  |     playerControl.RefreshPlayerAttrState()
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | def NotifyPlayerBasePoint(curPlayer):
 | 
 |  |  |     #上线通知基础属性点
 | 
 |  |  |     notifyList = []
 | 
 |  |  |     notifyBasePointDict = {
 | 
 |  |  |                  IPY_GameWorld.CDBPlayerRefresh_BaseSTR:'BaseSTR',
 | 
 |  |  |                  IPY_GameWorld.CDBPlayerRefresh_BasePHY:'BasePHY',
 | 
 |  |  |                  IPY_GameWorld.CDBPlayerRefresh_BaseCON:'BaseCON',
 | 
 |  |  |                  IPY_GameWorld.CDBPlayerRefresh_BasePNE:'BasePNE',
 | 
 |  |  |                 }
 | 
 |  |  |     for refreshType, keyStr in notifyBasePointDict.items():
 | 
 |  |  |         notifyStruct = ChPyNetSendPack.tagRefreshType()
 | 
 |  |  |         notifyStruct.RefreshType = refreshType
 | 
 |  |  |         notifyStruct.Value = getattr(curPlayer, 'Get%s'%keyStr)()
 | 
 |  |  |         notifyList.append(notifyStruct)
 | 
 |  |  | def NotifyPlayerBasePoint(curPlayer, syncAttrIDList=[]):
 | 
 |  |  |     # 通知基础属性点,已分配的自由点数
 | 
 |  |  |      | 
 |  |  |     if not syncAttrIDList:
 | 
 |  |  |         ipyDataMgr = IpyGameDataPY.IPY_Data()
 | 
 |  |  |         syncAttrIDList = [ipyDataMgr.GetRolePointByIndex(index).GetAttrID() for index in xrange(ipyDataMgr.GetRolePointCount())]
 | 
 |  |  |         
 | 
 |  |  |     #属性组合包 通知自己
 | 
 |  |  |     sendPack = ChPyNetSendPack.tagObjInfoListRefresh()
 | 
 |  |  |     sendPack.Clear()
 | 
 |  |  |     sendPack.ObjID = curPlayer.GetID()
 | 
 |  |  |     sendPack.ObjType = curPlayer.GetGameObjType()
 | 
 |  |  |     sendPack.Count = len(notifyList)
 | 
 |  |  |     sendPack.RefreshType = notifyList
 | 
 |  |  |     NetPackCommon.SendFakePack(curPlayer, sendPack)
 | 
 |  |  |     pointAttrIDList = []
 | 
 |  |  |     pointValueList = []
 | 
 |  |  |     for attrID in syncAttrIDList:
 | 
 |  |  |         curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % attrID)
 | 
 |  |  |         pointAttrIDList.append(attrID)
 | 
 |  |  |         pointValueList.append(curPoint)
 | 
 |  |  |          | 
 |  |  |     pointInfo = ChPyNetSendPack.tagMCRolePointInfo()
 | 
 |  |  |     pointInfo.PointAttrIDList = pointAttrIDList
 | 
 |  |  |     pointInfo.PointValueList = pointValueList
 | 
 |  |  |     pointInfo.PointAttrIDCount = len(pointAttrIDList)
 | 
 |  |  |     NetPackCommon.SendFakePack(curPlayer, pointInfo)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | #===============================================================================
 |