#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#  
 | 
# @todo:   
 | 
#  
 | 
# @author: Alee  
 | 
# @date 2017-12-29 ÏÂÎç02:02:23  
 | 
# @version 1.0  
 | 
#  
 | 
# @note: ¹¹½¨¹¤¾ßÐèͬ²½´Ë±í  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
import CommFunc  
 | 
import logging  
 | 
# 1. ¹¹½¨±í  
 | 
  
 | 
          
 | 
class MapEventPoint():  
 | 
    def __init__(self):  
 | 
        #int    int    int    int    int    int    int    int    string    string    string  
 | 
        self.Key = 0      
 | 
        self.MapID = 0  
 | 
        self.NPCID = 0      
 | 
        self.IsShowInfo = 0  
 | 
        self.Colour = 0  
 | 
        self.LowLV = 0      
 | 
        self.HighestLV = 0      
 | 
        self.Defense = 0      
 | 
        self.Drop1 = ""      
 | 
        self.Drop2 = ""  
 | 
        self.EXP = ""     
 | 
          
 | 
        self.count = 12  
 | 
          
 | 
    def ReadFromList(self, curList):  
 | 
  
 | 
        self.MapID = CommFunc.ToIntDef(curList[1])  
 | 
        self.NPCID = CommFunc.ToIntDef(curList[2])  
 | 
  
 | 
        self.LowLV = CommFunc.ToIntDef(curList[6])  
 | 
        self.HighestLV = CommFunc.ToIntDef(curList[7])  
 | 
        self.Defense = CommFunc.ToIntDef(curList[8])  
 | 
  
 | 
        return  
 | 
  
 | 
class NPCPoint():  
 | 
    def __init__(self):  
 | 
        self.NPCID = 0  
 | 
        self.MapID = 0  
 | 
        self.Point = None  
 | 
        return  
 | 
  
 | 
    def ReadFromList(self, curList):  
 | 
        self.NPCID = CommFunc.ToIntDef(curList[0])  
 | 
        self.MapID = CommFunc.ToIntDef(curList[1])  
 | 
        self.Point = eval(curList[2])  
 | 
          
 | 
