文明/文明IV/Modding/教程/Python教程/使用API
文明4 API 是一个包含所有与文明4游戏本身交互的特定函数的列表。API 存在两个版本。第一个由 Locutus 创建,可以在 这里找到,第二个由 GBM 创建,可以在 这里找到。Locutus 的 API 与最新的补丁保持同步,所以我建议使用那个版本。
现在,在过去的一个月左右的时间里,我在论坛上回答关于 Python 的问题时发现,很多人都难以阅读 API。解释函数的作用可能非常困难,但 API 确实提供了很多提示,如果你愿意阅读的话。
现在,在过去的一个月左右的时间里,我在论坛上回答关于 Python 的问题时发现,很多人都难以阅读 API。解释函数的作用可能非常困难,但 API 确实提供了很多提示,如果你愿意阅读的话。
我将以 Locutus 的 API 为例,因为我觉得它的界面更好,所以打开它!
首先,我们有类。这些类列出了对特定实体或指针可以执行的所有函数。例如,CyUnit 列出了对单元实体(游戏中的一个单位)起作用的所有函数。类列在左上角的框架中。你会注意到,有几个类旁边有一个小 "+" 符号。这些类用于直接从 xml 文件中获取特定信息。
现在我们有类型。这些类型是从 xml 文件中提取的不同类型。显示的 int 值是默认值,虽然你可以使用它们,并且你的代码很可能能工作,但我建议不要这样做,因为如果在将来的补丁中 xml 的顺序发生变化,你的代码就会失效。相反,我建议使用上面显示的 gc.getInfoTypeForString(""),因为这种方法与补丁更加兼容。
最后,我们有函数。每个类都有自己的函数集,这些函数必须只对该类进行操作。如果你尝试从一个类中获取一个函数,并在另一个类上使用它,它将无法工作。函数是 API 的主要部分,你想要了解的内容。
函数
现在,有很多不同的函数。大多数函数在游戏中并不“做”任何事情,而是从你的指针中获取一个值,你可以在等式中使用它。如果你看函数左侧,它会显示这个函数返回的内容。例如,如果你使用
BOOL CyPlayer.canChangeReligion()
它不会设置玩家能够改变宗教,而是会返回一个 BOOL,一个真或假值,取决于玩家是否能够改变宗教。你明白我的意思吗,它没有“做”任何事情?
函数可以返回的内容有
- Bool - 真或假,1 或 0
- Int - 整数值(可以为负数)(例如 256)
- Float - 浮点数(例如 1.3423)
- String - 字符串("猫坐在垫子上")
- Turple - 列表([1, 4, 2, 8, 2])
- Void - 请参阅下文
那些“做”事情的函数会返回一个“VOID”,这意味着它们设置而不是获取数据。这些函数是最重要的,因为没有它们你无法做太多的事情,而且不幸的是,它们的数量不足以满足你所有的需求。抱歉,但这就是现状。
所以,你知道了函数返回的内容,但这还不是你需要了解的全部。你还需要知道要给它提供什么信息才能返回这些数据。有些函数不需要任何输入。
CyUnit.canMove()
例如,除了要检查哪个单位可以移动之外,它不需要知道任何东西(单位指针应该在 CyUnit 的位置)。但是,大多数函数并不这么简单,它们需要一个输入来创建输出。
以这个函数为例
CyUnit.setHasPromotion(PromotionType eIndex, BOOL bNewValue)
这个函数需要两个参数(输入),你想要给单位的晋升类型,以及一个布尔值,表示是否要获得或移除晋升。举个例子
pUnit.setHasPromotion(gc.getInfoTypeForString("PROMOTION_COMBAT1"), 1)
会给指针 pUnit 提供战斗1晋升。请注意,在这种情况下,给出晋升的 int 值非常重要,因为当函数要求一个类型时,它实际上想要一个 int... 不要问我为什么!幸运的是,如果你在函数中输入了错误的参数,Python 会在尝试运行函数时告诉你。关于这方面的更多内容将在调试部分介绍!
CyGlobalContext
在文件中通常缩写为 gc,这可能是最有用的类,因为它包含所有与文明4相关的通用函数。GlobalContext 的独特之处在于,它不需要与指针一起调用,而是一个用于获取信息的独立类。
它有很多用途
- 正如我之前所说,你可以使用它从类型中获取整数。例如
gc.getInfoTypeForString("TECH_MYSTICISM")
会获取神秘主义的 int 值。
- 你可以使用它从整数 ID 获取指针。例如:[code]gc.getPlayer(0)[/code] 会返回 ID 为 0 的玩家的 pPlayer 指针。
- 你可以使用它从 xml 文件中获取信息。例如
gc.getPromotionInfo("PROMOTION_COMBAT1")
会返回战斗1晋升的指针,然后可以与 CvPromotionInfo 一起使用,以获取有关该特定晋升的信息。
- 一个常见的用法是获取活动玩家指针,它会返回轮到谁行动的玩家的指针
gc.getActivePlayer()
- 最后一个主要用途是获取特定事物的实例数量。例如
gc.getNumPromotionInfos()
会返回游戏中可用的晋升数量。如果你想遍历这些晋升并检查一个单位是否拥有它们,并在拥有时激活一个新函数,这将非常有用。
虽然 CyGlobalContext 有其他用途,但它们太多,无法在这里全部列出。我尝试列出我认为最重要的用途。