|
试做了一个用“单位#编号”命名规则的Python\UnitNameEventManager.py,实际上比按文明和城市命名更简单,不过因为暂时不知道如何针对不同类型的单位分别命名,所以这样对野兽和海空军通用性好些。
以下是简要的Python脚本说明供参考,大家可以继续深入研究……
...前略...
# 生成单位名称类
class BuildUnitName(AbstractBuildUnitName):
# 类初始化方法
def __init__(self, eventManager, *args, **kwargs):
super(BuildUnitName, self).__init__(eventManager, *args, **kwargs)
# 添加单位创建事件处理器
eventManager.addEventHandler("unitCreated", self.onUnitCreated)
self.eventMgr = eventManager
# 单位创建事件处理方法
def onUnitCreated(self, argsList):
'Unit Completed'
unit = argsList[0]
# 如果有特殊名称(如历史伟人)则不加处理直接退出
if (len(unit.getNameNoDesc()) > 0):
return
# 调用生成单位名称函数
zsName = getUnitName(unit)
unit.setName(zsName)
# 生成单位名称函数
def getUnitName(objUnit):
# 需要编号的一组单位,例如“中国移民”
unitS = str(objUnit.getOwner()) + PyInfo.UnitInfo(objUnit.getUnitType()).getDescription()
# 如果目前不存在“中国移民”,则初始编号0
if (sdEntityExists(zsModName, unitS) == False):
sdEntityInit(zsModName, unitS, {"Cnt" : 0})
# 下一个单位的编号,例如1
unitCount = sdGetVal(zsModName, unitS, "Cnt") +1
# 下一个单位的名字,例如“移民#1”
unitName = PyInfo.UnitInfo(objUnit.getUnitType()).getDescription() + "#" + str(unitCount)
# 保存当前编号并返回
sdSetVal(zsModName, unitS, "Cnt", unitCount)
return unitName
附件是修改过的UnitNameEventManager.py文件 |
|