#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#---------------------------------------------------------------------  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
##@package PlayerFamilyTech  
 | 
# @todo: ¼Ò×å¿Æ¼¼  
 | 
#  
 | 
# @author: panwei  
 | 
# @date 2011-06-17  
 | 
# @version 1.2  
 | 
#  
 | 
# @change: "2016-06-08 16:00" hxp ÓÀºãÕ½Ã˿Ƽ¼°æ±¾  
 | 
# @change: "2016-10-31 16:00" hxp ÆÁ±ÎÕ½Ã˿Ƽ¼, ¸ÄΪ´¿µØÍ¼´¦Àíģʽ  
 | 
#---------------------------------------------------------------------  
 | 
#"""Version = 2016-10-31 16:00"""  
 | 
#---------------------------------------------------------------------  
 | 
import GameWorld  
 | 
import ReadChConfig  
 | 
#import PlayerFamily  
 | 
#import PlayerFamilyAction  
 | 
#import DataRecordPack  
 | 
#import IPY_GameServer  
 | 
#import PlayerControl  
 | 
#import ShareDefine  
 | 
#import ChConfig  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
(  
 | 
Def_TechLVUP_NeedBoomValue, # ÏûºÄÕ½ÃË·±ÈÙ  
 | 
Def_TechLVUP_NeedMoney, # ÏûºÄÕ½Ã˽ðÇ®  
 | 
Def_TechLVUP_NeedHornor, # ÏûºÄÕ½ÃË×êʯ  
 | 
Def_TechLVUP_NeedContribution, # ¸öÈËÉý¼¶ÐèÒªÏûºÄ¹±Ï×¶È  
 | 
) = range(4)  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##Íæ¼ÒµÇ½, ¼Ò×å¿Æ¼¼Âß¼´¦Àí  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return None  
 | 
# @remarks   
 | 
def OnLogin(curPlayer, tick):  
 | 
    curFamily = curPlayer.GetFamily()  
 | 
    if not curFamily:  
 | 
        #Íæ¼ÒÎÞ¼Ò×å  
 | 
        return  
 | 
      
 | 
    if not GameWorld.GetFamilyTechManager().GetFamilyTechByFamilyID(curFamily.GetID()):  
 | 
        return  
 | 
  
 | 
    #֪ͨ¿Í»§¶Ë¼Ò×å¿Æ¼¼ÐÅÏ¢  
 | 
    curPlayer.Sync_FamilyTechInfo()  
 | 
    return  
 | 
  
 | 
#===============================================================================  
 | 
# //0F 16 °ï»á¿Æ¼¼Éý¼¶#tagCFamilyTecLvUP  
 | 
#   
 | 
# struct       tagCFamilyTecLvUP  
 | 
# {  
 | 
#         tagHead            Head;  
 | 
#         DWORD  TecID; //¿Æ¼¼ID   
 | 
#         BYTE  IsUseKey; //ÊÇ·ñʹÓÃÍ»·ÉÁî   
 | 
# };  
 | 
#===============================================================================  
 | 
##°ï»á¿Æ¼¼Éý¼¶»òÈ¡Ïû  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦ °ï»á¿Æ¼¼Éý¼¶#tagCFamilyTecLvUP  
 | 
def CChangeFamilyTech(index, tick):  
 | 
    #¸ÄΪµØÍ¼Ö±½Ó´¦Àí£¬ÔÝÆÁ±Î  
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#    curFamily = curPlayer.GetFamily()  
 | 
#      
 | 
#    if not curFamily:  
 | 
#        return  
 | 
#      
 | 
#    clientPack = IPY_GameServer.IPY_CFamilyTecLvUP()  
 | 
#    techID = clientPack.GetTecID()  
 | 
#  
 | 
#    #Ñé֤ȨÏÞ  
 | 
#    if not PlayerFamily.GetPlayerHasFamilyPow(curPlayer, ChConfig.Def_PurviewDictKey_CanLvUpTech):  
 | 
#        GameWorld.DebugLog("ûÓÐÉý¼¶Õ½Ã˿Ƽ¼È¨ÏÞ!")  
 | 
#        return  
 | 
#      
 | 
#    FamilyTechIDList = ReadChConfig.GetEvalChConfig("FamilyTechID")  
 | 
#    if techID not in FamilyTechIDList:  
 | 
#        GameWorld.DebugLog("Õ½Ã˿Ƽ¼²»´æÔÚ, techID=%s not in FamilyTechID.txt!" % techID)  
 | 
#        return  
 | 
#      
 | 
#    curFamilyID = curFamily.GetID()  
 | 
#    curFamilyLv = curFamily.GetLV()  
 | 
#    FamilyTechMaxLVDict = ReadChConfig.GetEvalChConfig("FamilyTechMaxLV")  
 | 
#    if not FamilyTechMaxLVDict:  
 | 
#        return  
 | 
#    maxConfFamilyLV = max(FamilyTechMaxLVDict)  
 | 