class MapEventPointMgr():  
 | 
    def __init__(self):  
 | 
        self.__Table = []  
 | 
        self.__NPCPoint = {}  
 | 
          
 | 
    def InitTable(self, tablePath):  
 | 
        fileIO = open(tablePath, "r")  
 | 
        lines = fileIO.readlines()  
 | 
          
 | 
        linenum = 0  
 | 
        for line in lines:  
 | 
            linenum += 1  
 | 
            # 1.×Ö¶ÎÀàÐÍ 2.×Ö¶ÎÃû 3.×ֶα¸×¢  
 | 
            if linenum <= 3:  
 | 
                continue  
 | 
            classObj = MapEventPoint()  
 | 
            lineList = line.split('\t')  
 | 
            classObj.ReadFromList(lineList)  
 | 
              
 | 
            # Åųý·ÇÍÑ»ú¹ÒµØÍ¼  
 | 
            if classObj.MapID / 10000 != 1:  
 | 
                continue  
 | 
            self.__Table.append(classObj)  
 | 
              
 | 
  
 | 
              
 | 
    def InitPointType(self, tablePath):  
 | 
        fileIO = open(tablePath, "r")  
 | 
        lines = fileIO.readlines()  
 | 
          
 | 
        linenum = 0  
 | 
        for line in lines:  
 | 
            linenum += 1  
 | 
            # 1.×Ö¶ÎÀàÐÍ 2.×Ö¶ÎÃû 3.×ֶα¸×¢  
 | 
            if linenum <= 3:  
 | 
                continue  
 | 
            classObj = NPCPoint()  
 | 
            lineList = line.strip().split('\t')  
 | 
  
 | 
            classObj.ReadFromList(lineList)  
 | 
              
 | 
            self.__NPCPoint[classObj.NPCID] = classObj  
 | 
        return  
 | 
      
 | 
      
 | 
    def GetPoint(self, robot, lv, defense, maxMapID):  
 | 
        #maxMapID = robot.GetPlayerInfo().GetMaxMapID()  
 | 
          
 | 
        myPoint = None # ×îÊʺϵĵȼ¶¹Ò»úµã  
 | 
        pointList = []  
 | 
          
 | 
        for point in self.__Table:  
 | 
            if maxMapID != 0:  
 | 
                # ´æÔÚÖ¸¶¨µØÍ¼  
 | 
                if maxMapID != point.MapID:  
 | 
                    continue  
 | 
            else:  
 | 
                if point.MapID/10000 != 1:  
 | 
                    continue  
 | 
              
 | 
            if point.LowLV  == 0:  
 | 
                # ·Ç¹Ò»úµã  
 | 
                continue  
 | 
              
 | 
            pointList.append(point)     # ¼Ç¼±¾µØÍ¼µÄ¿É¹Ò»úµã  
 | 
            # ÕÒµ½×îÊʺÏ×Ô¼ºµÄµÈ¼¶µã  
 | 
            if lv >= point.LowLV:  
 | 
                if myPoint and myPoint.LowLV >= point.LowLV:  
 | 
                    # ÒѼǼ  
 | 
                    continue  
 | 
                myPoint = point  
 | 
                print myPoint.LowLV  
 | 
  
 | 
        if not myPoint:  
 | 
            if not pointList:  
 | 
                #print "ÓÎÏ·ÖÐûÓÐÊʺϵĹһúµã"  
 | 
                return myPoint  
 | 
              
 | 
            # ×îµÍµã  
 | 
            #print "ûÕÒµ½--------È¡×îµÍ"  
 | 
            return pointList[0]  
 | 
          
 | 
        #print "-----------µ±Ç°µã", myPoint.LowLV  
 | 
        pIndex = pointList.index(myPoint)  
 | 
  
 | 
        pointLen = len(pointList)  
 | 
        # ÔÙ¸ù¾Ý·ÀÓùÉÏϵ÷Õû  
 | 
        if defense >= pointList[min(pointLen-1, pIndex+1)].Defense:  
 | 
            # ¸ßÒ»µã  
 | 
            #print "¸ßÒ»µã"  
 | 
            return pointList[min(pointLen-1, pIndex+1)]  
 | 
          
 | 
        if defense < myPoint.Defense:  
 | 
            # µÍÒ»µã  
 | 
            #print "µÍÒ»µã"   
 | 
            return pointList[max(0, pIndex-1)]  
 | 
          
 | 
        #print "µ±Ç°µã"  
 | 
        return myPoint  
 | 
      
 | 
      
 | 
    def FindNPC(self, robot):  
 | 
        # µØÍ¼½âËøÌõ¼þ 1.µÈ¼¶  2.ÈÎÎñ  3.È¡¿É¹Ò»úµÄµØÍ¼µÄµÈ¼¶,ÉÏϵã¸ù¾Ý·ÀÓù²¨¶¯  
 | 
        lv = robot.GetPlayerInfo().GetPlayerLV()  
 | 
        defense = robot.GetPlayerInfo().GetDefense()  
 | 
          
 | 
        maxMapID = robot.GetPlayerInfo().GetMaxMapID()  
 | 
  
 | 
        point = self.GetPoint(robot, lv, defense, maxMapID)  
 | 
        if not point:  
 | 
            return  
 | 
        pointNPCID = point.NPCID  
 | 
              
 | 
        npcPoint = self.__NPCPoint.get(pointNPCID, None)  
 | 
        if not npcPoint:  
 | 
            logging.info("ÕÒ²»µ½ÈκιһúµãmapID:%s lv:%s defense:%s NPCID:%s"%(maxMapID, lv, defense, pointNPCID))  
 | 
            return  
 | 
          
 | 
        tjgPoint = [maxMapID, npcPoint.Point, pointNPCID]  
 | 
          
 | 
        logging.debug("¹Ò»úµã------%s"%str(tjgPoint))  
 | 
        robot.GetPlayerInfo().SetTJGPoint(tjgPoint)  
 | 
        return  
 | 
      
 | 
      
 | 
  
 | 
__gMapEventPointReader = None  
 | 
  
 | 
def ReadMapEventPoint( PyBaseRoot):  
 | 
    global __gMapEventPointReader  
 | 
    if not __gMapEventPointReader:  
 | 
        __gMapEventPointReader =  MapEventPointMgr()  
 | 
        __gMapEventPointReader.InitTable(PyBaseRoot + "Data\\MapEventPoint.txt")  
 | 
        __gMapEventPointReader.InitPointType(PyBaseRoot + "Data\\MonsterRefreshPoint.txt")  
 | 
          
 | 
def GetMapEventPoint():  
 | 
    global __gMapEventPointReader  
 | 
    return __gMapEventPointReader  
 |