设为首页收藏本站

塞爱维(CIV)文明联盟

 找回密码
 注册
查看: 6196|回复: 3

修改“臧霸版”集成包使单位按类型分别命名

[复制链接]
发表于 2006-8-26 11:36:19 | 显示全部楼层 |阅读模式
试做了一个用“单位#编号”命名规则的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文件
 楼主| 发表于 2006-8-27 14:48:03 | 显示全部楼层
经过研究,确实可以按单位类型分别命名!这下完善多了……
 楼主| 发表于 2006-8-27 14:49:47 | 显示全部楼层
新增代码如下(代码中的汉字要用转义符号替代,或是存放到XML文件中):

...(前略)...
  # “战略导弹#1”或“儒士#1”或“狮子#1”
  if (objUnit.getSpecialUnitType() == 0 or objUnit.getSpecialUnitType() == 2 or objUnit.getUnitAIType() == 1):
    unitName = PyInfo.UnitInfo(objUnit.getUnitType()).getDescription() + "#" + str(unitCount)
  # “第1战斗机大队”或“第1武装直升机大队”
  elif (objUnit.getSpecialUnitType() == 1 or objUnit.getUnitCombatType() == 7):
    unitName = "第" + str(unitCount) + PyInfo.UnitInfo(objUnit.getUnitType()).getDescription() + "大队"
  # “第1桨帆船编队”
  elif (objUnit.getUnitCombatType() == 8):
    unitName = "第" + str(unitCount) + PyInfo.UnitInfo(objUnit.getUnitType()).getDescription() + "编队"
  # “第1勇士团”
  else:
    unitName = "第" + str(unitCount) + PyInfo.UnitInfo(objUnit.getUnitType()).getDescription() + "团"


附件……
 楼主| 发表于 2006-8-28 14:36:59 | 显示全部楼层
目前用了 getSpecialUnitType getUnitCombatType getUnitAIType 三个方法,好象找不到一个单独的方法能区分所有不同类型……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|塞爱维(CIV)文明联盟    

GMT+8, 2024-5-3 02:43

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表