16 卡牌服务端(优化功能开启命令限制的等级、境界;优化任务开启功能,完成任意任务可开启之前已完成任务可开启的功能;)
20个文件已修改
11个文件已删除
3775 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipEvolve.py 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py 341 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStar.py 328 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py 706 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py 502 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/EventReport.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/LingQi.py 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartPlusLV.py 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartStar.py 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipWash.py 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetItemStarLV.py 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py 553 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py 308 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastWeekParty.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -134,26 +134,6 @@
PacketSubCMD_7=0x35
PacketCallFunc_7=OnHorseStarUp
;玛雅加强
[EquipPlus]
ScriptName = Event\EventSrc\Operate_EquipPlus.py
Writer = wdb
Releaser = wdb
RegType = 0
RegisterPackCount = 3
PacketCMD_1=0xA3
PacketSubCMD_1=0x01
PacketCallFunc_1=OnEquipMayaPlus
PacketCMD_2=0xA3
PacketSubCMD_2=0x16
PacketCallFunc_2=OnEquipPlusEvolve
PacketCMD_3=0xA5
PacketSubCMD_3=0xC7
PacketCallFunc_3=OnActivateMasterPlusLV
;npc交互
[FunctionNPCCommon]
ScriptName = Event\EventSrc\FunctionNPCCommon.py
@@ -205,27 +185,6 @@
PacketCMD_2=0xA3
PacketSubCMD_2=0x13
PacketCallFunc_2=OnItemDecompound
;装备宝石
[EquipStone]
ScriptName = Event\EventSrc\Operate_EquipStone.py
Writer = hxp
Releaser = hxp
RegType = 0
RegisterPackCount = 3
PacketCMD_1=0xA3
PacketSubCMD_1=0x04
PacketCallFunc_1=OnEquipEnchase
PacketCMD_2=0xA3
PacketSubCMD_2=0x05
PacketCallFunc_2=OnEquipStonePick
PacketCMD_3=0xA3
PacketSubCMD_3=0x06
PacketCallFunc_3=OnEquipStoneUpgrade
;玩家战斗相关
[PlayerBattle]
@@ -898,38 +857,6 @@
PacketSubCMD_4=0x46
PacketCallFunc_4=OnBuyTongTianLing
;装备洗练
[EquipWash]
ScriptName = Event\EventSrc\Operate_EquipWash.py
Writer = hxp
Releaser = hxp
RegType = 0
RegisterPackCount = 2
PacketCMD_1=0xA3
PacketSubCMD_1=0x25
PacketCallFunc_1=OnEquipWashAttr
PacketCMD_2=0xA3
PacketSubCMD_2=0x26
PacketCallFunc_2=OnEquipWashAttrChangeOK
;装备进阶
[EquipEvolve]
ScriptName = Event\EventSrc\Operate_EquipEvolve.py
Writer = hxp
Releaser = hxp
RegType = 0
RegisterPackCount = 2
PacketCMD_1=0xA3
PacketSubCMD_1=0x30
PacketCallFunc_1=OnEquipEvolve
PacketCMD_2=0xA3
PacketSubCMD_2=0x31
PacketCallFunc_2=OnEquipShenDecompose
;NPC
[NPCCommon]
ScriptName = NPC\NPCCommon.py
@@ -1013,23 +940,6 @@
PacketCMD_1=0xAB
PacketSubCMD_1=0x11
PacketCallFunc_1=OnQueryOpenServerCampaignAward
;装备分解
[EquipDecompose]
ScriptName = Player\PlayerEquipDecompose.py
Writer = xdh
Releaser = xdh
RegType = 0
RegisterPackCount = 2
PacketCMD_1=0xA3
PacketSubCMD_1=0x2C
PacketCallFunc_1=OnDoEquipDecompose
PacketCMD_2=0xA3
PacketSubCMD_2=0x2D
PacketCallFunc_2=OnDecomposeSetingSave
;寻宝
[PlayerTreasure]
@@ -1319,18 +1229,6 @@
PacketCMD_1=0xAA
PacketSubCMD_1=0x08
PacketCallFunc_1=OnStartLuckyTreasure
;公共部位星数
[Operate_EquipStar]
ScriptName = Event\EventSrc\Operate_EquipStar.py
Writer = xdh
Releaser = xdh
RegType = 0
RegisterPackCount = 1
PacketCMD_1=0xA5
PacketSubCMD_1=0xC5
PacketCallFunc_1=OnEquipPartStarUp
;日常活动
[PlayerActivity]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3622,12 +3622,6 @@
Def_PDict_PetTrainLV = "PetTrainLV_%s"  # 灵宠培养等阶,参数(培养类型)
Def_PDict_PetTrainItemCount = "PetTrainItemCount_%s"  # 灵宠培养当前阶已吃培养丹个数,参数(培养类型)
#装备分解
Def_PDict_EquipDecomposeLV = "EquipDecomposeLV" #等级
Def_PDict_EquipDecomposeExp = "EquipDecomposeExp" #经验
Def_PDict_EquipDecomposeSeting = "EquipDecomposeSeting" #设置数据
Def_PDict_EquipDecomposeCnt = "EquipDecomposeCnt" #已分解件数
#试炼之塔
Def_Player_Dict_TrialTower_PassLV = "TrialTower_PassLV"  # 试炼之塔通关层数
Def_Player_Dict_TrialTower_LastDayPassLV = "Tower_LastDayPassLV"  # 试炼之塔昨日通关层数
@@ -4887,12 +4881,6 @@
CME_FB_RunDaily:"日常跑环",
CME_FB_RunFamily:"战盟跑环",
}
# 功能对应的事件记录类型
FuncCMEDict = {
               ShareDefine.GameFuncID_RunDaily:CME_FB_RunDaily,
               ShareDefine.GameFuncID_RunFamily:CME_FB_RunFamily,
               }
# 需要发送到任务事件扩展记录的类型 ShareDefine.Def_UserAction_ExMissionLog
CME_Ex_Log_List = [CME_Class_Horse, CME_Class_Wing, CME_Class_Official]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipEvolve.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStar.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/EventReport.py
@@ -723,13 +723,6 @@
    __WriteEvent_mission_log(curPlayer, startType, missionName, isFinish, failReason)
    return
def WriteFuncCMEAcceptable(curPlayer, funcID):
    return
    if funcID not in ChConfig.FuncCMEDict:
        return
    WriteEvent_custom_mission_log(curPlayer, ChConfig.FuncCMEDict[funcID], ChConfig.CME_Log_Acceptable)
    return True
