|  |  |  | 
|---|
|  |  |  | #@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 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #=============================================================================== | 
|---|