ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActCollectWords.py
@@ -26,19 +26,22 @@
import ItemControler
import IPY_GameWorld
ActCollectWordsNameDict = {
                           1:ShareDefine.OperationActionName_CollectWords,
                           2:ShareDefine.OperationActionName_CollectWords2,
                           }
def GetActInfo(actNum):
    if ShareDefine.OperationActionName_CollectWords not in PyGameData.g_operationActionDict:
        return {}
    actNumDict = PyGameData.g_operationActionDict[ShareDefine.OperationActionName_CollectWords]
    if actNum not in actNumDict:
        return {}
    return actNumDict[actNum]
def OnPlayerLogin(curPlayer):
    ## 玩家登录
    
    for actNum, actName in ActCollectWordsNameDict.items():
    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CollectWords, {}).values():
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        isReset = __CheckPlayerCollectWordsAction(curPlayer, actNum)
        if not isReset:
            actInfo = PyGameData.g_operationActionDict.get(actName, {})
            # 活动中同步活动信息
            if actInfo.get(ShareDefine.ActKey_State):
                SyncCollectWordsActionInfo(curPlayer, actNum)
@@ -60,12 +63,8 @@
def __CheckPlayerCollectWordsAction(curPlayer, actNum):
    ## 检查玩活动数据信息
    
    if actNum not in ActCollectWordsNameDict:
        return
    actName = ActCollectWordsNameDict[actNum]
    playerID = curPlayer.GetPlayerID()
    actInfo = PyGameData.g_operationActionDict.get(actName, {})
    actInfo = GetActInfo(actNum)
    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
    state = actInfo.get(ShareDefine.ActKey_State, 0)
    
@@ -79,7 +78,7 @@
    templateID = 0
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
    if cfgID:
        actIpyData = IpyGameDataPY.GetIpyGameData(actName, cfgID)
        actIpyData = IpyGameDataPY.GetIpyGameData("ActCollectWords", cfgID)
        templateID = 0 if not actIpyData else actIpyData.GetTemplateID()
        exchangeList = IpyGameDataPY.GetIpyGameDataList("CollectWordsExchange", templateID)
        if not exchangeList:
@@ -104,14 +103,15 @@
    if curNPC.GetType() in [ChConfig.ntPriWoodPilePVP]:
        return
    
    for actNum, actName in ActCollectWordsNameDict.items():
        randList = __GetDropWordsItemRateList(curPlayer, actName, curNPC)
    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CollectWords, {}).values():
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        randList = __GetDropWordsItemRateList(curPlayer, curNPC, actInfo)
        if not randList:
            continue
        dropItemID = GameWorld.GetResultByRandomList(randList)
        if not dropItemID:
            continue
        GameWorld.DebugLog("    集字活动掉落物品! actNum=%s,actName=%s,npcID=%s,dropItemID=%s" % (actNum, actName, curNPC.GetNPCID(), dropItemID))
        GameWorld.DebugLog("    集字活动掉落物品! actNum=%s,npcID=%s,dropItemID=%s" % (actNum, curNPC.GetNPCID(), dropItemID))
        
        itemCount = 1 # 默认1个
        isAuctionItem = 0 # 非拍品
@@ -119,18 +119,14 @@
        
    return
def __GetDropWordsItemRateList(curPlayer, actName, npcData):
def __GetDropWordsItemRateList(curPlayer, npcData, actInfo):
    ## 获取掉字饼图列表
    actInfo = PyGameData.g_operationActionDict.get(actName, {})
    if not actInfo:
        return
    
    if not actInfo.get(ShareDefine.ActKey_State):
        return
    
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
    ipyData = IpyGameDataPY.GetIpyGameData(actName, cfgID)
    ipyData = IpyGameDataPY.GetIpyGameData("ActCollectWords", cfgID)
    if not ipyData:
        return
    
@@ -171,9 +167,10 @@
    ## 获取脱机掉落物品
    
    dropItemCountDict = {}
    for actNum, actName in ActCollectWordsNameDict.items():
    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CollectWords, {}).values():
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        
        dropRateList = __GetDropWordsItemRateList(curPlayer, actName, npcData)
        dropRateList = __GetDropWordsItemRateList(curPlayer, npcData, actInfo)
        if not dropRateList:
            continue
        
@@ -196,7 +193,7 @@
                continue
            
            dropItemCountDict[dropItemID] = dropItemCountDict.get(dropItemID, 0) + dropCount
            GameWorld.DebugLog("    脱机集字活动掉字: actNum=%s,actName=%s,dropItemID=%s,dropCount=%s" % (actNum, actName, dropItemID, dropCount))
            GameWorld.DebugLog("    脱机集字活动掉字: actNum=%s,dropItemID=%s,dropCount=%s" % (actNum, dropItemID, dropCount))
            
    return dropItemCountDict
@@ -215,20 +212,14 @@
    
    GameWorld.DebugLog("集字活动兑换!actNum=%s,exchangeNum=%s" % (actNum, exchangeNum))
    
    if actNum not in ActCollectWordsNameDict:
        return
    actName = ActCollectWordsNameDict[actNum]
    actInfo = PyGameData.g_operationActionDict.get(actName, {})
    if not actInfo:
        return
    actInfo = GetActInfo(actNum)
    
    if not actInfo.get(ShareDefine.ActKey_State):
        GameWorld.DebugLog("非集字活动中,无法兑换!actNum=%s" % actNum)
        return
    
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
    ipyData = IpyGameDataPY.GetIpyGameData(actName, cfgID)
    ipyData = IpyGameDataPY.GetIpyGameData("ActCollectWords", cfgID)
    if not ipyData:
        return
    
@@ -301,19 +292,13 @@
def SyncCollectWordsActionInfo(curPlayer, actNum):
    ## 同步活动信息
    
    if actNum not in ActCollectWordsNameDict:
        return
    actName = ActCollectWordsNameDict[actNum]
    actInfo = PyGameData.g_operationActionDict.get(actName, {})
    if not actInfo:
        return
    actInfo = GetActInfo(actNum)
    
    if not actInfo.get(ShareDefine.ActKey_State):
        return
    
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
    ipyData = IpyGameDataPY.GetIpyGameData(actName, cfgID)
    ipyData = IpyGameDataPY.GetIpyGameData("ActCollectWords", cfgID)
    if not ipyData:
        return
    
@@ -360,11 +345,7 @@
def SyncCollectWordsPlayerInfo(curPlayer, actNum, exchangeNum=0):
    ## 同步活动玩家数据
    
    if actNum not in ActCollectWordsNameDict:
        return
    actName = ActCollectWordsNameDict[actNum]
    actInfo = PyGameData.g_operationActionDict.get(actName, {})
    actInfo = GetActInfo(actNum)
    if not actInfo:
        return
    
@@ -372,7 +353,7 @@
        return
    
    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
    ipyData = IpyGameDataPY.GetIpyGameData(actName, cfgID)
    ipyData = IpyGameDataPY.GetIpyGameData("ActCollectWords", cfgID)
    if not ipyData:
        return