def WriteEvent_MWSuccess(curPlayer, mwID, succID, logType, isFinish=0):
    '''写自定义任务 - 法宝成就事件, 事件ID格式:  91+法宝ID+至少4位的成就ID
    '''
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/LingQi.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/OpenFunc.py
@@ -95,25 +95,37 @@
    GameWorld.DebugLog("GM处理等级开启功能: openFuncID=%s,openFuncIDList=%s,needLV=%s" % (openFuncID, openFuncIDList, needLV), curPlayer.GetPlayerID())
    
    # 优先处理升级        
    if needLV:
    if needLV > 1:
        preLV = needLV - 1
        curPlayer.SetLV(preLV)
        PlayerControl.SetPlayerTotalExp(curPlayer, PlayerControl.GetTotalExpByPlayerLv(preLV))
        PlayerControl.PlayerControl(curPlayer).PlayerLvUp()
        # 获取等级需要的境界
        ipyDataMgr = IpyGameDataPY.IPY_Data()
        for index in range(ipyDataMgr.GetRealmCount()):
            realmIpyData = ipyDataMgr.GetRealmByIndex(index)
            if realmIpyData.GetLv() > needRealmLV:
                needRealmLV = realmIpyData.GetLv()
            if realmIpyData.GetLVMax() >= needLV:
                break
    GameWorld.DebugLog("GM处理境界开启功能: needRealmLV=%s" % needRealmLV, curPlayer.GetPlayerID())
    if needRealmLV:
        curPlayer.SetOfficialRank(max(ChConfig.Def_InitOfficialRank, needRealmLV - 1))
        PlayerPrestigeSys.DoRealmLVUpLogic(curPlayer)
        
    for limitMissionID in needMissionIDList:
        if not curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_MissionFinish % limitMissionID):
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_MissionFinish % limitMissionID, 1)
    GameWorld.DebugLog("GM处理任务开启功能: needMissionIDList=%s" % needMissionIDList, curPlayer.GetPlayerID())
    #最后强制触发一次
    #if needMissionIDList:
    GameFuncComm.DoFuncOpenLogic(curPlayer, needMissionIDList)
    GameFuncComm.DoFuncOpenLogic(curPlayer)
    return
def __GetOpenFuncLimit(curPlayer, openFuncIDList):
    maxLV = PlayerControl.GetPlayerMaxLV(curPlayer)
    maxLV = PlayerControl.GetOpenMaxLV()
    needLV = 0
    needRealmLV = 0
    needMissionIDList = []
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartPlusLV.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartStar.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipWash.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetItemStarLV.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
@@ -2005,9 +2005,6 @@
            PlayerControl.SendMailByKey("BuyLoveFBCntCoupleMail", [coupleID], addItemList, paramList)
    return
def DoFuncOpen_RunDaily(curPlayer): return EventReport.WriteFuncCMEAcceptable(curPlayer, ShareDefine.GameFuncID_RunDaily)
def DoFuncOpen_RunFamily(curPlayer): return EventReport.WriteFuncCMEAcceptable(curPlayer, ShareDefine.GameFuncID_RunFamily)
#---------------------------------------------------------------------
## 副本开启提示(几分钟)
#  @param openTimeList 开启时间列表[(开启时钟,开启分钟), ]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -16,16 +16,9 @@
#------------------------------------------------------------------------------ 
import IPY_GameWorld
import GameWorld
import ItemControler
import PlayerControl
import ChConfig
import ItemCommon
import ShareDefine
import ChPyNetSendPack
import NetPackCommon
import IpyGameDataPY
import OpenServerCampaign
import FormulaControl
import PlayerOnline
def RefreshRoleEquipAttr(curPlayer):
@@ -72,13 +65,6 @@
    PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_MainEquip, mainEquipAttrDict)
    return
## 刷新装备对人物属性的改变
#  @param self 类实例
#  @return 返回值无意义
#  @remarks 刷新装备对人物属性的改变
def RefreshPlayerEquipAttribute(curPlayer, classLV=0):
    return
#// A3 18 灵器突破 #tagCMLingQiEquipBreak
#
#struct    tagCMLingQiEquipBreak
@@ -87,71 +73,6 @@
#    DWORD        ItemID;  //突破的物品ID
#}; 
def OnLingQiEquipBreak(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    breakItemID = clientData.ItemID
    ipyData = IpyGameDataPY.GetIpyGameData('LingQiAttr', breakItemID)
    if not ipyData:
        return
    nextItemID = ipyData.GetNextItemID() #突破后的物品ID
    if not IpyGameDataPY.GetIpyGameData('LingQiAttr', nextItemID):
        return
    breakItemData = GameWorld.GetGameData().GetItemByTypeID(breakItemID)
    nextItemData = GameWorld.GetGameData().GetItemByTypeID(nextItemID)
    if not breakItemData or not nextItemData:
        return
    equipIndex = ItemCommon.GetEquipPackIndex(breakItemData)
    if equipIndex != ItemCommon.GetEquipPackIndex(nextItemData):
        GameWorld.DebugLog("突破的物品和突破后的物品不是同个装备位!breakItemID=%s,nextItemID=%s"
                           % (breakItemID, nextItemID))
        return
    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
    curEquip = equipPack.GetAt(equipIndex)
    if not curEquip or curEquip.IsEmpty():
        GameWorld.DebugLog("突破的物品未穿戴!breakItemID=%s"
                           % (breakItemID))
        return
    if curEquip.GetEndureReduceType():
        GameWorld.DebugLog("突破的物品是时效物品!breakItemID=%s"
                           % (breakItemID))
        return
    if curEquip.GetItemTypeID() != breakItemID:
        GameWorld.DebugLog("突破的物品未穿戴!breakItemID=%s"
                           % (breakItemID))
        return
    costItemDict = ipyData.GetUpCostItem()
    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
    lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(costItemDict, itemPack)
    if lackItemDict:
        GameWorld.DebugLog("突破消耗物品不足!breakItemID=%s,costItemDict=%s,lackItemDict=%s"
                           % (breakItemID, costItemDict, lackItemDict))
        return
    #扣消耗
    ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, 'LingQiEquipBreak')
    ItemCommon.DelItem(curPlayer, curEquip, 1, False, ChConfig.ItemDel_LingQiEquipBreak, {}, True)
    #给突破后灵器
    if not ItemControler.PutItemInTempSwap(curPlayer, nextItemID):
        GameWorld.Log("灵器突破后ID(%s)放入临时交换背包失败!" % (nextItemID), curPlayer.GetID())
        return
    ItemCommon.DoLogicSwitchItemEx(curPlayer, ShareDefine.rptTempSwap, IPY_GameWorld.rptEquip, 0, equipIndex)
    changeItemStarLV = 0  #curItem.GetItemStarLV()
    changeItemStoneCnt = 0  #curItem.GetUseStoneCount()
    changeItemHoleCnt = 0  #curItem.GetCanPlaceStoneCount()
    changeItemUseData = ''
    curPlayer.ChangeEquip(nextItemID, equipIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
    #刷属性
    RefreshPlayerLingQiEquipAttr(curPlayer)
    playControl = PlayerControl.PlayerControl(curPlayer)
    playControl.RefreshPlayerAttrState()
    #通知结果
    resultPack = ChPyNetSendPack.tagMCLingQiEquipBreakResult()
    resultPack.Clear()
    resultPack.MakeItemID = nextItemID
    NetPackCommon.SendFakePack(curPlayer, resultPack)
    PlayerControl.WorldNotify(0, 'SpiritOrgan', [curPlayer.GetName(), breakItemID, nextItemID])
    return
#// A3 27 灵器培养 #tagCMLingQiTrain
@@ -164,220 +85,11 @@
#    WORD        UseItemCnt;        //消耗材料个数
#};
def OnLingQiTrain(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    equipPlace = clientData.EquipPlace # 灵器装备位
    trainType = clientData.TrainType # 培养类型
    costItemCount = clientData.UseItemCnt # 消耗材料个数
    trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType))
    curEatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainItemCount % (equipPlace, trainType))
    GameWorld.DebugLog("灵器培养: equipPlace=%s,trainType=%s,trainLV=%s,costItemCount=%s,curEatItemCount=%s"
                       % (equipPlace, trainType, trainLV, costItemCount, curEatItemCount))
    if equipPlace not in ChConfig.EquipPlace_LingQi:
        return
    if trainType <= 0 or trainType > GetLingQiTrainTypes(equipPlace):
        return
    if trainLV <= 0:
        GameWorld.DebugLog("    培养未激活  trainType=%s" % trainType)
        return
    trainIpyData = IpyGameDataPY.GetIpyGameData("LingQiTrain", equipPlace, trainType, trainLV)
    if not trainIpyData:
        return
    needRealmLV = trainIpyData.GetNeedRealmLV()
    curRealmLV = PlayerControl.GetTrainRealmLVReal(curPlayer, 3)
    if curRealmLV < needRealmLV:
        GameWorld.DebugLog("    境界不足,无法培养!  curRealmLV(%s) < needRealmLV(%s)" % (curRealmLV, needRealmLV))
        return
    needEatCountTotal = trainIpyData.GetEatCntTotal()
    if not needEatCountTotal:
        GameWorld.DebugLog("    该培养已满级!")
        return
    costItemIDList = IpyGameDataPY.GetFuncEvalCfg("LingQiTrain", 1, {}).get(str(equipPlace), [])
    costItemID = costItemIDList[trainType - 1]
    if not costItemID or not costItemCount:
        return
    costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
    lackCnt = costItemCount - bindCnt - unBindCnt
    if lackCnt > 0:
        GameWorld.DebugLog("    消耗道具不足,无法培养!costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s"
                           % (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt))
        return
    delCnt = costItemCount
    # 扣除消耗
    if delCnt:
        ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, "LingQiTrain")
    updClassLV = trainLV
    updEatItemCount = curEatItemCount + costItemCount
    GameWorld.DebugLog("    updEatItemCount=%s,needEatCountTotal=%s" % (updEatItemCount, needEatCountTotal))
    if updEatItemCount >= needEatCountTotal:
        updClassLV += 1
        updEatItemCount -= needEatCountTotal
        GameWorld.DebugLog("    进阶: updClassLV=%s,updEatItemCount=%s" % (updClassLV, updEatItemCount))
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType), updClassLV)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LingQiTrainItemCount % (equipPlace, trainType), updEatItemCount)
    # 升阶
    if updClassLV > trainLV:
        pass
    Sync_LingQiTrainData(curPlayer, equipPlace)
    # 刷属性
    RefreshPlayerLingQiEquipAttr(curPlayer)
    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
    return