#    getLV = maxConfFamilyLV if curFamilyLv > maxConfFamilyLV else curFamilyLv  
 | 
#    maxTechLV = FamilyTechMaxLVDict.get(getLV)  
 | 
#    if not maxTechLV:  
 | 
#        GameWorld.DebugLog("Õ½Ã˵ȼ¶=%s, ¶ÔÓ¦µÄÕ½Ã˿Ƽ¼×î´óµÈ¼¶²»´æÔÚ! ¼ì²é FamilyTechMaxLV.txt!" % (getLV))          
 | 
#        return  
 | 
#      
 | 
#    familyTechMgr = GameWorld.GetFamilyTechManager()  
 | 
#    learnTech = familyTechMgr.FindFamilyTechData(curFamilyID, techID)  
 | 
#    curTechLV = 0 if not learnTech else learnTech.GetTechCurLV()  
 | 
#    if curTechLV >= maxTechLV:  
 | 
#        GameWorld.DebugLog("µ±Ç°Õ½Ã˿Ƽ¼ÒÑ´ï×î´óµÈ¼¶! curTechLV=%s,curFamilyLv=%s,maxTechLV=%s!" % (curTechLV, curFamilyLv, maxTechLV))          
 | 
#        return  
 | 
#      
 | 
#    lvUPTechLV = curTechLV + 1  
 | 
#    FamilyTechLVUPDict = ReadChConfig.GetEvalChConfig("FamilyTechLVUP")  
 | 
#    techLVUPInfo = FamilyTechLVUPDict.get(lvUPTechLV)  
 | 
#    if not techLVUPInfo:  
 | 
#        GameWorld.ErrLog("Õ½Ã˿Ƽ¼µÈ¼¶(%s) not in FamilyTechLVUP.txt!" % lvUPTechLV)  
 | 
#        return  
 | 
#      
 | 
#    needBoomValue = techLVUPInfo[Def_TechLVUP_NeedBoomValue]  
 | 
#    needMoney = techLVUPInfo[Def_TechLVUP_NeedMoney]  
 | 
#    needHornor = techLVUPInfo[Def_TechLVUP_NeedHornor]  
 | 
#      
 | 
#    if curFamily.GetBoomValue() < needBoomValue:  
 | 
#        GameWorld.DebugLog("Õ½ÃË·±ÈÙ»îÔ¾¶È²»×ã! needBoomValue=%s" % (needBoomValue))  
 | 
#        return  
 | 
#    if curFamily.GetMoney() < needMoney:  
 | 
#        GameWorld.DebugLog("Õ½ÃË×ʽð²»×ã! needMoney=%s" % (needMoney))  
 | 
#        return  
 | 
#    if curFamily.GetHornor() < needHornor:  
 | 
#        GameWorld.DebugLog("Õ½ÃË×êʯ²»×ã! needHornor=%s" % (needHornor))  
 | 
#        return  
 | 
#      
 | 
#    if learnTech == None:  
 | 
#        learnTech = familyTechMgr.AddFamilyTechData(curFamilyID, techID)  
 | 
#        if learnTech == None:  
 | 
#            GameWorld.ErrLog('curFamilyID = %s, Éý¼¶ techID = %s Òì³£' % (curFamilyID, techID))  
 | 
#            return  
 | 
#        #ÉèÖÿƼ¼¼Ò×åID  
 | 
#        learnTech.SetFamilyID(curFamilyID)  
 | 
#          
 | 
#    #---¿ªÊ¼Éý¼¶---  
 | 
#    curFamily.SetBoomValue(curFamily.GetBoomValue() - needBoomValue)  
 | 
#    curFamily.SetMoney(curFamily.GetMoney() - needMoney)  
 | 
#    curFamily.SetHornor(curFamily.GetHornor() - needHornor)  
 | 
#      
 | 
#    learnTech.SetTechCurLV(lvUPTechLV)  
 | 
#      
 | 
#    #¿Æ¼¼Éý¼¶Á÷Ïò  
 | 
#    dataDict = {"familyID":curFamilyID, "techID":techID, "lvUPTechLV":lvUPTechLV, "needBoomValue":needBoomValue,   
 | 
#                "needMoney":needMoney, "needHornor":needHornor}  
 | 
#    DataRecordPack.SendEventPack("FamilyTechLVUP", dataDict)  
 | 
#  
 | 
#    #¼Ç¼Éý¼¶ÐÅÏ¢  
 | 
#    PlayerFamilyAction.AddFamilyActionNote(curPlayer.GetName(), curFamilyID, ShareDefine.Def_ActionType_FamilyEvent,   
 | 
#                                           [ShareDefine.Def_FamilyActionEvent_Tech, techID, lvUPTechLV], tick)  
 | 
#      
 | 
#    #֪ͨ¿Í»§¶Ë¼Ò×åÊôÐÔ±ä¸ü  
 | 
#    curFamily.Broadcast_FamilyChange()  
 | 
#    #֪ͨµØÍ¼·þÎñÆ÷ˢмÒ×åÊôÐÔ  
 | 
