ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py
@@ -76,6 +76,7 @@
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageTaskValue % (actNum, taskID), 0)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageTaskFinishCount % (actNum, taskID), 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValue % actNum, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageGJSeconds % actNum, 0)
    
    # 清除垃圾背包物品、重置环保值
    ItemControler.ClearPack(curPlayer, ShareDefine.rptGarbage)
@@ -196,6 +197,68 @@
    Sync_GarbageTaskInfo(curPlayer, actNum, taskID)
    return giveItemList
def OnGetGuajiAwardItemDict(curPlayer, awardSeconds, isQuick):
    ## 获取挂机收益
    dropItemCountDict = {}
    guajiAwardSet = IpyGameDataPY.GetFuncEvalCfg("GarbageSorting", 3) # 挂机收益设置 x秒|x次执行数值4
    if not guajiAwardSet:
        return dropItemCountDict
    doSeconds, doCount = guajiAwardSet
    dropRateList = IpyGameDataPY.GetFuncEvalCfg("GarbageSorting", 4) # 挂机收益概率饼图 [[概率, [物品ID,个数,是否拍品]], ...]
    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_GarbageSorting, {}).values():
        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
        if not actInfo.get(ShareDefine.ActKey_State):
            continue
        if not isQuick:
            unSeconds = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageGJSeconds % (actNum))
            awardSeconds += unSeconds
            canDoCount = awardSeconds / doSeconds
            killCount = canDoCount * doCount
            updUnSeconds = awardSeconds % doSeconds
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageGJSeconds % (actNum), updUnSeconds)
            GameWorld.DebugLog("    挂机垃圾分类: actNum=%s,awardSeconds=%s,canDoCount=%s,killCount=%s,unSeconds=%s,updUnSeconds=%s"
                               % (actNum, awardSeconds, canDoCount, killCount, unSeconds, updUnSeconds))
        else:
            canDoCount = awardSeconds / doSeconds
            killCount = canDoCount * doCount
            GameWorld.DebugLog("    挂机垃圾分类: actNum=%s,awardSeconds=%s,canDoCount=%s,killCount=%s"
                               % (actNum, awardSeconds, canDoCount, killCount))
        if killCount <= 0:
            continue
        preRate = 0
        maxRate = dropRateList[-1][0]
        for rateInfo in dropRateList:
            rate, dropItemInfo = rateInfo
            curRate = rate - preRate
            if not curRate:
                break
            preRate = rate
            if not dropItemInfo:
                continue
            totalRate = curRate * killCount # 总概率
            dropCount = totalRate / maxRate # 可掉落数
            rateEx = totalRate % maxRate # 剩余概率
            if GameWorld.CanHappen(rateEx, maxRate):
                dropCount += 1
            if not dropCount:
                continue
            dropItemID, itemCount, _ = dropItemInfo
            dropItemCount = itemCount * dropCount
            dropItemCountDict[dropItemID] = dropItemCountDict.get(dropItemID, 0) + dropItemCount
            GameWorld.DebugLog("    挂机垃圾分类产出: actNum=%s,dropItemID=%s,dropCount=%s,dropItemCount=%s,curRate=%s,totalRate=%s"
                               % (actNum, dropItemID, dropCount, dropItemCount, curRate, totalRate))
    return dropItemCountDict
#// AA 14 垃圾分类活动分类垃圾 #tagCMActGarbageSorting
#
#struct    tagCMActGarbageSorting