def GetLingQiTrainTypes(equipPlace):
    return len(IpyGameDataPY.GetFuncEvalCfg("LingQiTrain", 1, {}).get(str(equipPlace), []))
def Sync_LingQiTrainData(curPlayer, equipPlace):
    clientPack = ChPyNetSendPack.tagMCLingQiTrainInfo()
    clientPack.EquipPlace = equipPlace
    clientPack.TrainLVList = []
    clientPack.TrainItemCountList = []
    for trainType in xrange(1, GetLingQiTrainTypes(equipPlace) + 1):
        trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType))
        if trainLV == 0:
            trainLV = 1
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType), trainLV)
        clientPack.TrainLVList.append(trainLV)
        clientPack.TrainItemCountList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainItemCount % (equipPlace, trainType)))
    clientPack.TrainTypes = len(clientPack.TrainLVList)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return
def RefreshPlayerLingQiEquipAttr(curPlayer):
    ''' 刷新玩家灵器装备属性
    '''
    return
    classLV = 0 # 灵器阶默认为0
    allAttrList = [{} for _ in range(4)]
    lingQiAttrList = [{} for _ in range(4)]
    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
    equipScoreTotal = 0
    lv = curPlayer.GetLV()
    lqAttrFormatDict = IpyGameDataPY.GetFuncEvalCfg("OutOfPrintValue", 2, {})
    for equipPlace in ChConfig.EquipPlace_LingQi:
        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
        if not ipyData:
            continue
        equipIndex = ipyData.GetGridIndex()
        curEquip = equipPack.GetAt(equipIndex)
        if not curEquip or curEquip.IsEmpty():
            continue
        if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):
            # 过期
            continue
        equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)
        itemID = curEquip.GetItemTypeID()
        #基础属性效果
        for effIndex in xrange(curEquip.GetEffectCount()):
            curEff = curEquip.GetEffectByIndex(effIndex)
            effID = curEff.GetEffectID()
            if effID == 0:
                break
            PlayerControl.CalcAttrDict_Type(effID, curEff.GetEffectValue(0), lingQiAttrList)
        #灵器属性
        lingQiIpyData = IpyGameDataPY.GetIpyGameDataNotLog("LingQiAttr", itemID)
        if lingQiIpyData:
            lingQiAttrIDList = lingQiIpyData.GetLingQiAttrID()
            lingQiAttrValueList = lingQiIpyData.GetLingQiAttrValue()
            for lqIndex, lqAttrID in enumerate(lingQiAttrIDList):
                if str(lqAttrID) in lqAttrFormatDict:
                    attrFormat = lqAttrFormatDict[str(lqAttrID)]
                    maxOOPValue = lingQiAttrValueList[lqIndex]
                    lqAttrValue = eval(FormulaControl.GetCompileFormula("LingQiAttrFormat_%s" % lqAttrID, attrFormat))
                else:
                    lqAttrValue = lingQiAttrValueList[lqIndex]
                PlayerControl.CalcAttrDict_Type(lqAttrID, lqAttrValue, lingQiAttrList)
    # 新培养属性
    guardTrainAttrList = [{} for _ in range(4)]
    wingTrainAttrList = [{} for _ in range(4)]
    peerlessWeaponTrainAttrList = [{} for _ in range(4)]
    peerlessWeapon2TrainAttrList = [{} for _ in range(4)]
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in xrange(ipyDataMgr.GetLingQiTrainCount()):
        trainIpyData = ipyDataMgr.GetLingQiTrainByIndex(index)
        equipPlace = trainIpyData.GetEquipPlace()
        trainType = trainIpyData.GetTrainType()
        dataTrainLV = trainIpyData.GetTrainLV()
        if equipPlace == ShareDefine.retGuard1:
            lingQiTrainAttrList = guardTrainAttrList
        elif equipPlace == ShareDefine.retWing:
            lingQiTrainAttrList = wingTrainAttrList
        elif equipPlace == ShareDefine.retPeerlessWeapon:
            lingQiTrainAttrList = peerlessWeaponTrainAttrList
        elif equipPlace == ShareDefine.retPeerlessWeapon2:
            lingQiTrainAttrList = peerlessWeapon2TrainAttrList
        else:
            continue
        trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType))
        if dataTrainLV > trainLV:
            continue
        elif dataTrainLV == trainLV:
            trainItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainItemCount % (equipPlace, trainType))
        else:
            trainItemCount = trainIpyData.GetEatCntTotal()
        # 等阶额外属性
        lvAttrTypeList = trainIpyData.GetLVAttrTypeList()
        lvAttrValueList = trainIpyData.GetLVAttrValueList()
        for i, attrID in enumerate(lvAttrTypeList):
            attrValue = lvAttrValueList[i]
            PlayerControl.CalcAttrDict_Type(attrID, attrValue, lingQiTrainAttrList)
        # 培养丹增加属性
        eatCntEverytime = trainIpyData.GetEatCntEverytime()
        if trainItemCount and eatCntEverytime:
            eatItemAttrTypeList = trainIpyData.GetEatItemAttrTypeList()
            eatItemAttrValueList = trainIpyData.GetEatItemAttrValueList()
            attrMultiple = trainItemCount / eatCntEverytime
            for i, attrID in enumerate(eatItemAttrTypeList):
                attrValue = eatItemAttrValueList[i]
                PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, lingQiTrainAttrList)
    #GameWorld.DebugLog("守护培养属性: %s" % guardTrainAttrList)
    #GameWorld.DebugLog("翅膀培养属性: %s" % wingTrainAttrList)
    #GameWorld.DebugLog("灭世培养属性: %s" % peerlessWeaponTrainAttrList)
    #GameWorld.DebugLog("噬魂培养属性: %s" % peerlessWeapon2TrainAttrList)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_GuardTarin, guardTrainAttrList)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_WingTarin, wingTrainAttrList)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PeerlessWeaponTrain, peerlessWeaponTrainAttrList)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PeerlessWeapon2Train, peerlessWeapon2TrainAttrList)
    lqFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
    PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_LingQi, lqFightPowerEx)
    #GameWorld.DebugLog("灵器属性1: %s" % allAttrList)
    #GameWorld.DebugLog("灵器属性2: %s" % lingQiAttrList)
    #GameWorld.DebugLog("灵器评分战力: equipScoreTotal=%s, %s" % (equipScoreTotal, lqFightPowerEx))
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQi, allAttrList)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQiAttr, lingQiAttrList)
    return
def CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict={}):
@@ -395,81 +107,7 @@
#    BYTE    Star;    // 星数
#};
def OnEquipPartSuiteActivate(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    classLV = clientData.ClassLV
    suiteID = clientData.SuiteID
    suiteCount = clientData.SuiteCount
    star = clientData.Star
    ipyDataList = IpyGameDataPY.GetIpyGameDataList('EquipSuitAttr', suiteID)
    if not ipyDataList:
        return
    actIpyData = None
    for ipyData in ipyDataList:
        needCount = ipyData.GetSuiteCnt()
        needStar = ipyData.GetStar()
        if suiteCount == needCount and star == needStar:
            actIpyData = ipyData
            break
    if not actIpyData:
        return
    activateIndex = actIpyData.GetActivateIndex()
    # 这里就不判断是否满足件数、星数条件了,算属性的时候本身也是条件之一,是否激活只是附加条件,这里只处理激活状态变更,能否激活前端判断即可
    isActivate = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteActivate, activateIndex)
    if isActivate:
        return
    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteActivate, activateIndex, 1)
    Sync_EquipPartSuiteActivateInfo(curPlayer)
    #广播
    notifyMark = actIpyData.GetIsNotify()
    if notifyMark:
        PlayerControl.WorldNotify(0, 'AllStarLevelUp' if needStar else 'AllStarLevelUp2', [curPlayer.GetPlayerName(), suiteID, suiteCount, star])
    RefreshPlayerEquipAttribute(curPlayer, classLV)
    #刷新所有属性
    playControl = PlayerControl.PlayerControl(curPlayer)
    playControl.RefreshPlayerAttrState()
    return
def Sync_EquipPartSuiteActivateInfo(curPlayer):
    ## 同步装备位星级套装激活状态信息
    #keyCount = 10
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    dataCount = ipyDataMgr.GetEquipSuitAttrCount()
    if not dataCount:
        return
    lastIpyData = ipyDataMgr.GetEquipSuitAttrByIndex(dataCount - 1)
    if not lastIpyData:
        return
    keyCount = 1 + lastIpyData.GetActivateIndex() / 31
    activateStateList = []
    for i in xrange(keyCount):
        activateStateList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartSuiteActivate % i))
    if activateStateList.count(0) == keyCount:
        return
    activateInfo = ChPyNetSendPack.tagMCEquipPartSuiteActivateInfo()
    activateInfo.SuiteActivateStateInfo = activateStateList
    activateInfo.Count = len(activateInfo.SuiteActivateStateInfo)
    NetPackCommon.SendFakePack(curPlayer, activateInfo)
    return
def ChangeEquipEffectByPlusMaster(curPlayer, classLV):
    # 强化大师特效
    if (classLV != GetEquipFacadeClassLV(curPlayer)):
        return
    masterPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartMasterPlusLV % classLV)
    ## 强化大师影响角色外观显示 强化大师等级 * 1000+第几套*10+是否有套装
    oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
    updEquipShowSwitch = oldEquipShowSwitch % 1000 + oldEquipShowSwitch / 1000000 * 1000000+ 1000 * masterPlusLV
    GameWorld.DebugLog('强化大师影变化影响角色外观显示,oldEquipShowSwitch=%s,updEquipShowSwitch=%s'%
                       (oldEquipShowSwitch, updEquipShowSwitch))
    if oldEquipShowSwitch != updEquipShowSwitch:
        curPlayer.SetEquipShowSwitch(updEquipShowSwitch)
    return
def ChangeEquipfacadeByHorsePetSkin(curPlayer, skinType, skinIndex):
    ##骑宠觉醒外观变更  灵宠外观索引*10000000+坐骑外观索引*1000000+灵根特效表key * 1000+第几套*10+是否有套装
@@ -521,198 +159,7 @@
    
    return 0
#获取当前是第几套装备外观
def GetEquipFacadeClassLV(curPlayer):return curPlayer.GetEquipShowSwitch()%1000/10
## 获取公共部位强化熟练度
def GetEquipPartProficiency(curPlayer, packType, index):
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartProficiency % (packType, index))
## 设置公共部位强化熟练度
def SetEquipPartProficiency(curPlayer, packType, index, value):
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartProficiency % (packType, index), value)
    return