#    PlayerFamily.SendPack_MapServer_PlayerFamilyRefresh(curFamily)  
 | 
#  
 | 
#    #֪ͨ¼Ò×å¿Æ¼¼±ä¸ü  
 | 
#    NotifyFamilyTechInfoChange(curFamily)  
 | 
#  
 | 
#    #¿Æ¼¼Éý¼¶³É¹¦  
 | 
#    PlayerControl.FamilyNotify(curFamilyID, "jiazu_liubo_318691", [techID, lvUPTechLV])  
 | 
#    GameWorld.Log('¿Æ¼¼Éý¼¶³É¹¦ familyID=%s,techID=%s,lvUPTechLV=%s' % (curFamilyID, techID, lvUPTechLV))  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##֪ͨ¼Ò×å¿Æ¼¼±ä¸ü  
 | 
# @param curFamily ¼Ò×åʵÀý  
 | 
# @param sendMPack ·¢°üµØÍ¼·þÎñÆ÷  
 | 
# @return None  
 | 
# @remarks   
 | 
def NotifyFamilyTechInfoChange(curFamily):  
 | 
      
 | 
    #֪ͨËùÓÐÔÚÏßÍæ¼Ò, ¼Ò×å¿Æ¼¼±ä¸ü  
 | 
    for i in range(0, curFamily.GetCount()):  
 | 
        curMember = curFamily.GetAt(i)  
 | 
        curPlayer = curMember.GetPlayer()  
 | 
        if curPlayer == None:  
 | 
            continue  
 | 
        curPlayer.Sync_FamilyTechInfo()  
 | 
  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ɾ³ýÕ½Ã˿Ƽ¼  
 | 
# @param familyID ¼Ò×åID  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks   
 | 
def DelFamilyTechData(familyID):  
 | 
    familyTechMgr = GameWorld.GetFamilyTechManager()  
 | 
    playerFamilyTech = familyTechMgr.GetFamilyTechByFamilyID(familyID)  
 | 
      
 | 
    if not playerFamilyTech:  
 | 
        #ÎÞ¼Ò×å¿Æ¼¼ÐÅÏ¢  
 | 
        return  
 | 
      
 | 
    #---ɾ³ý¼Ò×å¿Æ¼¼ÐÅÏ¢---  
 | 
    familyTechIDList = []  
 | 
      
 | 
    for familyTechIndex in range(0, playerFamilyTech.GetCount()):  
 | 
        familyTechData = playerFamilyTech.GetAt(familyTechIndex)  
 | 
        familyTechIDList.append(familyTechData.GetTechID())  
 | 
      
 | 
    for techID in familyTechIDList:  
 | 
        #Çå³ýÕâ¸ö¼Ò×åµÄ°ï»áÊôÐÔ  
 | 
        familyTechMgr.DeleteFamilyTechData(familyID, techID);  
 | 
        GameWorld.Log("DelFamilyTechData familyID=%s, techID=%s" % (familyID, techID))  
 | 
      
 | 
    return  
 | 
  
 | 
  
 | 
## Íæ¼ÒÇëÇóÕ½Ã˿Ƽ¼Éý¼¶  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @return   
 | 
def OnQuery_PlayerFamilyTechLVUP(curPlayer, infoList):  
 | 
    techID, curPlayerTechLV = infoList  
 | 
      
 | 
    curFamily = curPlayer.GetFamily()  
 | 
      
 | 
    if not curFamily:  
 | 
        return []  
 | 
      
 | 
    familyTech = GameWorld.GetFamilyTechManager().FindFamilyTechData(curFamily.GetID(), techID)  
 | 
    familyTechLV = 0 if not familyTech else familyTech.GetTechCurLV()  
 | 
    if curPlayerTechLV >= familyTechLV:  
 | 
        GameWorld.DebugLog("Íæ¼Òµ±Ç°¿Æ¼¼µÈ¼¶³¬¹ý¸ÃÕ½Ã˵ĿƼ¼µÈ¼¶, ²»¿ÉÉý¼¶!techID=%s,curPlayerTechLV=%s,familyTechLV=%s"   
 | 
                           % (techID, curPlayerTechLV, familyTechLV))  
 | 
        return []  
 | 
      
 | 
    tagTechLV = curPlayerTechLV + 1  
 | 
    FamilyTechLVUPDict = ReadChConfig.GetEvalChConfig("FamilyTechLVUP")  
 | 
    techLVUPInfo = FamilyTechLVUPDict.get(tagTechLV)  
 | 
    if not techLVUPInfo:  
 | 
        GameWorld.ErrLog("¼Ò×å¿Æ¼¼µÈ¼¶(%s) not in FamilyTechLVUP.txt!" % tagTechLV)  
 | 
        return []  
 | 
      
 | 
    needContribution = techLVUPInfo[Def_TechLVUP_NeedContribution]  
 | 
    return [techID, curPlayerTechLV, needContribution]  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 |