#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#
|
# @todo:
|
#
|
# @author: Alee
|
# @date 2017-12-29 ÏÂÎç02:02:23
|
# @version 1.0
|
#
|
# @note: ¹¹½¨¹¤¾ßÐèͬ²½´Ë±í
|
#
|
#---------------------------------------------------------------------
|
import CommFunc
|
import logging
|
import ConfigurationReader.ConfigIniReader
|
|
|
|
|
# 1. ¹¹½¨±í
|
|
class MapEventPoint():
|
def __init__(self):
|
self.MapID = 0
|
self.NPCID = 0
|
self.LowLV = 0
|
self.HighestLV = 0
|
self.Defense = 0
|
|
|
def ReadFromList(self, curList):
|
self.MapID = CommFunc.ToIntDef(curList[0])
|
self.NPCID = CommFunc.ToIntDef(curList[1])
|
self.LowLV = CommFunc.ToIntDef(curList[2])
|
self.HighestLV = CommFunc.ToIntDef(curList[3])
|
self.Defense = CommFunc.ToIntDef(curList[4])
|
|
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
|
# ×Ö¶ÎÃû
|
if linenum <= 1:
|
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
|
# .×Ö¶ÎÃû
|
if linenum <= 1:
|
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):
|
config = ConfigurationReader.ConfigIniReader.GetConfig()
|
ServerDBConfigPath = config.GetServerDBConfigPath() #Êý¾Ý¿â·¾¶
|
global __gMapEventPointReader
|
if not __gMapEventPointReader:
|
__gMapEventPointReader = MapEventPointMgr()
|
__gMapEventPointReader.InitTable(ServerDBConfigPath + r"\PySysDB\tagMapEventPoint.txt")
|
__gMapEventPointReader.InitPointType(ServerDBConfigPath + r"\PySysDB\tagMonsterRefreshPoint.txt")
|
|
def GetMapEventPoint():
|
global __gMapEventPointReader
|
return __gMapEventPointReader
|