| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package PlayerDuJie  | 
| #  | 
| # @todo:¾³½ç¶É½Ù  | 
| # @author xdh  | 
| # @date 2017-10-10 14:30  | 
| # @version 1.0  | 
| #  | 
| # ÏêϸÃèÊö: ¾³½ç¶É½Ù  | 
| #-------------------------------------------------------------------------------  | 
| #"""Version = 2017-10-10 14:30"""  | 
| #-------------------------------------------------------------------------------  | 
|   | 
| import GameWorld  | 
| import ShareDefine  | 
| import NetPackCommon  | 
| import ChPyNetSendPack  | 
| import PlayerUniversalGameRec  | 
| import PlayerControl  | 
| import IpyGameDataPY  | 
| import PlayerCompensation  | 
| import ChConfig  | 
| import PlayerFB  | 
|   | 
|   | 
| (  | 
| Def_Self, #×Ô¼º¹ÄÎè  | 
| Def_Common, #ÆÕͨ»¤·¨  | 
| Def_High, #¸ß¼¶»¤·¨  | 
| ) = range(3)  | 
|   | 
| AllRecType = ShareDefine.Def_UniversalGameRecType_DujieHelpAllRecord  | 
| '''  | 
| value1:Ä¿±êplayerID,  | 
| value2:Ä¿±ê¾³½çlv  | 
| value3:ÒÑÔö¼Ó¹¥»÷  | 
| strValue1:Ä¿±êÃû  | 
| strValue3:'[»¤·¨ÕßID,..]'  | 
| '''  | 
|   | 
| RecType = ShareDefine.Def_UniversalGameRecType_DujieHelpRecord  | 
| '''  | 
| value1:Ä¿±êplayerID,  | 
| value2:»¤·¨ÀàÐÍ  | 
| strValue1:»¤·¨ÕßÃû  | 
| '''  | 
| HelpCntRecType = ShareDefine.Def_UniversalGameRecType_DujieHelpCntRecord # ¶É½Ù¸±±¾»¤·¨´ÎÊý5  | 
| '''  | 
| value1:Ä¿±êplayerID,  | 
| value2:»¤·¨½±Àø»ñµÃ´ÎÊý  | 
| '''  | 
|   | 
| ## Íæ¼ÒµÇ¼  | 
| #  @param None  | 
| #  @return None  | 
| def OnPlayerLogin(curPlayer):  | 
|     tagMapID = curPlayer.GetMapID()  | 
|     if PlayerFB.GetRecordMapID(tagMapID) != ChConfig.Def_FBMapID_DuJie:  | 
|         __DelDuJieFBHelpInfo(curPlayer.GetID())  | 
|         return  | 
|     MapServer_DuJieHelpInfo(curPlayer)  | 
|     return  | 
|   | 
| def OnDayEx():  | 
|     GameWorld.GetUniversalRecMgr().Delete(HelpCntRecType)  | 
|     return  | 
|   | 
| def DoDuJieFBOver(msgList):  | 
|     #¸±±¾½áÊø  | 
|     #¸ø»¤·¨Õß·¢½±Àø  | 
|     isPass, playerID = msgList  | 
|     findRec = GetRecDataByID(None, playerID, AllRecType)  | 
|     if not findRec:  | 
|         return  | 
|     if isPass:  | 
|         StrValue3 = findRec.GetStrValue3()  | 
|         helpPlayerIDList = eval(StrValue3) if StrValue3 else []  | 
|         if not helpPlayerIDList:  | 
|             return  | 
|           | 
|         givePlayerIDList = []  | 
|         for heroID in helpPlayerIDList:  | 
|             if __AddDujieHelpCnt(heroID):  | 
|                 givePlayerIDList.append(heroID)  | 
|                  | 
|                   | 
|         if givePlayerIDList:  | 
|             mailKey, day, itemList = IpyGameDataPY.GetFuncEvalCfg('RealmFBHelpAward')  | 
|             content = ShareDefine.Def_MailFormat % (mailKey, findRec.GetStrValue1())  | 
|             GameWorld.DebugLog('¸ø»¤·¨Õß·¢½±Àø ·¢ËÍÓʼþ  givePlayerIDList=%s,tagPlayerID=%s' % (givePlayerIDList, playerID))  | 
|             PlayerCompensation.SendPersonalItemMailEx('', content, day, givePlayerIDList, itemList)  | 
|       | 
|     # ¶É½Ù¸±±¾½áÊø£¬É¾³ýÊý¾Ý  | 
|     __DelDuJieFBHelpInfo(playerID)  | 
|     return  | 
|   | 
| def __DelDuJieFBHelpInfo(playerID):  | 
|     universalRecMgr = GameWorld.GetUniversalRecMgr()  | 
|     for rtype in [AllRecType, RecType]:  | 
|         recordList = universalRecMgr.GetTypeList(rtype)  | 
|         delCnt = 0  | 
|         for index in range(recordList.Count()):  | 
|             dataIndex = index - delCnt  | 
|             universalRecData = recordList.At(dataIndex)  | 
|             if universalRecData.GetValue1() == playerID:  | 
|                 recordList.Delete(dataIndex)  | 
|                 delCnt += 1  | 
|     return  | 
|   | 
| def GetMemberForHelpDujie(curPlayer, result):  | 
|     '''  | 
|     ÏòÃËÓÑ·¢Æð¶É½Ù»¤·¨ÇëÇó  | 
|     '''  | 
|     atkAdd, isInspire = result  | 
|       | 
|     playerID = curPlayer.GetPlayerID()  | 
|     #×Ô¼º¹ÄÎè  | 
|     if isInspire:  | 
|         #ÐÂÔöÒ»Ìõ¼Ç¼  | 
|         valueList = [playerID, Def_Self]  | 
|         strValueList = [curPlayer.GetName()]  | 
|         PlayerUniversalGameRec.MapServer_UniversalGameRec(None, RecType, valueList, strValueList)  | 
|         MapServer_DuJieHelpInfo(curPlayer)  | 
|         GameWorld.DebugLog("ÏòÃËÓÑ·¢Æð¶É½Ù»¤·¨ÇëÇó,  ×Ô¼º¹ÄÎè³É¹¦£¡")  | 
|     else:  | 
|         #²»ÊÇÖ÷¶¯¹ÄÎèÔò´ú±í¸Õ½øÈ븱±¾  | 
|         __DelDuJieFBHelpInfo(playerID)  | 
|           | 
|           | 
|     family = curPlayer.GetFamily()  | 
|     if family == None:  | 
|         GameWorld.Log("ÏòÃËÓÑ·¢Æð¶É½Ù»¤·¨ÇëÇó, Ã»ÓÐÕ½ÃË£¡")  | 
|         return  | 
|     helpPlayerIDList = GetHelpPlayerID(curPlayer)  | 
|     playerManager = GameWorld.GetPlayerManager()  | 
|     for i in range(0, family.GetCount()):  | 
|         notifyMember = family.GetAt(i)  | 
|         notifyPlayer = playerManager.FindPlayerByID(notifyMember.GetPlayerID())  | 
|         if notifyPlayer == None:  | 
|             continue  | 
|         notifyPlayerID = notifyPlayer.GetPlayerID()  | 
|         if notifyPlayerID in helpPlayerIDList:  | 
|             continue  | 
|         if notifyPlayerID == playerID:  | 
|             continue  | 
|         NotifyRealmFBHelpInfo(notifyPlayer, curPlayer, atkAdd)  | 
|       | 
|     return  | 
|   | 
| def NotifyRealmFBHelpInfo(notifyPlayer, curPlayer, atkAdd):  | 
|     #¸øÃËÓÑ֪ͨ»¤·¨ÐÅÏ¢  | 
|     sendPack = ChPyNetSendPack.tagGCRealmFBHelpInfo()  | 
|     sendPack.Clear()  | 
|     sendPack.PlayerName = curPlayer.GetName()  | 
|     sendPack.PlayerID = curPlayer.GetPlayerID()  | 
|     sendPack.RealmLV = curPlayer.GetOfficialRank()  | 
|     sendPack.Job = curPlayer.GetJob()  | 
|     sendPack.AtkAdd = atkAdd/100  | 
|     NetPackCommon.SendFakePack(notifyPlayer, sendPack)  | 
|     return  | 
|   | 
| def __AddDujieHelpCnt(playerID, isAdd=True):  | 
|     findRec = GetRecDataByID(None, playerID, HelpCntRecType, True)  | 
|     curCnt = findRec.GetValue2()  | 
|     maxCnt = IpyGameDataPY.GetFuncCfg('RealmFBHelpLimit')  | 
|     if curCnt >= maxCnt:  | 
|         return  | 
|     if isAdd:  | 
|         findRec.SetValue2(curCnt +1)  | 
|     return True  | 
|   | 
| def GetHelpPlayerID(curPlayer):  | 
|     '''  | 
|     »ñÈ¡ÒѾ»¤·¨µÄÍæ¼ÒIDÁÐ±í  | 
|     '''  | 
|     playerID = curPlayer.GetPlayerID()  | 
|     findRec = GetRecDataByID(curPlayer, playerID, AllRecType, True)  | 
|       | 
|     if not findRec:  | 
|         return []  | 
|     StrValue3 = findRec.GetStrValue3()  | 
|     if not StrValue3:  | 
|         return []  | 
|     return eval(StrValue3)  | 
|   | 
| def GetRecDataByID(curPlayer, playerID, recType, isAddRec=False):  | 
|     findRec = None  | 
|     universalRecMgr = GameWorld.GetUniversalRecMgr()  | 
|     recTypeListData = universalRecMgr.GetTypeList(recType)  | 
|     for index in range(recTypeListData.Count()):  | 
|         universalRecData = recTypeListData.At(index)  | 
|         if universalRecData.GetValue1() == playerID:  | 
|             findRec = universalRecData  | 
|             break  | 
|       | 
|     if not findRec and isAddRec:  | 
|         findRec = recTypeListData.AddRec()  | 
|         findRec.SetValue1(playerID)  | 
|         if curPlayer:  | 
|             findRec.SetValue2(curPlayer.GetOfficialRank())  | 
|             findRec.SetStrValue1(curPlayer.GetName())  | 
|     return findRec  | 
|   | 
| #// A9 02 ¶É½Ù»¤·¨ #tagCGRealmFBHelp  | 
| #  | 
| #struct    tagCGRealmFBHelp  | 
| #{  | 
| #    tagHead    Head;  | 
| #    BYTE    PlayerID;    //»¤·¨Ä¿±êID  | 
| #};  | 
| def OnDujieFBHelp(index, clientData, tick):  | 
|     #»¤·¨  | 
|     tagPlayerID = clientData.PlayerID  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     playerID = curPlayer.GetPlayerID()  | 
|       | 
|     if curPlayer.GetFamilyID() <= 0:  | 
|         GameWorld.DebugLog("ûÓÐÕ½ÃË£¬²»ÄÜÊØ»¤£¡")  | 
|         return  | 
|       | 
|   | 
|     tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID)  | 
|     if tagPlayer:  | 
|         tagMapID = GameWorld.GetQueryPlayerMapID(tagPlayer)  | 
|         if PlayerFB.GetRecordMapID(tagMapID) != ChConfig.Def_FBMapID_DuJie:  | 
|             PlayerControl.NotifyCode(curPlayer, 'Protect_3')  | 
|             return  | 
|       | 
|     findRec = GetRecDataByID(tagPlayer, tagPlayerID, AllRecType)  | 
|     if not findRec:  | 
|         GameWorld.DebugLog("ûÓиÃÄ¿±êÍæ¼ÒÊý¾Ý£¬²»ÄÜÊØ»¤tagPlayerID=%s£¡"%tagPlayerID)  | 
|         return  | 
|     StrValue3 = findRec.GetStrValue3()  | 
|     helpPlayerIDList = eval(StrValue3) if StrValue3 else []  | 
|     if curPlayer.GetPlayerID() in helpPlayerIDList:  | 
|         GameWorld.DebugLog("ÒÑÊØ»¤¹ý£¬ ²»¿ÉÖØ¸´»¤·¨£¡")  | 
|         return  | 
|     curAtkPer = findRec.GetValue3()  | 
|       | 
|     tagRealmLV = findRec.GetValue2()  | 
|     myRealmLV = curPlayer.GetOfficialRank()  | 
|     if myRealmLV <= tagRealmLV:  | 
|         helpType = Def_Common  | 
|     else:  | 
|         helpType = Def_High  | 
|       | 
|     realmFBHelpAttrDict = IpyGameDataPY.GetFuncEvalCfg('RealmFBHelpAttr')  | 
|     attrDict = realmFBHelpAttrDict.get(str(helpType), {})  | 
|     addAtkPer = attrDict.get(str(ShareDefine.Def_Effect_AddAtkByPer), 0)  | 
|     newAtkPer = curAtkPer + addAtkPer  | 
|     if newAtkPer >= IpyGameDataPY.GetFuncCfg('RealmFBHelpAttr', 2):  | 
|         #¼Ó³É´ïµ½ÉÏÏÞ  | 
|         PlayerControl.NotifyCode(curPlayer, 'Protect_2')  | 
|         return  | 
|       | 
|     findRec.SetValue3(newAtkPer)  | 
|     helpPlayerIDList.append(curPlayer.GetPlayerID())  | 
|     findRec.SetStrValue3(str(helpPlayerIDList))  | 
|       | 
|     #ÐÂÔöÒ»Ìõ¼Ç¼  | 
|     valueList = [tagPlayerID, helpType]  | 
|     strValueList = [curPlayer.GetName()]  | 
|     PlayerUniversalGameRec.MapServer_UniversalGameRec(None, RecType, valueList, strValueList)  | 
|       | 
|       | 
|     if tagPlayer:  | 
|         MapServer_DuJieHelpInfo(tagPlayer)  | 
|       | 
|     if not __AddDujieHelpCnt(playerID, False):  | 
|         maxCnt = IpyGameDataPY.GetFuncCfg('RealmFBHelpLimit')  | 
|         PlayerControl.NotifyCode(curPlayer, 'Protect_4', [maxCnt])  | 
|     else:  | 
|         PlayerControl.NotifyCode(curPlayer, 'Protect_1')  | 
|     curPlayer.MapServer_QueryPlayerResult(0, 0, 'DuJieHelpInfo', '', 0)  | 
|     #³É¾Í  | 
|     PlayerControl.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_DujieFBHelp, 1)  | 
|     PlayerControl.DoAddFamilyActivity(curPlayer, ShareDefine.FamilyActive_HelpDujie, 1)  | 
|       | 
|     return  | 
|   | 
| def MapServer_DuJieHelpInfo(curPlayer):  | 
|     # Í¨ÖªµØÍ¼¶É½Ù»¤·¨ÐÅÏ¢  | 
|     sendInfo = []  | 
|     playerID = curPlayer.GetPlayerID()  | 
|     universalRecMgr = GameWorld.GetUniversalRecMgr()  | 
|     recTypeListData = universalRecMgr.GetTypeList(RecType)  | 
|     for index in range(recTypeListData.Count() - 1, -1, -1):  | 
|         universalRecData = recTypeListData.At(index)  | 
|         if universalRecData.GetValue1() == playerID:  | 
|             helpType = universalRecData.GetValue2()  | 
|             name = universalRecData.GetStrValue1()  | 
|             sendInfo.append([helpType, name])  | 
|     sendMsg = str(sendInfo)  | 
|     curPlayer.MapServer_QueryPlayerResult(0, 0, 'DuJieHelpInfo', sendMsg, len(sendMsg))  | 
|     return  | 
|   | 
| def DoRealmUpAddBuff(sendMsg):  | 
|     #¾³½çÌáÉý¸øÈ«·þÔÚÏßÍæ¼Ò¼Ó¾ÑéBUFF  | 
|     minRealmLVLimit = IpyGameDataPY.GetFuncCfg('RadioExpRealm')  | 
|     playerManager = GameWorld.GetPlayerManager()  | 
|     for i in xrange(playerManager.GetActivePlayerCount()):  | 
|         curPlayer = playerManager.GetActivePlayerAt(i)  | 
|         if curPlayer == None or not curPlayer.GetInitOK():  | 
|             continue  | 
|         if PlayerControl.GetIsTJG(curPlayer):  | 
|             continue  | 
|         if curPlayer.GetOfficialRank() < minRealmLVLimit:  | 
|             continue  | 
|         curPlayer.MapServer_QueryPlayerResult(0, 0, 'AddBuff', sendMsg, len(sendMsg))  | 
|     return |