ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
@@ -24,6 +24,7 @@
import IPY_GameWorld
import PlayerGubao
import ChConfig
import time
# 战令类型
ZhanlingTypeList = (
@@ -31,10 +32,17 @@
ZhanlingType_Realm,
ZhanlingType_SkyTower,
ZhanlingType_GubaoStar,
) = range(1, 1 + 4)
ZhanlingType_Login,
) = range(1, 1 + 5)
def OnPlayerLogin(curPlayer):
    for zhanlingType in ZhanlingTypeList:
        if zhanlingType == ZhanlingType_Login:
            value1 = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
            if not value1:
                firstLoginTime = int(time.time())
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, firstLoginTime)
                GameWorld.DebugLog("设置登录战令首次登录时间: %s" % firstLoginTime, curPlayer.GetPlayerID())
        SyncZhanlingInfo(curPlayer, zhanlingType)
    return
@@ -51,15 +59,30 @@
        updState = state|pow(2, zhanlingType)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingState, updState)
        SyncZhanlingInfo(curPlayer, zhanlingType)
        GameWorld.Log("激活战令: zhanlingType=%s,updState=%s" % (zhanlingType, updState), curPlayer.GetPlayerID())
        GameWorld.Log("激活战令普通: zhanlingType=%s,updState=%s" % (zhanlingType, updState), curPlayer.GetPlayerID())
        break
    
    # 高级战令
    zhanlingCTGIDDictH = IpyGameDataPY.GetFuncEvalCfg("Zhanling", 3)
    for zhanlingTypeStr, ctgIDList in zhanlingCTGIDDictH.items():
        if ctgID not in ctgIDList:
            continue
        zhanlingType = int(zhanlingTypeStr)
        state = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingStateH)
        if state&pow(2, zhanlingType):
            break
        updState = state|pow(2, zhanlingType)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingStateH, updState)
        SyncZhanlingInfo(curPlayer, zhanlingType)
        GameWorld.Log("激活战令高级: zhanlingType=%s,updState=%s" % (zhanlingType, updState), curPlayer.GetPlayerID())
        break
    return
def GetZhanlingReward(curPlayer, zhanlingType, rewardID):
    ## 领取战令奖励
    rewardID = GameWorld.ToIntDef(rewardID)
    needValue, isFree = rewardID/10, rewardID%10
    needValue, rewardType = rewardID/10, rewardID%10 # rewardType: 0-免费;1-普通;2-高级
    playerID = curPlayer.GetPlayerID()
    
    ipyData = IpyGameDataPY.GetIpyGameData("Zhanling", zhanlingType, needValue)
@@ -75,6 +98,11 @@
        curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerFloor)
    elif zhanlingType == ZhanlingType_GubaoStar:
        _, curValue = PlayerGubao.GetGubaoTotalLVStar(curPlayer)
    elif zhanlingType == ZhanlingType_Login:
        firstLoginTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
        if not firstLoginTime:
            return
        curValue = GameWorld.GetDiff_Day(int(time.time()), firstLoginTime) + 1
    else:
        return
        
@@ -85,16 +113,27 @@
    rewardIndex = ipyData.GetRewardIndex()
    itemList = ipyData.GetFreeRewardItemList()
    rewardKey = ChConfig.Def_PDict_ZhanlingRewardFree
    if not isFree:
    if rewardType == 1:
        itemList = ipyData.GetZLRewardItemList()
        rewardKey = ChConfig.Def_PDict_ZhanlingReward
        state = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingState)
        if not state&pow(2, zhanlingType):
            GameWorld.DebugLog("战令未激活,无法领取战令奖励: zhanlingType=%s,state=%s,isFree=%s" % (zhanlingType, state, isFree), playerID)
            GameWorld.DebugLog("普通战令未激活,无法领取战令奖励: zhanlingType=%s,state=%s" % (zhanlingType, state), playerID)
            return
    elif rewardType == 2:
        itemList = ipyData.GetZLRewardItemListH()
        rewardKey = ChConfig.Def_PDict_ZhanlingRewardH
        state = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingStateH)
        if not state&pow(2, zhanlingType):
            GameWorld.DebugLog("高级战令未激活,无法领取战令奖励: zhanlingType=%s,state=%s" % (zhanlingType, state), playerID)
            return
        
    if not itemList:
        GameWorld.DebugLog("没有该战令奖励! zhanlingType=%s,needValue=%s,rewardType=%s" % (zhanlingType, needValue, rewardType), playerID)
        return
    if GameWorld.GetDictValueByBit(curPlayer, rewardKey, rewardIndex, True, [zhanlingType]):
        GameWorld.DebugLog("已经领取过该战令奖励! zhanlingType=%s,needValue=%s,isFree=%s" % (zhanlingType, needValue, isFree), playerID)
        GameWorld.DebugLog("已经领取过该战令奖励! zhanlingType=%s,needValue=%s,rewardType=%s" % (zhanlingType, needValue, rewardType), playerID)
        return
    
    # 检查背包
@@ -104,7 +143,7 @@
    # 更新已领取成功标记
    GameWorld.SetDictValueByBit(curPlayer, rewardKey, rewardIndex, 1, True, [zhanlingType])
    SyncZhanlingInfo(curPlayer, zhanlingType, ipyData)
    GameWorld.DebugLog("领取战令奖励: zhanlingType=%s,needValue=%s,isFree=%s" % (zhanlingType, needValue, isFree), playerID)
    GameWorld.DebugLog("领取战令奖励: zhanlingType=%s,needValue=%s,rewardType=%s,itemList=%s" % (zhanlingType, needValue, rewardType, itemList), playerID)
    
    # 给物品
    for itemID, itemCount, isAuctionItem in itemList:
@@ -131,12 +170,15 @@
        reward.NeedValue = ipyData.GetNeedValue()
        reward.FreeRewardState = 1 if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardFree, rewardIndex, True, [zhanlingType]) else 0
        reward.ZLRewardState = 1 if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingReward, rewardIndex, True, [zhanlingType]) else 0
        reward.ZLRewardStateH = 1 if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardH, rewardIndex, True, [zhanlingType]) else 0
        rewardList.append(reward)
        
    clientPack = ChPyNetSendPack.tagMCZhanlingInfo()
    clientPack.Clear()
    clientPack.ZhanlingType = zhanlingType
    clientPack.IsActivite = 1 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingState)&pow(2, zhanlingType) else 0
    clientPack.IsActiviteH = 1 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingStateH)&pow(2, zhanlingType) else 0
    clientPack.Value1 = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
    clientPack.RewardList = rewardList
    clientPack.RewardCount = len(clientPack.RewardList)
    NetPackCommon.SendFakePack(curPlayer, clientPack)