骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

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

[求助] 关于ms中的变量如何引用至py函数

[复制链接]

57

主题

953

回帖

543

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
81513
第纳尔
5138
精华
1
互助
18
荣誉
5
贡献
100
魅力
123
注册时间
2008-6-26
QQ
鲜花(103) 鸡蛋(0)
发表于 2021-10-5 17:47:45 | 显示全部楼层 |阅读模式
最近看了r大早年写的,关于python在ms中的一些简单运用,其中之一就是利用python函数,将ms的items元组做了一些操作。
现在我遇到一个问题,就是假设我自定义了一个python函数 def xxx(a,b)。而我写script的时候需要引用这个xxx函数,那么其中的参数我要如何去传递?直接传入ms的变量,编译时候报错,说传入的是字符串

18

主题

1442

回帖

508

积分

皇家侍卫长[官方战队队长]

光辉骑士团[UTD]
战团ID:UTD_awe23

Rank: 6Rank: 6

UID
2102975
第纳尔
7304
精华
0
互助
10
荣誉
2
贡献
0
魅力
73
注册时间
2014-8-1

第十一届战团中国联赛征战勋章第十一届战团中国联赛铁骨勋章第一届梦幻联赛参与勋章第十届战团中国联赛征战勋章战团正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]元老骑士勋章霸主正版勋章

鲜花(76) 鸡蛋(2)
发表于 2021-10-18 17:01:56 | 显示全部楼层
MS变量在python里面就是一个字符串(用双引号括起来的),传入没问题,是你使用的地方出了问题。可以贴一下代码更好解决问题

57

主题

953

回帖

543

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
81513
第纳尔
5138
精华
1
互助
18
荣誉
5
贡献
100
魅力
123
注册时间
2008-6-26
QQ
鲜花(103) 鸡蛋(0)
 楼主| 发表于 2021-10-19 13:24:03 | 显示全部楼层
BattleField 发表于 2021-10-18 17:01
MS变量在python里面就是一个字符串(用双引号括起来的),传入没问题,是你使用的地方出了问题。可以贴一下 ...
  1. ("initialize_occupation_suitability_all", [
  2.   (store_script_param, ":troop_id", 1),
  3.   set_occupation_suitability_all(":troop_id")
  4. ]),
复制代码

这种写法早期R大的某个帖子里看到,这种用法肯定是错误的,因为":troop_id"会被当成字符串了。在那个帖子里R大最终找了其他方法规避了这个问题~然后我想知道,":troop_id"这个ms中的变量值,有没有办法传给py函数,请大神赐教

18

主题

1442

回帖

508

积分

皇家侍卫长[官方战队队长]

光辉骑士团[UTD]
战团ID:UTD_awe23

Rank: 6Rank: 6

UID
2102975
第纳尔
7304
精华
0
互助
10
荣誉
2
贡献
0
魅力
73
注册时间
2014-8-1

第十一届战团中国联赛征战勋章第十一届战团中国联赛铁骨勋章第一届梦幻联赛参与勋章第十届战团中国联赛征战勋章战团正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]元老骑士勋章霸主正版勋章

鲜花(76) 鸡蛋(2)
发表于 2021-10-20 13:13:56 | 显示全部楼层
本帖最后由 BattleField 于 2021-10-20 13:15 编辑
stevenxxy007 发表于 2021-10-19 13:24
这种写法早期R大的某个帖子里看到,这种用法肯定是错误的,因为":troop_id"会被当成字符串了。在那个帖 ...

python不能获取这个变量的值,获取的只是这个变量的名字。给你假设一种可能的情景:这个函数要用这个参数作为set_slot的目标,那么这个函数可能是这么写的:
def set_occupation_suitability_all(troop):
    return (troop_set_slot, troop, 0, slot_XXX)


如果你要根据":troop_id"值的不同作出不同的行为,只能利用MS的eq语句。这样你的函数和调用方法都需要修改。函数可以这么写:
def set_occupation_suitability_all(troop):
    return [(try_begin),
                   (eq, troop,"trp_player"),
                   (troop_set_slot, troop, 0, slot_XXX),
               (else_try),
                   (eq, troop,"trp_XXX"),
                   (troop_set_slot, troop, 1, slot_XXX),
               (try_end)]
使用这个函数地方应该这么写:
("initialize_occupation_suitability_all", [
  (store_script_param, ":troop_id", 1),
] + set_occupation_suitability_all(":troop_id")),
如果要用python这个工具,建议看一看python语法

评分

参与人数 1第纳尔 +5 互助 +1 收起 理由
Aomine Daiki + 5 + 1 乐于助人!

查看全部评分

鲜花鸡蛋

stevenxxy007  在2021-10-20 15:14  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

15

主题

739

回帖

366

积分

子爵[版主]

汉[Han]
联机ID:Han_DongHai

Rank: 7Rank: 7Rank: 7

UID
3033293
第纳尔
10330
精华
0
互助
24
荣誉
2
贡献
360
魅力
184
注册时间
2018-10-3

第十届战团中国联赛征战勋章汉匈决战正版勋章战团正版勋章霸主正版勋章

QQ
鲜花(37) 鸡蛋(0)
发表于 2021-10-30 19:09:43 | 显示全部楼层
":troop_id" 其实可以用process里的 find_object函数找到id
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-4-20 02:55 , Processed in 0.127810 second(s), 24 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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