## 获取公共部位强化等级
def GetEquipPartPlusLV(curPlayer, packType, index):
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index))
## 设置公共部位强化等级
def SetEquipPartPlusLV(curPlayer, packType, index, curEquip, setPlusLV):
    befPlusLV = GetEquipPartPlusLV(curPlayer, packType, index)
    if befPlusLV == setPlusLV:
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartPlusLV % (packType, index), setPlusLV)
    #===========================================================================
    # if curEquip and not curEquip.IsEmpty():
    #    curEquip.SetItemStarLV(starLV)
    #===========================================================================
    # 同步更新强化总等级
    befTotalPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusLV)
    updTotalPlusLV = max(0, befTotalPlusLV + setPlusLV - befPlusLV)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusLV, updTotalPlusLV)
    GameWorld.DebugLog("设置强化等级: index=%s,befPlusLV=%s,setPlusLV=%s,befTotalPlusLV=%s,updTotalPlusLV=%s"
                       % (index, befPlusLV, setPlusLV, befTotalPlusLV, updTotalPlusLV))
    return
## 获取公共部位强化进化等级
def GetEquipPartPlusEvolveLV(curPlayer, packType, index):
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index))
## 设置公共部位强化进化等级
def SetEquipPartPlusEvolveLV(curPlayer, packType, index, setEvolveLV):
    befEvolveLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index))
    if befEvolveLV == setEvolveLV:
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index), setEvolveLV)
    # 同步更新进化总等级
    befTotalPlusEvolveLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusEvolveLV)
    updTotalPlusEvolveLV = max(0, befTotalPlusEvolveLV + setEvolveLV - befEvolveLV)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusEvolveLV, updTotalPlusEvolveLV)
    GameWorld.DebugLog("设置进化等级: index=%s,befEvolveLV=%s,setEvolveLV=%s,befTotalPlusEvolveLV=%s,updTotalPlusEvolveLV=%s"
                       % (index, befEvolveLV, setEvolveLV, befTotalPlusEvolveLV, updTotalPlusEvolveLV))
    return
## 通知公共部位强化等级
def NotifyEquipPartPlusLV(curPlayer, packType=IPY_GameWorld.rptEquip, index=None):
    ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartPlusInfo()
    ePartStarLVPack.Clear()
    ePartStarLVPack.InfoList = []
    syncIndexList = []
    if index == None:
        equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv')
        for equipPlace in ChConfig.Pack_EquipPart_CanPlusStar.get(packType, []):
            for classlv in xrange(1, equipMaxClasslv+1):
                ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace)
                if not ipyData:
                    continue
                syncIndexList.append(ipyData.GetGridIndex())
    else:
        syncIndexList = [index]
    for i in syncIndexList:
        ePartStarLV = ChPyNetSendPack.tagMCEquipPartPlusLV()
        ePartStarLV.Clear()
        ePartStarLV.PackType = packType
        ePartStarLV.EquipIndex = i
        ePartStarLV.EquipPartStarLV = GetEquipPartPlusLV(curPlayer, packType, i)
        ePartStarLV.Proficiency = GetEquipPartProficiency(curPlayer, packType, i)
        ePartStarLV.EvolveLV = GetEquipPartPlusEvolveLV(curPlayer, packType, i)
        ePartStarLVPack.InfoList.append(ePartStarLV)
    ePartStarLVPack.Count = len(ePartStarLVPack.InfoList)
    NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack)
    return
## 全身强化等级
def GetTotalPlusLV(curPlayer, isActive=True):
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusLV)
## 全身进化等级
def GetTotalPlusEvolveLV(curPlayer):
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusEvolveLV)
## 全身橙装及以上装备数
def GetEquipOrangeCount(curPlayer):
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PlayerKey_EquipOrangeCount)
# 获取装备的强化类型
def GetEquipPlusType(curEquip):
    equipPlace = curEquip.GetEquipPlace()
    plusTypeDict = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelLimit", 1)
    if not plusTypeDict:
        GameWorld.ErrLog("没有强化类型映射表")
        return
    return plusTypeDict.get(equipPlace)
#  获取满套装化的最低阶数,如5件套,4件5级,1件3级,则返回3
def GetEquipSuitsLVByType(curPlayer, suitType, groupType):
    return 0
#    suiteLV = 999
#    equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType')
#    if groupType not in equipSuitTypeDict:
#        return 0
#    maxCnt = len(equipSuitTypeDict[groupType])
#    cnt = 0
#    for equipPlace in equipSuitTypeDict[groupType]:
#        curSuiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suitType)
#        if curSuiteLV > 0:
#            cnt += 1
#        suiteLV = min(curSuiteLV, suiteLV)
#
#    if cnt != maxCnt:
#        return 0
#    return 0 if suiteLV == 999 else suiteLV
def SetEquipPartStar(curPlayer, index, setStarLV):
    #设置公共部位星数
    befStarLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStar % index)
    if befStarLV == setStarLV:
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartStar % index, setStarLV)
    # 同步更新星级总等级
    befTotalStarLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalEquipStar)
    updTotalStarLV = max(0, befTotalStarLV + setStarLV - befStarLV)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipStar, updTotalStarLV)
    # 开服活动数据
    OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_StarLV, updTotalStarLV)
    GameWorld.DebugLog("设置部位星级: index=%s,befStarLV=%s,setStarLV=%s,befTotalStarLV=%s,updTotalStarLV=%s"
                       % (index, befStarLV, setStarLV, befTotalStarLV, updTotalStarLV))
    return
def GetEquipPartStar(curPlayer, equipPackindex):
    #获取公共部位星数
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStar % equipPackindex)
## 获取公共部位生效的星数, 因装备的最高可到星数影响,用于算当前装备属性使用, 不影响全身星级
def GetEquipPartStarByRank(curPlayer, equipPackindex, curEquip):
    maxStarLV = ItemCommon.GetItemMaxStar(curEquip)
    return min(GetEquipPartStar(curPlayer, equipPackindex), maxStarLV)
def GetTotalEquipStars(curPlayer):
    ##获取部位总星数
    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalEquipStar)
## 通知公共部位星数
def NotifyEquipPartStar(curPlayer, index=None):
    ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarInfo()
    ePartStarLVPack.Clear()
    ePartStarLVPack.InfoList = []
    syncIndexList = []
    if index == None:
        equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv')
        for equipPlace in ChConfig.Pack_EquipPart_CanPlusStar.get(IPY_GameWorld.rptEquip, []):
            for classlv in xrange(1, equipMaxClasslv+1):
                ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace)
                if not ipyData:
                    continue
                syncIndexList.append(ipyData.GetGridIndex())
    else:
        syncIndexList = [index]
    for index in syncIndexList:
        ePartStarLV = ChPyNetSendPack.tagMCEquipPartStar()
        ePartStarLV.Clear()
        ePartStarLV.EquipPackIndex = index
        ePartStarLV.Star = GetEquipPartStar(curPlayer, index)
        ePartStarLVPack.InfoList.append(ePartStarLV)
    ePartStarLVPack.Count = len(ePartStarLVPack.InfoList)
    NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -30,7 +30,6 @@
import PlayerFamily
import ChPyNetSendPack
import NetPackCommon
import Operate_EquipStone
import PlayerXiangong
import IpyGameDataPY
import DataRecordPack
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -29,9 +29,6 @@
import EventReport
import ChItem
import IpyGameDataPY
import Operate_EquipStone
import Operate_EquipWash
import FormulaControl
import ChPyNetSendPack
import NetPackCommon
import PyGameData
@@ -839,65 +836,6 @@
        return 0
    keyStr = ChConfig.Def_VPackCnt_Dict[packindex]
    return IpyGameDataPY.GetFuncCfg(keyStr)
