#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package FormulaControl # @todo: ¹«Ê½¹ÜÀíÆ÷ # # @author: panwei # @date 2010-08-16 # @version 1.3 # # @note: ÓÃÓÚ»º´æÔ¤±à¼­µÄ¹«Ê½, Ìá¸ßevalµÄЧÂÊ # # @change: "2010-08-19 14:45" panwei Ìí¼Ó²»¿É±àÒëÁбí, Ôà»°ÁÐ±í²»¿É±àÒë # @change: "2010-09-01 15:30" panwei ÐÞ¸ÄÈ«¾Ö×ÖµäÍü¼ÇÌí¼Óglobal # @change: "2010-10-08 11:05" panwei °Î³ý·þÎñÆ÷°æ±¾¿ØÖÆ´úÂë #--------------------------------------------------------------------- """Version = 2010-10-08 11:05""" #--------------------------------------------------------------------- #=============================================================================== # Áʽ¼ÆËãÌá¸ß25±¶µÄ·½·¨£º # 1.Ô­·½·¨ # expression = "a + b" # c = eval(expression) # # 2.ÏȱàÒ룬ºóeval # expression = "a + b" # d = compile(expression, "modeName", "eval") # c = eval(d) # # ´óÁ¿ÔËËã²âÊÔ½á¹û£º # c = eval(d) ±È # c = eval(expression) ¿ì25±¶ # # evalÒ»¸ö×Ö·û´®µÄʱ¼ä = ±àÒëÒ»¸ö×Ö·û´® + evalÒ»¸ö±àÒëºÃµÄÄ£¿é #=============================================================================== #--------------------------------------------------------------------- #--------------------------------------------------------------------- #¹«Ê½×ÖµäÃû×¢²á #×¢²á¹«Ê½×ÖµäÃû·½Ê½ 'Facl_DistKey_ + KeyName' (ǰ׺ÃûÓÃÓÚÇø±ð²ß»®ÅäÖÃtxt¹«Ê½Key) #ÀýÈç: Facl_DistKey_KillNPC = 'Facl_DistKey_KillNPC' #--------------------------------------------------------------------- #»º´æ·þÎñÆ÷ËùÓеĹ«Ê½×ÖµäÐÅÏ¢{δ±àÒëµÄ¹«Ê½:±àÒëºóµÄ¹«Ê½} AllFormulaDist = {} #--------------------------------------------------------------------- #ÌØÊ⹫ʽ²»ÄܱàÒëÁбí(Ôà»°Áбí) IgnoreFormulaKeyList = ['DirtyList', 'DirtyName'] #--------------------------------------------------------------------- ##»ñÈ¡±àÒëºóµÄ¹«Ê½. # @param formulaKey ×ÖµäKeyÃû # @param noCompileFormula δ±àÒëµÄ¹«Ê½ # @return ±àÒëºóµÄ¹«Ê½ # @remarks »ñÈ¡±àÒëºóµÄ¹«Ê½. def GetCompileFormula(formulaKey, noCompileFormula): global AllFormulaDist #±àÒëºóµÄ×Öµä compileFormula = AllFormulaDist.get(formulaKey) #---Õâ¸ö¹«Ê½ÒѾ­±àÒë¹ýÁË--- if compileFormula != None: #GameWorld.Log('Õâ¸ö¹«Ê½ = %s ÒѾ­±àÒë¹ý, Ö±½Ó·µ»Ø'%(formulaKey)) return compileFormula #---Õâ¸ö¹«Ê½Î´±àÒë¹ýÁË--- compileFormula = CompileFormula(formulaKey, noCompileFormula) #¸üÐÂ×Öµä AllFormulaDist.update({formulaKey:compileFormula}) #GameWorld.Log('Õâ¸ö¹«Ê½ = %s δ±àÒë¹ý, ¼ÓÈë±àÒë'%(formulaKey)) return compileFormula #--------------------------------------------------------------------- ##±àÒ빫ʽ # @param formulaName ¹«Ê½Ãû # @param noCompileFormula δ±àÒëµÄ¹«Ê½ # @return ±àÒëºóµÄ¹«Ê½ # @remarks ±àÒ빫ʽ def CompileFormula(formulaName, noCompileFormula): #ÌØÊâ²»¿É±àÒëµÄ¹«Ê½, Ö±½Ó·µ»Ø if formulaName in IgnoreFormulaKeyList: return noCompileFormula #·µ»Ø±àÒëºóµÄ½á¹û return compile(noCompileFormula, 'FormulaControl', 'eval') #--------------------------------------------------------------------- ##Çå¿Õ±àÒëºóµÄ¹«Ê½×Öµä # @param ÎÞ²ÎÊý # @return ·µ»ØÖµÎÞÒâÒå # @remarks Çå¿Õ±àÒëºóµÄ¹«Ê½×Öµä def ClearCompileFormulaDist(): global AllFormulaDist AllFormulaDist = {} #GameWorld.Log('ClearCompileFormulaDist Sucess AllFormulaDist = %s'%(AllFormulaDist)) return