|  |  | 
 |  |  | 
 | 
 |  |  | ## 获取符印是否已解锁
 | 
 |  |  | def GetIsOpenByRuneID(curPlayer, itemid):
 | 
 |  |  |     itemData = GameWorld.GetGameData().GetItemByTypeID(itemid)
 | 
 |  |  |     if not itemData:
 | 
 |  |  |         return
 | 
 |  |  |     curPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
 | 
 |  |  |     curEff = itemData.GetEffectByIndex(0)
 | 
 |  |  |     curRuneType = curEff.GetEffectID()
 | 
 |  |  |     floorCnt = IpyGameDataPY.GetFuncCfg('TowerRuneType', 2)
 | 
 |  |  |     towerRuneTypeDict = IpyGameDataPY.GetFuncEvalCfg('TowerRuneType')
 | 
 |  |  |     floorList = [int(i) for i in towerRuneTypeDict]
 | 
 |  |  |     floorList.sort()
 | 
 |  |  |     for floor in floorList:
 | 
 |  |  |         typeList = towerRuneTypeDict[str(floor)]
 | 
 |  |  |         if curRuneType in typeList:
 | 
 |  |  |             floorkey = (int(floor) - 1)*100+ floorCnt if int(floor) > 1 else 0
 | 
 |  |  |             return curPassLV >= floorkey
 | 
 |  |  |     ipyData = GetRuneIpyData(itemid)
 | 
 |  |  |     if ipyData:
 | 
 |  |  |         curPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
 | 
 |  |  |         return curPassLV >= ipyData.GetTowerID()
 | 
 |  |  |     # 没配置限制层数解锁的默认解锁
 | 
 |  |  |     return True
 | 
 |  |  | 
 |