## 杀怪掉落提示
#  @param curPlayer 当前玩家
#  @return None
def NotifyItemDropByKill(curPlayer, curItem, npcID, notifyMark='', mapID=0):
    return #吕超说此处屏蔽
def CacheNotifyEquipDetailInfo(curPlayer, curEquip):
    ''' 缓存装备广播信息中的装备明细信息
            因为本版本需要的查看的内容相对较多,为了减少全服广播流量消耗,所以先进行缓存,玩家点击查看时再进行查询
    '''
    guid = curEquip.GetGUID()
    packType = curEquip.GetItemPlaceType()
    packIndex = curEquip.GetItemPlaceIndex()
    if packType != IPY_GameWorld.rptEquip:
        return guid
    classLV = GetItemClassLV(curEquip)
    if not classLV:
        return guid
    itemID = curEquip.GetItemTypeID()
    #部位星级
    equipStar = ChEquip.GetEquipPartStarByRank(curPlayer, packIndex, curEquip)
    #部位强化数据
    plusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, packIndex)
    plusEvolveLV = ChEquip.GetEquipPartPlusEvolveLV(curPlayer, packType, packIndex)
    #部位洗练数据
    washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % packIndex)
    washValueList = []
    for attrNum in xrange(1, Operate_EquipWash.Def_EquipWashMaxAttrCount + 1):
        value = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (packIndex, attrNum))
        washValueList.append(value)
    #部位宝石数据
    stoneIDList = Operate_EquipStone.GetEquipIndexStoneIDList(curPlayer, packIndex)
    #本阶已穿装备ID [[itemID,star], ...]
    classItems = []
    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'ClassLV':classLV}, True)
    if ipyDataList:
        equipPack = curPlayer.GetItemManager().GetPack(packType)
        for ipyData in ipyDataList:
            index = ipyData.GetGridIndex()
            classEquip = equipPack.GetAt(index)
            if not classEquip or classEquip.IsEmpty():
                continue
            equipID = classEquip.GetItemTypeID()
            star = ChEquip.GetEquipPartStarByRank(curPlayer, index, classEquip)
            classItems.append([equipID, star])
    cacheInfo = [guid, itemID, equipStar, plusLV, plusEvolveLV, washLV, washValueList, stoneIDList, classItems]
    cacheInfo = json.dumps(cacheInfo, ensure_ascii=False)
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "NotifyEquipDetailInfo", cacheInfo, len(cacheInfo))
    return guid
## 使用物品的特殊提示
#  @param curPlayer 当前玩家
@@ -1993,40 +1931,10 @@
            DR_DelItem(curPlayer, packIndex, "VPack_%s" % packIndex if not eventName else eventName, dataDict)
    ItemControler.Sync_VPackItem_Clear(curPlayer, packIndex, placeList)
    return
## 获取物品最高强化进化等级
#  @param itemType: 物品类型
#  @return 最大星级,0为不可强化
def GetItemMaxPlusEvolveLV(curPlayer, equipPackindex, curItem):
    packType = IPY_GameWorld.rptEquip
    curPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, equipPackindex)
    equipPlace = curItem.GetEquipPlace()
    ipyData = IpyGameDataPY.InterpolationSearch('EquipPlusEvolve', 'NeedPlusLV', curPlusLV, {'EquipPlace':equipPlace})
    if not ipyData:
        return 0
    return ipyData.GetEvolveLV()
    
## 获取物品最高星数
#  @param itemType: 物品类型
#  @return 最大星级,0为不可强化
def GetItemMaxStar(curItem):
    itemColor = curItem.GetItemColor()
    maxStarDict = IpyGameDataPY.GetFuncEvalCfg('EquipPartStar', 1)
    if str(itemColor) not in maxStarDict:
        return 0
    classLV = GetItemClassLV(curItem)
    return maxStarDict[str(itemColor)].get(str(classLV), 0)
## 获取物品阶级或品级
def GetItemClassLV(curItem):
    return curItem.GetLV()
def GetWingLV(curItem):
    ## 获取翅膀代数等级
    wingLVDict = IpyGameDataPY.GetFuncEvalCfg("WingLV", 1)
    return wingLVDict.get(str(curItem.GetLV()), 0)
## 装备评分
def GetEquipGearScore(curItem):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -55,7 +55,6 @@
import PlayerDienstgrad
import PlayerFreeGoods
import PlayerRecover
import PlayerEquipDecompose
import PlayerCrossRealmPK
import PlayerCrossChampionship
import GameFuncComm
@@ -652,8 +651,6 @@
    # 通知设置的被动功法
    #PassiveBuffEffMng.OnLoginGFPassive(curPlayer)
    PlayerOnlinePrize.OnPlayerLogin(curPlayer)
    #装备分解
    #PlayerEquipDecompose.PlayerLogin(curPlayer)
    # 极品白拿
    PlayerFreeGoods.OnLogin(curPlayer)
    # BOSS复活活动
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -24,21 +24,10 @@
import ChPyNetSendPack
import GameWorld
import NetPackCommon
#import PlayerGodWeapon
#import PlayerHorse
#import PlayerPet
import ShareDefine
import IpyGameDataPY
import PlayerControl
import PlayerPrestigeSys
import PlayerBillboard
import PlayerTreasure
import PlayerSignDay
#import PlayerGoldGift
#import PlayerEquipDecompose
#import PlayerCrossChampionship
#import PlayerFreeGoods
#import FunctionNPCCommon
import PlayerActBuyCountGift
import PlayerActLoginNew
import PlayerActTask
@@ -46,42 +35,18 @@
import ItemCommon
import ItemControler
import PlayerArena
#import PlayerLianTi
#import PlayerFaQi
import PlayerTask
# 功能开启需执行的函数{功能ID:执行函数, ...} 函数需返回是否激活成功, 功能开启有需要处理功能逻辑的这里增加函数调用配置即可
FuncOpenLogicDict = {
                     ShareDefine.GameFuncID_Official:lambda curObj:PlayerPrestigeSys.DoOfficialOpen(curObj),
                     ShareDefine.GameFuncID_Billboard:lambda curObj:PlayerBillboard.DoBillboardOpen(curObj),
                     ShareDefine.GameFuncID_SignDay:lambda curObj:PlayerSignDay.DoSignDayOpen(curObj),
                     ShareDefine.GameFuncID_Treasure:lambda curObj:PlayerTreasure.DoTreasureOpen(curObj),
                     ShareDefine.GameFuncID_Arena:lambda curObj:PlayerArena.DoArenaOpen(curObj),
                     #ShareDefine.GameFuncID_Horse:lambda curObj:PlayerHorse.DoHorseOpen(curObj),
                     #ShareDefine.GameFuncID_GodWeapon:lambda curObj:PlayerGodWeapon.DoGodWeaponOpen(curObj),
                     #ShareDefine.GameFuncID_Pet:lambda curObj:PlayerPet.DoPetOpen(curObj),
                     #ShareDefine.GameFuncID_FirstGoldTip:lambda curObj:PlayerGoldGift.DoFirstGoldOpen(curObj),
                     #ShareDefine.GameFuncID_EquipDecompose:lambda curObj:PlayerEquipDecompose.DoEquipDecomposeOpen(curObj),
                     #ShareDefine.GameFuncID_FreeGoods:lambda curObj:PlayerFreeGoods.DoFreeGoodsOpen(curObj),
                     #ShareDefine.GameFuncID_OSSail:lambda curObj:FunctionNPCCommon.OSSaleOpenMail(curObj),
                     #ShareDefine.GameFuncID_AddPoint:lambda curObj:PlayerControl.DoAddPointOpen(curObj),
                     #ShareDefine.GameFuncID_FaQi:lambda curObj:PlayerFaQi.DoFaQiOpen(curObj),
                     #ShareDefine.GameFuncID_LianTi:lambda curObj:PlayerLianTi.DoLianTiOpen(curObj),
                     #ShareDefine.GameFuncID_Championship:lambda curObj:PlayerCrossChampionship.DoChampionshipOpen(curObj),
                     }
