#!/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.JobRank = PlayerControl.GetJobRank(curPlayer)  
 | 
    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  
 |