模拟人生4自制查询城镇人口mod教程 如何自制查询城镇人口mod( 二 )


class CheatOutput(Output):
__qualname__ = 'CheatOutput'
def __call__(self, s):
cheat_output(s, self._context)
“__call__”函数的作用是:当用户输入某特定字符串时 , 调用所对应的指定函数 。
(2)处理完控制台部分后 , 下面让我们来编写一个获取城镇人口的函数:
需要使用到的集合:“模拟” 。
在“sims”文件夹中 , 有一个名为“sim_info_manager.py”的文件 。
在该文件中有一个名为“SimInfoManager”的类 。它是用来保存每个小人的数据的 。如果我们可以计数其列表中的所有sim个数 , 那么我们就能得到所有模拟的人口了 。通过查看TS4的存储库中的其余代码 , 我注意到一个模式:sim_info_manager是服务(services)中的一个对象 , 位于services文件夹的__init__.py中 。它有一个非常重要的函数:get_all()<-看到名字应该就猜到是什么作用的了吧?
这里是我们到目前为止的代码:
import sims4.commands
@ sims4.commands.Command('getpopulation' , command_type = sims4.commands.CommandType.Live)
(写了这么久才两行代码zzz , 作者表示请大家坚持看下去 , 因为大部分的关键线索都已经找到了 , 就差把它们合一起啦~功夫不负有心人~)
现在我们导入service(包含了刚才说的__init__.py):
import services
然后在装饰器下面声明一个函数:
def getpop(_connection = None):
*getpop是你的函数名 , _connection是形参的名称 , 随便叫什么都可以 , 作者表示你就算叫它fluffy_kittens(毛毛猫)都行 。
所以 , 现在我们知道如何输出到控制台(通过调用CheatOutput) , 我们就可以定义一个调用它的变量 , 输出得字符串是类型output('blablabla'):
output = sims4.commands.CheatOutput(_connection)
但我们不想只输出'blablabla' , 我们想输出城镇的人口 。这是我们在service中使用sim_info_manager的地方 。
output('Your town\'s population is {}'.format(len(services.sim_info_manager().get_all())))
*可以把英语改成中文
output('你的城镇人口是: {}'.format(len(services.sim_info_manager().get_all())))
通过我们在services.sim_info_manager()中调用get_all()时获得的列表长度 , 我们得到了城镇中所有小人的数量!完成!
这是我们的最终代码:
import servicesimport sims4.commands@sims4.commands.Command('getpopulation', command_type=sims4.commands.CommandType.Live)def getpop(_connection=None):output = sims4.commands.CheatOutput(_connection)output('Your town\'s population is {}'.format(len(services.sim_info_manager().get_all())))
游戏截图:

模拟人生4自制查询城镇人口mod教程 如何自制查询城镇人口mod

文章插图
Q1:首先……如何编写python?
下载一个文本编辑器 , 如Notepad++ (仅windows) , sublime Text (支持windows、OS X、Ubuntu) , 两个都很好用~
*notepad++编写时选择语言>python , sublime选择view>syntax>python
Q2:如何把.py文件转换成.pyo?
(1)下载python3.3.5(模拟人生使用的python版本) , 安装时别忘了把安装python路径(path) 这个选项也选上
(2)保存如下代码 , 格式为.bat , 文件名随便取 , 比如:PythonOptimizeCompile.bat
import sims4.commandsimport services@sims4.commands.Command('getpopulation', command_type=sims4.commands.CommandType.Live)def getpop(_connection=None):output = sims4.commands.CheatOutput(_connection)output('Your town\'s population is {}'.format(len(services.sim_info_manager().get_all())))

相关经验推荐