## 注意:功能开启需执行的函数 及 功能开启后升级逻辑 只会执行其中一个
## 注意:功能开启需执行的函数 及 功能开启后升级逻辑 只会执行其中一个
## 注意:功能开启需执行的函数 及 功能开启后升级逻辑 只会执行其中一个
# 功能开启后升级逻辑 需要处理的函数 {功能ID:执行函数, ...}
#FuncLVUpLogicDict = {
#                     ShareDefine.GameFuncID_Pet:lambda curObj:PlayerPet.DoLVUPLogic_Pet(curObj),
#                     }
def GetFuncOpenLVIpyData(funcID): return IpyGameDataPY.GetIpyGameData("FuncOpenLV", funcID)
def DoFuncOpenLogic(curPlayer, finishMissionIDList=[]):
def DoFuncOpenLogic(curPlayer):
    '''执行触发功能开启逻辑
    @param finishMissionIDList: 完成的任务ID列表
    '''
@@ -95,11 +60,11 @@
        ipyData = ipyGameData.GetFuncOpenLVByIndex(i)
        funcID = ipyData.GetFuncId()
        limitMissionID = ipyData.GetLimitMissionID()
        if limitMissionID and limitMissionID in finishMissionIDList:
            if not curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_MissionFinish % limitMissionID):
                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_MissionFinish % limitMissionID, 1)
                GameWorld.DebugLog("    设置功能开启所需任务完成: funcID=%s,limitMissionID=%s" % (funcID, limitMissionID), curPlayer.GetPlayerID())
        if limitMissionID and not curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_MissionFinish % limitMissionID) \
            and PlayerTask.IsTaskFinish(curPlayer, limitMissionID):
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_MissionFinish % limitMissionID, 1)
            GameWorld.DebugLog("    设置功能开启所需任务完成: funcID=%s,limitMissionID=%s" % (funcID, limitMissionID), curPlayer.GetPlayerID())
        isOpen = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch, funcID, True)
        if isOpen:
            #GameWorld.DebugLog("    功能已经开启过, 不需要重复触发开启! funcID=%s" % (funcID), curPlayer.GetPlayerID())
@@ -142,6 +107,7 @@
## 功能是否可用
def GetFuncCanUse(curPlayer, funcID):
    if funcID < 0: return False
    return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch, funcID, True)
## 获取功能限制等级(等级条件为全局)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
@@ -480,9 +480,6 @@
    ipyData = IpyGameDataPY.GetIpyGameData('DailyAction', dailyID)
    if not ipyData:
        return
#    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_DailyQuest):
#        #GameWorld.DebugLog("日常任务功能未开启!dailyID=%s" % dailyID)
#        return
    
    # 由GameServer决定
    # 目前跨服PK暂不需要判断,因为跨服PK次数结算在本服,玩家可能上次未结算离线,等非匹配期间上线,也需要加上,所以暂不判断
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
@@ -43,12 +43,6 @@
            
    return
def DoBillboardOpen(curPlayer):
    ## 排行榜开启时需要处理的
    #UpdatePlayerBillboardOnLeaveServer(curPlayer, True) # 主动同步一次榜单
    #OpenServerCampaign.DoBillboardOpen(curPlayer) # 同步开服活动榜单
    return
def BillboardOnLogin(curPlayer):
    # 上线默认同步排行榜
    UpdatePlayerBillboardOnLeaveServer(curPlayer) #排行榜已实时更新,故上线不再同步
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -3325,41 +3325,6 @@
    return IpyGameDataPY.GetFuncCfg("PKConfig", 2)
#---------------------------------------------------------------------
##获得玩家升级, 获得的属性点
# @param curPlayer 玩家实例
# @return 返回值, 获得的属性点
# @remarks 获得玩家升级, 获得的属性点
def GetLvUp_AddPoint(curPlayer):
    curPlayerID = curPlayer.GetID()
    curLV = curPlayer.GetLV() # 当前等级
    addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {})
    addPoint = GameWorld.GetDictValueByRangeKey(addPointDict, curLV, 0)
    if addPoint == None:
        raise Exception('玩家获得升级属性点异常, curLV = %s PlayerID = %s' % (curLV, curPlayerID))
        return
    return int(addPoint+ GetFabaoAddPoint(curPlayer) + GetTitleAddExtraPoint(curPlayer))
def GetAllPointByLV(curPlayer):
    ##获取当前等级可得到属性点数
    openLV = GameFuncComm.GetFuncLimitLV(ShareDefine.GameFuncID_AddPoint)
    curLV = curPlayer.GetLV()
    if curLV < openLV:
        return 0
    # 初始点+(升级点+法宝效果)*称号效果倍数+境界点
    setFreePoint = IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 2)
    fabaoAddPoint = GetFabaoAddPoint(curPlayer)
    titleAddPoint = GetTitleAddExtraPoint(curPlayer)
    addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {})
    for rangLVs, point in addPointDict.items():
        if curLV < rangLVs[0]:
            continue
        setFreePoint += (point + fabaoAddPoint + titleAddPoint) * (min(curLV, rangLVs[1]) - rangLVs[0] + 1)
    #境界提升点数
    setFreePoint += curPlayer.GetOfficialRank() * IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 3)
    return setFreePoint
def GetTitleAddExtraPoint(curPlayer):
    # 称号额外增加玩家每级获得的灵根点
@@ -3367,23 +3332,6 @@
    if titleID and curPlayer.GetDienstgradManager().GetDienstgrad(titleID):
        return IpyGameDataPY.GetFuncCfg("TitleAddPoint", 2)
    return 0
def GetFabaoAddPoint(curPlayer):
    #法宝额外增加玩家每级获得的灵根点
    return 0
