hxp
2022-08-08 a1f9aded73d7c162d51f87a5a6659799f2f08c21
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -38,6 +38,8 @@
import PlayerSuccess
import PlayerPet
import time
Def_HorseEquipIndex = 5
@@ -172,15 +174,25 @@
    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Horse):
        return
    
    activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState)
    if activateState & pow(2, activateID):
        GameWorld.DebugLog("该坐骑已幻化!activateState=%s,activateID=%s" % (activateState, activateID))
        return
    ipyData = IpyGameDataPY.GetIpyGameData("HorseSkinPlus", activateID)
    if not ipyData:
        return
    
    updSkinEndTime = 0
    validTime = ipyData.GetSkinValidTime()
    if validTime:
        curTime = int(time.time())
        skinEndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinEndTime % activateID)
        if curTime >= skinEndTime:
            updSkinEndTime = curTime + validTime
        else:
            updSkinEndTime = skinEndTime + validTime
    else:
        activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState)
        if activateState & pow(2, activateID):
            GameWorld.DebugLog("该坐骑已幻化!activateState=%s,activateID=%s" % (activateState, activateID))
            return
    needItemID = ipyData.GetUnlockItemID()
    needItemCnt = ipyData.GetUnlockItemCnt()
    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
@@ -190,16 +202,23 @@
        return
    ItemCommon.ReduceItem(curPlayer, itemPack, itemList, needItemCnt, False, ChConfig.ItemDel_Horse)
    
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, activateState|pow(2, activateID))
    if validTime:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % activateID, updSkinEndTime)
        GameWorld.DebugLog("坐骑幻化时效 activateID=%s,updSkinEndTime=%s(%s)" % (activateID, updSkinEndTime, GameWorld.ChangeTimeNumToStr(updSkinEndTime)), playerID)
    else:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, activateState|pow(2, activateID))
    playerEquip = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
    itemRideHorse = playerEquip.GetAt(Def_HorseEquipIndex)
    #无指定道具
    if itemRideHorse.IsEmpty():
        DoChangeHorse(curPlayer, 2, activateID, tick)
        
    Sync_HorseClassData(curPlayer)
    GameWorld.Log("坐骑激活成功!activateID=%s" % (activateID), playerID)
    if validTime:
        SyncHorseSkinTimeInfo(curPlayer, activateID)
    else:
        Sync_HorseClassData(curPlayer)
    GameWorld.Log("坐骑激活成功!activateID=%s,updSkinEndTime=%s" % (activateID, updSkinEndTime), playerID)
    
    # 刷属性,更新排行榜
    RefreshHorseAttr(curPlayer)
@@ -265,13 +284,10 @@
        
    # 按幻化
    elif chooseType == 2:
        activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState)
        if not activateState & pow(2, lvID):
            GameWorld.DebugLog("坐骑幻化未激活,无法使用该坐骑皮肤!  activateState=%s,lvID=%s" % (activateState, lvID))
            return
        skinPlusIpyData = IpyGameDataPY.GetIpyGameData("HorseSkinPlus", lvID)
        if not skinPlusIpyData:
            return
        if not CheckHorseSkinState(curPlayer, skinPlusIpyData):
            return
        horseItemID = skinPlusIpyData.GetHorseSkinPlusID()
        
@@ -306,6 +322,31 @@
            
    return True
def CheckHorseSkinState(curPlayer, skinPlusIpyData):
    skinID = skinPlusIpyData.GetID()
    if skinPlusIpyData.GetSkinValidTime():
        skinEndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinEndTime % skinID)
        if not skinEndTime:
            return False
        curTime = int(time.time())
        if curTime >= skinEndTime:
            playerID = curPlayer.GetPlayerID()
            GameWorld.Log("坐骑幻化已过期! skinID=%s,skinEndTime=%s(%s)" % (skinID, skinEndTime, GameWorld.ChangeTimeNumToStr(skinEndTime)), playerID)
            # 发送过期通知邮件,重置为0
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, 0)
            skinItemID = skinPlusIpyData.GetUnlockItemID()
            addItemList = []
            paramList = [skinItemID]
            PlayerControl.SendMailByKey("HorseSkinInvalidNotify", [playerID], addItemList, paramList)
            return False
    else:
        activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState)
        if not activateState & pow(2, skinID):
            #GameWorld.DebugLog("坐骑幻化未激活! skinID=%s,activateState=%s" % (skinID, activateState), curPlayer.GetPlayerID())
            return False
    return True
def DoHorseOpen(curPlayer):
    ## 马匹功能开启
    horseLV = 1
@@ -318,6 +359,12 @@
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, 0)
    for trainType in xrange(1, GetHorseTrainTypes() + 1):
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserTrainLV % trainType, 1)
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
        skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
        skinID = skinPlusIpyData.GetID()
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, 0)
        
    horseID = ipyData.GetHorseSkinID()
    if not ItemCommon.FindItemInPackByItemID(curPlayer, horseID, IPY_GameWorld.rptEquip):
@@ -386,11 +433,9 @@
        
    # 幻化属性
    initFPAdd = 0 #初始战力
    activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState)
    for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
        skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
        skinPlusID = skinPlusIpyData.GetID()
        if not activateState & pow(2, skinPlusID):
        if not CheckHorseSkinState(curPlayer, skinPlusIpyData):
            continue
        initFPAdd += skinPlusIpyData.GetInitFightPower()
        attrTypeList = skinPlusIpyData.GetAttrType()
@@ -643,6 +688,7 @@
            
    Sync_HorseClassData(curPlayer)
    SyncHorsePetSkinData(curPlayer)
    SyncHorseSkinTimeInfo(curPlayer)
    return
def Sync_HorseClassData(curPlayer):
@@ -837,4 +883,29 @@
    NetPackCommon.SendFakePack(curPlayer, packData)
    return
def SyncHorseSkinTimeInfo(curPlayer, skinID=None):
    skinList = []
    if skinID > 0:
        timeInfo = ChPyNetSendPack.tagMCHorseSkinTimeInfo()
        timeInfo.ID = skinID
        timeInfo.InvalidTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinEndTime % skinID)
        skinList.append(timeInfo)
    else:
        ipyDataMgr = IpyGameDataPY.IPY_Data()
        for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
            skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
            skinID = skinPlusIpyData.GetID()
            if not skinPlusIpyData.GetSkinValidTime():
                continue
            timeInfo = ChPyNetSendPack.tagMCHorseSkinTimeInfo()
            timeInfo.ID = skinID
            timeInfo.InvalidTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinEndTime % skinID)
            skinList.append(timeInfo)
    packData = ChPyNetSendPack.tagMCHorseSkinTimeInfoList()
    packData.Clear()
    packData.TimeInfoList = skinList
    packData.TimeCnt = len(packData.TimeInfoList)
    NetPackCommon.SendFakePack(curPlayer, packData)
    return