骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 5092|回复: 4

[经验与教程] 函数的封装与调用(scripts.txt)

[复制链接]

10

主题

7

回帖

45

积分

扈从

Rank: 2Rank: 2

UID
3645558
第纳尔
125
精华
0
互助
8
荣誉
0
贡献
0
魅力
50
注册时间
2024-4-15
鲜花(5) 鸡蛋(0)
发表于 2024-4-16 22:02:08 | 显示全部楼层 |阅读模式
## 函数封装与调用(scripts.txt)

这篇可以算是一个前置教程的帖子,有些代码需要提前将函数封装好,以便调用.真的方便很多.

- 你想一行代码给物品添加额外信息吗;
- 你想一行代码自定义战利品吗;
- 你想一行代码去添加各种各样的BUFF效果吗?

* 只需要将你搜集到的代码封装成函数,然后调用即可.

**无论你想自己写代码,还是只是想看函数如何调用,这篇都会有答案**

ms中,我们调用一个函数(或者叫脚本)的方式是:

```python
(call_script,<script_id>,<第1个参数>,<第2个参数>,<第3个参数>,...),
# Calls specified script with or without parameters. Maximum number of parameters you can pass with the operation is 16.
```

**scripts.txt** 文件中就是一堆封装好的函数,这些函数不会直接运行,它们被MOD根目录的其他文件进行调用从而生效.
**scripts.txt** 文件的第二行的数字指代封装好的函数的总数量. 如果我们要添加一个函数,那么这里就要 **+1** .
那么我们在最下面一行,添加一个自己的函数试试:

```python
fn_mygo -1
0
```

这样就添加好了,这个函数名字叫`fn_mygo`,次行的第一个数字是代码总行数,后面则填代码.
调用这个函数的方式: `(call_script,"script_fn_mygo"),` , 注意有个 **script_** 前缀.

那么目前这个函数还什么都内容没有.我们来写点什么:

**例如我们写一个:** 根据玩家生涯杀敌数,1比10奖励第纳尔.

```python
(get_player_agent_kill_count, ":kill_count"), # 获取玩家生涯杀敌数.
(val_mul,":kill_count",10), # 乘以10.
(troop_add_gold, "trp_player", ":kill_count"), # 奖励第纳尔.
```

编译好丢进fn_mygo中:

```python
fn_mygo -1
3 1701 1 1224979098644774912 2107 2 1224979098644774912 10 1528 2 360287970189639680 1224979098644774912
```

那么以后你在任何地方,`(call_script,"script_fn_mygo"),`,就会按照玩家生涯杀敌数,1比10奖励第纳尔了.

就是这么简单啦! 不过以上是一个没有任何参数的函数. 我们可以添加参数,来让函数更加灵活.

**例如我们写一个:** 根据玩家生涯杀敌数,自定义比例,奖励第纳尔.

```python
(store_script_param, ":rate",1), #第1个参数
#(store_script_param, ":var_2",2), #第2个参数
#(store_script_param, ":var_3",3), #第3个参数

(get_player_agent_kill_count, ":kill_count"), # 获取玩家生涯杀敌数.
(val_mul,":kill_count",":rate"), # 乘以自定义比例.
(troop_add_gold, "trp_player", ":kill_count"), # 奖励第纳尔.
```

编译好丢进`fn_mygo`中;
假如我们想以1比20的比例奖励第纳尔,那么这样写:`(call_script,"script_fn_mygo",20),`
1比30就:`(call_script,"script_fn_mygo",30),`

你可以设置更多变量,让决定奖励第纳尔数量的因素增加.


ok,本篇就到此结束.愉快的去调用大家已经写好的函数吧.



***

附一个网址(若打不开请用chrome或用steam++等加速github):

https://b1inkie.github.io/b1note.github.io/

装备某件物品时增加属性点;添加书籍;全自动武器;自爆步兵;光环:移速BUFF(光写了 没测);散弹 但是每一个弹头都是自瞄;自定义战利品等等功能都可以在这里找到.

若依旧有疑问或需要视频讲解,可以加下面群:
附加半个交流群: 855512521



评分

参与人数 1第纳尔 +20 收起 理由
Aomine Daiki + 20 您的帖子很有价值!

查看全部评分

鲜花鸡蛋

ggfgfgf  在2024-4-20 14:39  送朵鲜花  并说:排版抽象,有真东西的

17

主题

627

回帖

343

积分

见习骑士

Rank: 3

UID
3102512
第纳尔
2375
精华
0
互助
30
荣誉
0
贡献
0
魅力
74
注册时间
2019-9-6

骑砍中文站APP会员勋章战团正版勋章霸主正版勋章

鲜花(54) 鸡蛋(0)
发表于 2024-4-17 16:51:24 来自手机 | 显示全部楼层
这排版也太抽象了来自: Android客户端

10

主题

174

回帖

100

积分

见习骑士

Rank: 3

UID
1411320
第纳尔
670
精华
0
互助
5
荣誉
2
贡献
0
魅力
23
注册时间
2013-6-13

战团正版勋章

鲜花(9) 鸡蛋(0)
发表于 2024-8-5 23:28:35 | 显示全部楼层
想问问自己写的 script 如果不使用系统预定的 reg0~reg64 有没有办法传出值呢?或者换句话说,有没有办法自定义一个 reg100 这种全局变量之类。。。(最好还是能传一个临时变量)

7

主题

829

回帖

266

积分

见习骑士

Rank: 3

UID
2499991
第纳尔
5045
精华
0
互助
3
荣誉
0
贡献
0
魅力
0
注册时间
2015-4-19

战团正版勋章拿破仑正版勋章维京征服正版勋章汉匈决战正版勋章霸主正版勋章

鲜花(42) 鸡蛋(2)
发表于 2024-9-15 20:52:42 | 显示全部楼层
那么问个最基础的问题。。请问怎么编译?

6

主题

76

回帖

35

积分

扈从

Rank: 2Rank: 2

UID
1996313
第纳尔
447
精华
0
互助
2
荣誉
0
贡献
0
魅力
0
注册时间
2014-5-30
鲜花(0) 鸡蛋(0)
发表于 2024-10-16 11:36:49 | 显示全部楼层
jiasdmingzu 发表于 2024-9-15 20:52
那么问个最基础的问题。。请问怎么编译?

用【MBCodeEditor】这个工具反编译器加载MOD,然后同步反编译   
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2024-11-19 08:48 , Processed in 0.132561 second(s), 29 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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