def DoAddPointOpen(curPlayer):
    '''加点功能开启'''
    beforeFreePoint = curPlayer.GetFreePoint()
    setFreePoint = GetAllPointByLV(curPlayer)
    curLV = curPlayer.GetLV()
    addDataDict = {'beforeFreePoint':beforeFreePoint}
    curPlayer.SetFreePoint(setFreePoint)
    DataRecordPack.DR_Freepoint(curPlayer, "AddPointOpen", setFreePoint, addDataDict)
    GameWorld.DebugLog('    加点功能开启处理  beforeFreePoint=%s,curLV=%s, setFreePoint=%s'%(beforeFreePoint, curLV, setFreePoint), curPlayer.GetID())
    return
    
#---------------------------------------------------------------------
###############################################################
@@ -4757,6 +4705,13 @@
        return 0
    return lvIpyData.GetExp()
def GetOpenMaxLV():
    ## 获取游戏开放的最大等级
    maxLV = IpyGameDataPY.GetFuncCfg("PlayerMaxLV", 1)
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    realmIpyData = ipyDataMgr.GetRealmByIndex(ipyDataMgr.GetRealmCount() - 1)
    return min(maxLV, realmIpyData.GetLVMax())
def GetPlayerMaxLV(curPlayer):
    ## 获取玩家实际可升的最大等级
    maxLV = IpyGameDataPY.GetFuncCfg("PlayerMaxLV", 1)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEquipDecompose.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastWeekParty.py
@@ -25,7 +25,6 @@
import PlayerControl
import ItemControler
import ChPyNetSendPack
import Operate_EquipStone
import DataRecordPack
import PlayerGodWeapon
import NetPackCommon
@@ -227,7 +226,6 @@
        AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Rune, itemColor, False, isSync=isSync)
        
    AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, isSync)
    AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, Operate_EquipStone.GetTotalStoneLV(curPlayer), False, True, isSync)
    AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GodWeapon, PlayerGodWeapon.GetGodWeaponTotalLV(curPlayer), False, True, isSync)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
@@ -44,14 +44,6 @@
# 需要记录任务值的任务类型列表
NeedTaskValueTypeList = [RealmTaskType_UseXiantao]
def DoOfficialOpen(curPlayer):
    #功能开启
#    curRealmLV = curPlayer.GetOfficialRank()
#    if not curRealmLV:
#        DoRealmLVUpLogic(curPlayer)
    return True
def OnLogin(curPlayer):
    SyncRealmInfo(curPlayer, isAll=True)
    if ChConfig.Def_InitOfficialRank > 0 and not curPlayer.GetOfficialRank():
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
@@ -35,12 +35,7 @@
import datetime
import time
import math
import ChEquip
import PlayerRune
import Operate_EquipStone
import Operate_EquipWash
import PlayerFeastRedPacket
import PlayerDogz
import DataRecordPack
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py
@@ -311,7 +311,7 @@
    if not __giveNewTask(curPlayer, taskGroup):
        SyncTaskInfo(curPlayer, [taskGroup])
        
    GameFuncComm.DoFuncOpenLogic(curPlayer, [taskID])
    GameFuncComm.DoFuncOpenLogic(curPlayer)
    return
def SyncTaskInfo(curPlayer, taskGroupList=None):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
@@ -47,11 +47,6 @@
TreasureType_HeroHigh = 12 # 英雄招募 - 高级
TreasureType_HeroScore = 13 # 英雄招募 - 积分
def DoTreasureOpen(curPlayer):
    ## 寻宝开启
    Sync_TreasureInfo(curPlayer)
    return
def OnTreasureLogin(curPlayer):
    Sync_TreasureInfo(curPlayer)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py
@@ -25,7 +25,6 @@
import PlayerControl
import ItemControler
import ChPyNetSendPack
import Operate_EquipStone
import PlayerFeastWeekParty
import DataRecordPack
import PlayerGodWeapon
@@ -238,7 +237,6 @@
        AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Rune, itemColor, False, isSync=isSync)
        
    AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, isSync)
    AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, Operate_EquipStone.GetTotalStoneLV(curPlayer), False, True, isSync)
    AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GodWeapon, PlayerGodWeapon.GetGodWeaponTotalLV(curPlayer), False, True, isSync)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -844,45 +844,17 @@
# 游戏功能ID定义,需确保唯一,与PyGameFuncControl.txt中FuncId一致
GameFuncID_Official = 12        # 官爵,境界
GameFuncID_Family = 15          # 战盟,仙盟
GameFuncID_Billboard = 72       # 排行榜
GameFuncID_SignDay = 81         # 签到
GameFuncID_Treasure = 99        # 寻宝
GameFuncID_Arena = 195          # 竞技场
GameFuncID_Wing = 3             # 翅膀
GameFuncID_Pet = 6              # 宠物,灵宠
GameFuncID_MagicWeapon = 7      # 法宝
GameFuncID_Horse = 8            # 坐骑
GameFuncID_GodWeapon = 20       # 神器
GameFuncID_Talent = 149         # 天赋
GameFuncID_RefineExp = 60       # 经验炼制,祈愿
GameFuncID_RefineMoney = 61     # 金币炼制,祈愿
GameFuncID_WorldLV = 71         # 世界等级
GameFuncID_Friend = 73          # 好友
GameFuncID_RefineStove = 87     # 炼丹炉
GameFuncID_EquipWash = 91       # 洗练
GameFuncID_FirstGoldTip = 128      # 首充优势提示
GameFuncID_EquipDecompose = 123 # 装备分解
GameFuncID_DailyQuest = 78      # 日常
GameFuncID_FreeGoods = 130      # 极品白拿
GameFuncID_OSSail = 132         # 开服特惠
GameFuncID_HorsePetRobBoss = 139# 骑宠争夺
GameFuncID_AddPoint = 145       # 加点功能/灵根功能
GameFuncID_LittleHelper = 146   # 小助手
GameFuncID_TJG = 147            # 脱机挂
GameFuncID_SuperGift = 150      # 超值礼包
GameFuncID_CrossRealmPK = 157   # 跨服天梯
GameFuncID_PenglaiBoss = 162    # 蓬莱仙境
GameFuncID_ZhuXianBoss = 163    # 诛仙BOSS
GameFuncID_FaQi = 199           # 法器
GameFuncID_LianTi = 207         # 炼体
GameFuncID_CrossBattlefield = 208   # 跨服古神战场
GameFuncID_Championship = 210   # 排位
GameFuncID_Guaji = 228          # 挂机
# 以下为暂时无用的
GameFuncID_RunDaily = 34        # 日常跑环
GameFuncID_RunFamily = 53       # 战盟跑环
GameFuncID_ArrestTask = 7100    # 悬赏任务
GameFuncID_Wing = -1            # 翅膀 3
GameFuncID_Pet = -1             # 宠物,灵宠 6
GameFuncID_Horse = -1           # 坐骑 8
GameFuncID_GodWeapon = -1       # 神器 20
GameFuncID_OSSail = -1          # 开服特惠 132
GameFuncID_AddPoint = -1        # 加点功能/灵根功能 145
GameFuncID_LittleHelper = -1    # 小助手 146
#家族悬赏任务完成状态记录位标识
Def_ArrestOverState_BitDic = {