骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

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

[功能与代码] 领主和城镇士兵自动升级进阶代码

[复制链接]

107

主题

1514

回帖

726

积分

骑士

大汉虎贲军[DH]
战团ID:jgzh1990

Rank: 4Rank: 4

UID
1233738
第纳尔
4448
精华
0
互助
30
荣誉
9
贡献
10
魅力
407
注册时间
2013-3-16

骑砍中文站APP会员勋章战团正版勋章骑砍中文站微博会员勋章

QQ
鲜花(333) 鸡蛋(0)
发表于 2017-11-24 10:57:49 | 显示全部楼层 |阅读模式
本帖最后由 蒋亚军1990 于 2017-11-28 15:00 编辑

       我最近些研究了一下如何让领主士兵能够自动升级进阶,而不是带着100个农民之类的低级兵种到处转,虽然有很多MOD已经有这功能,但是这段代码完全是我自己手工打的,参战MS1.166代码编写,应该属于原创吧。代码功能为在设定时间内,我设为每天,领主所带的士兵和城堡驻军能够自动升级进阶,越高级越难进阶,领主带在身上的兵进阶速度是驻军两倍,目前就是简单的设定一下,没有过多考虑领主的经验和金钱,仅仅是每天固定进阶一定数量,此代码里面的兵种和阵营基于风三的兵种和阵营编写,代码如下:
  1. (try_for_parties,":suoyoubudui"),
  2.         (neg|eq,":suoyoubudui","p_main_party"),
  3.     (try_begin),
  4.            (party_slot_eq, ":suoyoubudui", slot_party_type, spt_kingdom_hero_party),
  5.            (party_stack_get_troop_id, ":lingdaozhe", ":suoyoubudui", 0),
  6.            (is_between,":lingdaozhe","trp_npc1","trp_knight_mod_10"),
  7.            (assign,":beishu",2),
  8.       (else_try),
  9.            (this_or_next|party_slot_eq,":suoyoubudui",slot_party_type,spt_castle),
  10.            (party_slot_eq,":suoyoubudui",slot_party_type,spt_town),
  11.            (party_get_slot, ":suoyouz", ":suoyoubudui",  slot_town_lord),
  12.            (is_between,":suoyouz","trp_npc1","trp_knight_mod_10"),
  13.            (assign,":beishu",1),
  14.       (else_try),
  15.            (assign,":beishu",0),
  16.       (try_end),
  17.            (party_get_num_companion_stacks, ":zhongleis", ":suoyoubudui"),
  18.       (try_for_range_backwards, ":stack_no", 0, ":zhongleis"),
  19.           (party_stack_get_troop_id, ":bingzhong", ":suoyoubudui",":stack_no"),
  20.           (party_stack_get_size, ":bingzhongshu",":suoyoubudui",":stack_no"),
  21.           (neg|troop_is_hero, ":bingzhong"),
  22.           (store_character_level, ":dengji",":bingzhong"),
  23.       (try_begin),
  24.            (is_between,":dengji",0,11),
  25.           (assign,":shengjis",10),
  26.       (else_try),
  27.            (is_between,":dengji",11,16),
  28.           (assign,":shengjis",5),
  29.       (else_try),
  30.             (is_between,":dengji",16,30),
  31.           (assign,":shengjis",3),
  32.       (else_try),
  33.           (ge,":dengji",30),
  34.           (assign,":shengjis",1),
  35.       (try_end),
  36.       (try_begin),
  37.             (is_between,":dengji",20,25),
  38.             (store_troop_faction, ":bingzhongzy", ":bingzhong"),
  39.          (try_begin),
  40.             (eq,":bingzhongzy","fac_kingdom_1"),
  41.             (store_random_in_range,":suijibz","trp_swadian_wuyingwuwei","trp_swadian_messenger"),
  42.          (else_try),
  43.             (eq,":bingzhongzy","fac_kingdom_2"),
  44.             (store_random_in_range,":suijibz","trp_vaegir_wudanghubu","trp_vaegir_messenger"),
  45.          (else_try),
  46.             (eq,":bingzhongzy","fac_kingdom_3"),
  47.             (store_random_in_range,":suijibz","trp_khergit_xiandengsishi","trp_khergit_messenger"),
  48.          (else_try),
  49.             (eq,":bingzhongzy","fac_kingdom_4"),
  50.             (store_random_in_range,":suijibz","trp_nord_danyangjingbing","trp_nord_messenger"),
  51.          (else_try),
  52.             (eq,":bingzhongzy","fac_kingdom_5"),
  53.             (store_random_in_range,":suijibz","trp_rhodok_danyangjingbing","trp_rhodok_messenger"),
  54.          (else_try),
  55.             (eq,":bingzhongzy","fac_kingdom_6"),
  56.            (store_random_in_range,":suijibz","trp_gongsunzan_jingruidaofushou","trp_gongsunzan_messenger"),
  57.          (else_try),
  58.             (eq,":bingzhongzy","fac_kingdom_7"),
  59.            (store_random_in_range,":suijibz","trp_xishu_dongzhoubing","trp_xishu_messenger"),
  60.          (else_try),
  61.             (eq,":bingzhongzy","fac_kingdom_8"),
  62.            (store_random_in_range,":suijibz","trp_mateng_yulinjunzhen1","trp_mateng_messenger"),
  63.          (else_try),
  64.             (eq,":bingzhongzy","fac_kingdom_9"),
  65.            (store_random_in_range,":suijibz","trp_yuanshu_jingruidaopaishou","trp_yuanshu_messenger"),
  66.          (else_try),
  67.             (eq,":bingzhongzy","fac_kingdom_10"),
  68.            (store_random_in_range,":suijibz","trp_lvbu_xianzhenyingjiashi","trp_lvbu_messenger"),
  69.          (else_try),
  70.             (eq,":bingzhongzy","fac_kingdom_11"),
  71.            (store_random_in_range,":suijibz","trp_zhanglu_jingruidaopaishou","trp_zhanglu_messenger"),
  72.          (else_try),
  73.             (eq,":bingzhongzy","fac_kingdom_12"),
  74.            (store_random_in_range,":suijibz","trp_lijue_feixiongjun","trp_lijue_messenger"),
  75.          (else_try),
  76.             (eq,":bingzhongzy","fac_kingdom_13"),
  77.            (store_random_in_range,":suijibz","trp_gongsundu_jingruidaofushou","trp_gongsundu_messenger"),
  78.          (else_try),
  79.             (eq,":bingzhongzy","fac_kingdom_14"),
  80.            (store_random_in_range,":suijibz","trp_hansui_yulinjunzhen1","trp_hansui_messenger"),
  81.          (else_try),
  82.             (eq,":bingzhongzy","fac_kingdom_15"),
  83.            (store_random_in_range,":suijibz","trp_liuyao_jingruidaopaishou","trp_liuyao_messenger"),
  84.          (else_try),
  85.             (eq,":bingzhongzy","fac_kingdom_16"),
  86.            (store_random_in_range,":suijibz","trp_yanbaihu_jingruidaopaishou","trp_yanbaihu_messenger"),
  87.          (else_try),
  88.             (eq,":bingzhongzy","fac_player_supporters_faction"),
  89.            (store_random_in_range,":suijibz","trp_swadian_hubaoqi_new","trp_looter"),
  90.         (try_end),
  91.           (store_mul, ":sjizs", ":shengjis", ":beishu"),
  92.           (party_add_members, ":suoyoubudui", ":suijibz", ":sjizs"),
  93.           (party_remove_members, ":suoyoubudui", ":bingzhong", ":sjizs"),
  94.      (else_try),
  95.            (store_mul, ":sjizs", ":shengjis", ":beishu"),
  96.            (store_random_in_range,":suijis",0,2),
  97.            (troop_get_upgrade_troop,":sjbingzhong",":bingzhong",":suijis"),
  98.             (ge,":sjbingzhong",1),
  99.           (party_add_members, ":suoyoubudui", ":sjbingzhong", ":sjizs"),
  100.           (party_remove_members, ":suoyoubudui",":bingzhong", ":sjizs"),
  101.     (try_end),
  102.   (try_end),
  103. (try_end),
复制代码
TXT文档下载地址:

领主士兵自动升级进阶代码.txt

8.72 KB, 下载次数: 189

评分

参与人数 2荣誉 +1 第纳尔 +50 魅力 +1 收起 理由
小丑遊戲 + 1 + 50 文章不错,继续努力!
yk199810 + 1 文章不错,继续努力!

查看全部评分

英雄自当冲杀敌阵,马裹尸还;决不可偏安一瓯,虚度终生。

94

主题

4278

回帖

1657

积分

军团长[拿破仑战队队长]

罗德骑士团[KR]
联机ID:KR_ilam

Rank: 6Rank: 6

UID
1791467
第纳尔
6545
精华
1
互助
29
荣誉
10
贡献
0
魅力
105
注册时间
2014-1-24

原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]骑砍中文站微博会员勋章骑砍中文站微信会员勋章元老骑士勋章霸主正版勋章

鲜花(650) 鸡蛋(3)
发表于 2017-11-24 11:04:47 来自手机 | 显示全部楼层
噢噢资瓷资瓷

评分

参与人数 1第纳尔 -10 收起 理由
蛋清 -10 技术区纯水

查看全部评分

224

主题

6034

回帖

2982

积分

男爵[离任版主]

Rank: 5Rank: 5Rank: 5

UID
169987
第纳尔
15231
精华
1
互助
101
荣誉
50
贡献
1605
魅力
252
注册时间
2009-11-28

元老骑士勋章汉匈决战正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之大无畏勋章[杰出会员高级活跃勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之公正勋章[杰出会员高级财富勋章]骑士美德之奉献勋章骑士美德之高贵勋章骑砍中文站微博会员勋章

鲜花(1473) 鸡蛋(56)
发表于 2017-11-24 11:05:40 | 显示全部楼层
本帖最后由 蛋清 于 2017-11-24 11:08 编辑
Rubik:
很早以前发现的坑爹事:

官方论坛上Lav发布的header_operations.py详解里的troop_get_upgrade_troop
troop_get_upgrade_troop                  = 1561  # (troop_get_upgrade_troop, <destination>, <troop_id>, <upgrade_path>),
                                                  # Retrieves possible directions for non-hero troop upgrade. Use 0 to retrieve first upgrade path, and 1 to return second. Result of -1 means there's no such upgrade path for this troop.

官方自带的header_operations.py里的troop_get_upgrade_troop
troop_get_upgrade_troop                = 1561   # (troop_get_upgrade_troop,<destination>,<troop_id>,<upgrade_path>), #upgrade_path can be: 0 = get first node, 1 = get second node (returns -1 if not available)

这两者都说,如果没有后续的升级兵种,就返回-1。按常规来讲,没有找到符合条件的兵种的时候,返回值应该就是-1。 但实测发现,返回的是0(即玩家)。 早期的骑砍版本,仍然根据返回值是否大于-1来判定兵种是否可以升级,结果玩家在村子里招募到XX个玩家,因为顶级兵升级成玩家了。
如果领主有顶级兵,你这可能就会往AI队伍里刷一堆玩家。

107

主题

1514

回帖

726

积分

骑士

大汉虎贲军[DH]
战团ID:jgzh1990

Rank: 4Rank: 4

UID
1233738
第纳尔
4448
精华
0
互助
30
荣誉
9
贡献
10
魅力
407
注册时间
2013-3-16

骑砍中文站APP会员勋章战团正版勋章骑砍中文站微博会员勋章

QQ
鲜花(333) 鸡蛋(0)
 楼主| 发表于 2017-11-24 11:23:50 | 显示全部楼层
本帖最后由 蒋亚军1990 于 2017-11-24 12:27 编辑
蛋清 发表于 2017-11-24 11:05
如果领主有顶级兵,你这可能就会往AI队伍里刷一堆玩家。

感谢蛋清大大,我还真不知道有这事。不过也简单,在那里设一段返回的兵种大于0即可。它最多返回-1或者0,加个限制条件大于0,就不会出现这情况了。已编辑修正
英雄自当冲杀敌阵,马裹尸还;决不可偏安一瓯,虚度终生。

39

主题

5795

回帖

2155

积分

贵族[MOD作者]

高级术士

Rank: 7Rank: 7Rank: 7

UID
523237
第纳尔
38726
精华
0
互助
51
荣誉
15
贡献
1385
魅力
775
注册时间
2011-10-1

骑砍中文站APP会员勋章战团正版勋章拿破仑正版勋章维京征服正版勋章汉匈决战正版勋章骑士美德之忠诚勋章[杰出会员精华勋章]骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之大无畏勋章[杰出会员高级活跃勋章]骑士美德之公正勋章[杰出会员高级财富勋章]骑士美德之奉献勋章骑士美德之高贵勋章元老骑士勋章末日浩劫勋章骑砍中文站微博会员勋章骑砍中文站微信会员勋章骑友真人秀Ⅲ勋章骑友真人秀Ⅷ勋章

鲜花(882) 鸡蛋(0)
发表于 2017-11-24 12:44:42 | 显示全部楼层
这样有点麻烦,你直接给整个部队经验不是更快?

107

主题

1514

回帖

726

积分

骑士

大汉虎贲军[DH]
战团ID:jgzh1990

Rank: 4Rank: 4

UID
1233738
第纳尔
4448
精华
0
互助
30
荣誉
9
贡献
10
魅力
407
注册时间
2013-3-16

骑砍中文站APP会员勋章战团正版勋章骑砍中文站微博会员勋章

QQ
鲜花(333) 鸡蛋(0)
 楼主| 发表于 2017-11-24 12:52:55 来自手机 | 显示全部楼层
本帖最后由 蒋亚军1990 于 2017-11-24 12:54 编辑
小韦飞狼 发表于 2017-11-24 12:44
这样有点麻烦,你直接给整个部队经验不是更快?

给领主部队经验不能进阶士兵吧。我写这个代码是为了进阶,而不是士兵属性提升。比如重弓兵升级为强弓兵,领主又不会主动让士兵进阶。玩家可在升级界面直接点,电脑应该没这AI吧,起码我还没看到。

39

主题

5795

回帖

2155

积分

贵族[MOD作者]

高级术士

Rank: 7Rank: 7Rank: 7

UID
523237
第纳尔
38726
精华
0
互助
51
荣誉
15
贡献
1385
魅力
775
注册时间
2011-10-1

骑砍中文站APP会员勋章战团正版勋章拿破仑正版勋章维京征服正版勋章汉匈决战正版勋章骑士美德之忠诚勋章[杰出会员精华勋章]骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之大无畏勋章[杰出会员高级活跃勋章]骑士美德之公正勋章[杰出会员高级财富勋章]骑士美德之奉献勋章骑士美德之高贵勋章元老骑士勋章末日浩劫勋章骑砍中文站微博会员勋章骑砍中文站微信会员勋章骑友真人秀Ⅲ勋章骑友真人秀Ⅷ勋章

鲜花(882) 鸡蛋(0)
发表于 2017-11-24 18:06:40 | 显示全部楼层
蒋亚军1990 发表于 2017-11-24 12:52
给领主部队经验不能进阶士兵吧。我写这个代码是为了进阶,而不是士兵属性提升。比如重弓兵升级为强弓兵, ...

只要设置了兵种树,给经验就会升级。这个在触发器里边有,好像是每天升级一次。你可以去看看

949

主题

1万

回帖

1万

积分

侯爵[超级版主]

枢机主教

Rank: 8Rank: 8Rank: 8Rank: 8

UID
45575
第纳尔
41708
精华
20
互助
1060
荣誉
584
贡献
1796
魅力
1700
注册时间
2007-10-24

骑砍中文站APP会员勋章元老骑士勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之大无畏勋章[杰出会员高级活跃勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之侠义勋章[杰出会员高级互助勋章]骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之公正勋章[杰出会员高级财富勋章]骑士美德之忠诚勋章[杰出会员精华勋章]骑士美德之正义勋章[杰出会员荣誉勋章]骑士美德之荣耀勋章[杰出会员高级荣誉勋章]骑士美德之圣洁勋章[杰出会员高级精华勋章]杰出汉化小组成员勋章骑士美德之慷慨勋章骑士荣誉之原版汉化勋章骑士荣誉之战团汉化勋章骑士美德之高贵勋章骑士美德之奉献勋章汉匈决战正版勋章

鲜花(2609) 鸡蛋(8)
发表于 2017-11-24 19:52:37 来自手机 | 显示全部楼层
领主带的部队和城堡,城镇里士兵会自动获得经验并升级。只不过升级速度很慢而已。

107

主题

1514

回帖

726

积分

骑士

大汉虎贲军[DH]
战团ID:jgzh1990

Rank: 4Rank: 4

UID
1233738
第纳尔
4448
精华
0
互助
30
荣誉
9
贡献
10
魅力
407
注册时间
2013-3-16

骑砍中文站APP会员勋章战团正版勋章骑砍中文站微博会员勋章

QQ
鲜花(333) 鸡蛋(0)
 楼主| 发表于 2017-11-24 20:33:03 | 显示全部楼层
rubik 发表于 2017-11-24 19:52
领主带的部队和城堡,城镇里士兵会自动获得经验并升级。只不过升级速度很慢而已。

哦哦,我还以为不会升级,主要是看到领主较弱,催他一下,不过我这代码对我也不算多余,里面包含对特定兵种的升级,那些兵种没有兵种树。
英雄自当冲杀敌阵,马裹尸还;决不可偏安一瓯,虚度终生。

168

主题

1815

回帖

1165

积分

贵族[MOD作者]

中级术士

Rank: 7Rank: 7Rank: 7

UID
69266
第纳尔
3592
精华
1
互助
46
荣誉
24
贡献
0
魅力
144
注册时间
2008-2-28

骑砍中文站APP会员勋章有生之年勋章元老骑士勋章战团正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]

QQ
鲜花(401) 鸡蛋(0)
发表于 2017-11-24 23:03:14 | 显示全部楼层
蒋亚军1990 发表于 2017-11-24 20:33
哦哦,我还以为不会升级,主要是看到领主较弱,催他一下,不过我这代码对我也不算多余,里面包 ...

我就是直接 给领主部队加经验,他 自由升级的!

35

主题

474

回帖

158

积分

见习骑士

Rank: 3

UID
868386
第纳尔
2169
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2012-7-1
鲜花(24) 鸡蛋(0)
发表于 2017-11-27 12:38:52 | 显示全部楼层
1、循环所有部队,你列出了城堡、城镇几种类型,除此之外还有野外部队等其他类型,这样的话,":beishu“就没有被定义,猜测会不会挑红字。
2、(store_random_in_range,":suijibz","trp_swadian_wuyingwuwei","trp_swadian_messenger"),这句话会导致trp_swadian_messenger不在范围之内,不知道是不是你的愿意。
3、最后说一句废话,我习惯语句的格式比较严谨一点,每一层try里面的语句缩进2格,try_end之后,缩进取消,多一层try,多一层,这样比较容易理解语句的逻辑。非专业出身,所以不知道怎么形容,看看就好。

107

主题

1514

回帖

726

积分

骑士

大汉虎贲军[DH]
战团ID:jgzh1990

Rank: 4Rank: 4

UID
1233738
第纳尔
4448
精华
0
互助
30
荣誉
9
贡献
10
魅力
407
注册时间
2013-3-16

骑砍中文站APP会员勋章战团正版勋章骑砍中文站微博会员勋章

QQ
鲜花(333) 鸡蛋(0)
 楼主| 发表于 2017-11-27 14:33:37 来自手机 | 显示全部楼层
本帖最后由 蒋亚军1990 于 2017-11-27 14:34 编辑
orc747 发表于 2017-11-27 12:38
1、循环所有部队,你列出了城堡、城镇几种类型,除此之外还有野外部队等其他类型,这样的话,":beishu“就 ...

你是刚学吧,你说的问题都不会出现,第一个就不说了,因为我只想要驻军和领主部队升级,系统只会判断这两种部队,其他部队不列入考虑范围。你说的第二个就是你的问题了,难道你看不出那个兵种是信使吗?每个mod都有那个兵种,你会把信使拿去升级?第三个缩进字符那是习惯,而我比较随意,懒得每行打空格,那习惯确实你的比较好。请考虑清楚再留言,你好几次在帖子留言说的情况都是自己没搞懂。

35

主题

474

回帖

158

积分

见习骑士

Rank: 3

UID
868386
第纳尔
2169
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2012-7-1
鲜花(24) 鸡蛋(0)
发表于 2017-11-28 09:19:28 | 显示全部楼层
蒋亚军1990 发表于 2017-11-27 14:33
你是刚学吧,你说的问题都不会出现,第一个就不说了,因为我只想要驻军和领主部队升级,系统只会判断这两 ...

虽然在下不才,但是学习PY也有一段时间了,本想和你讨论一下程序,何必如此咄咄逼人。
1、循环所有部队,我知道你只要驻军和领主部队升级,但是程序不知道,程序还是会循环到其他队伍类型的,我只是建议你完善,比如你可以加一个判断,类型是spt_castle、spt_castle、spt_kingdom_hero_party在执行之后的语句。另外说一句,你写的spt_caravan就我所知是商队不是领主部队,而你最后一个else_try之后把所有包括王国领主部队和农夫部队一起包括在内,我认为这应该不是你原来的想法。
2、第二个问题我的确不知道他是信使,我也只是疑问,如果的确没必要,无视就行了。
3、第三个就个人习惯了。

35

主题

474

回帖

158

积分

见习骑士

Rank: 3

UID
868386
第纳尔
2169
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2012-7-1
鲜花(24) 鸡蛋(0)
发表于 2017-11-28 09:28:35 | 显示全部楼层
(store_random_in_range,":suijis",0,2),   #随机取0或者1
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;(troop_get_upgrade_troop,":sjbingzhong",":bingzhong",":suijis"),  #获取:bingzhong第一个或者第二个的升级兵种 &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
          (ge,":sjbingzhong",1), #如果这个升级兵种大于1
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; (party_add_members, ":suoyoubudui", ":sjbingzhong", ":sjizs"),#增加升级兵种
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; (party_remove_members, ":suoyoubudui",":bingzhong", ":sjizs"),#减去原来兵种

我建议你这段改一下,如果某个兵种只有一个升级兵种,而你的随机刚好随机到1,(troop_get_upgrade_troop,":sjbingzhong",":bingzhong",":suijis"),  这段代码执行出来的升级兵种就没办法执行之后的语句,导致这个兵种没有升级,造成了一点瑕疵,我不知道你是否可以理解,我的代码是这样,你可以参考。

  # script_upgrade_troop
  # Input: arg1 = troop_no
  # Output: reg0 = upgrade_troop
  ("upgrade_troop",
    [
      (store_script_param_1,":troop_no"),
          (assign,":new_troop",":troop_no"),
      (store_random_in_range, ":random_no", 0, 2),
      (troop_get_upgrade_troop,":upgrade_troop_no",":troop_no",":random_no"),
      (try_begin),
        (le,":upgrade_troop_no",0),
        (troop_get_upgrade_troop, ":upgrade_troop_no",":troop_no",0),
      (try_end),
          (try_begin),
        (gt,":upgrade_troop_no",0),
        (assign,":new_troop",":upgrade_troop_no"),
          (try_end),
      (assign,reg0,":new_troop"),
  ]),

107

主题

1514

回帖

726

积分

骑士

大汉虎贲军[DH]
战团ID:jgzh1990

Rank: 4Rank: 4

UID
1233738
第纳尔
4448
精华
0
互助
30
荣誉
9
贡献
10
魅力
407
注册时间
2013-3-16

骑砍中文站APP会员勋章战团正版勋章骑砍中文站微博会员勋章

QQ
鲜花(333) 鸡蛋(0)
 楼主| 发表于 2017-11-28 10:16:22 来自手机 | 显示全部楼层
orc747 发表于 2017-11-28 09:19
虽然在下不才,但是学习PY也有一段时间了,本想和你讨论一下程序,何必如此咄咄逼人。
1、循环所有部队 ...

好吧,语气重了,第二个领主部队是我弄错了,我写代码时就看了一下前面,以为种类就三种,没想到后面还有那么多分类。但是我最后一个else_try是想把其他种类都包括,设倍数为0,也就是说其他种类部队不会升级兵种。有时间我再改吧,不过这段代码没多大用处,上面版主们都说过了,完全是多余的。

1

主题

18

回帖

6

积分

平民

Rank: 1

UID
2894955
第纳尔
21
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2017-11-11

汉匈决战正版勋章

鲜花(1) 鸡蛋(0)
发表于 2017-12-8 08:41:46 | 显示全部楼层
看你们讨论那么激烈,我也想参与,可惜我不会,羡慕

0

主题

8

回帖

2

积分

平民

Rank: 1

UID
2984296
第纳尔
64
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2018-2-21
鲜花(0) 鸡蛋(0)
发表于 2018-2-25 19:53:07 | 显示全部楼层
这个代码放在那个文件里面

949

主题

1万

回帖

1万

积分

侯爵[超级版主]

枢机主教

Rank: 8Rank: 8Rank: 8Rank: 8

UID
45575
第纳尔
41708
精华
20
互助
1060
荣誉
584
贡献
1796
魅力
1700
注册时间
2007-10-24

骑砍中文站APP会员勋章元老骑士勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之大无畏勋章[杰出会员高级活跃勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之侠义勋章[杰出会员高级互助勋章]骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之公正勋章[杰出会员高级财富勋章]骑士美德之忠诚勋章[杰出会员精华勋章]骑士美德之正义勋章[杰出会员荣誉勋章]骑士美德之荣耀勋章[杰出会员高级荣誉勋章]骑士美德之圣洁勋章[杰出会员高级精华勋章]杰出汉化小组成员勋章骑士美德之慷慨勋章骑士荣誉之原版汉化勋章骑士荣誉之战团汉化勋章骑士美德之高贵勋章骑士美德之奉献勋章汉匈决战正版勋章

鲜花(2609) 鸡蛋(8)
发表于 2018-2-26 01:16:09 | 显示全部楼层
本帖最后由 rubik 于 2018-2-26 01:18 编辑

抽几分钟找到了Native里面升级AI部队的代码了,在module_simple_triggers.py里面,外在形式是一个48小时触发一次的触发器。
前半截是对AI领主部队进行升级,后半截是对AI领主的城堡/城镇进行升级。顶楼的代码,功能重复不说,还写得蹩脚和繁琐。

Native的这段代码,高明的地方就在于把循环范围控制到最小,从而提升了执行效率。比如领主部队,不是基于party,而是基于troop,因为所有可能成为领主的troop都在一个连续的范围内,是需要判断这个范围的troop,当前的身份是不是王国英雄。至于升级领主部队,直接一句party_upgrade_with_xp就搞定。嫌给的经验太少,直接把给的经验调高就行了。完全不必涉及到具体的阵营,也不必涉及到具体的兵种。
party_upgrade_with_xp本身的作用就是把XXX点经验分配给部队的所有兵种,然后能升级的就升级。兵种在这里的升级就是进阶,不是像英雄那样一级一级地升级。所以根本不需要什么移除低阶兵种,再增加相同数量的高一阶兵种。而且兵种进阶所需的经验早就在module_scripts.py里定义好了,越高等级,需要的经验越多,也就无需再写各兵种进阶分别需要多少经验。

城堡和城镇的循环就更简单了,因为城堡和城镇的party ID是静态的,且是完全连续的。直接(try_for_range, ":center_no", walled_centers_begin, walled_centers_end),就搞定,根本不需要从所有的party里面,根据slot_party_type来把城堡和城镇筛出来。同样的,嫌给的经验太少,直接把给的经验调高就行了。

  # Give some xp to hero parties
   (48,
   [      
       (try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
         (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),                          
                     
         (troop_get_slot, ":hero_party", ":troop_no", slot_troop_leaded_party),
         (gt, ":hero_party", centers_end),
         (party_is_active, ":hero_party"),
         
         (store_skill_level, ":trainer_level", skl_trainer, ":troop_no"),                  
         (val_add, ":trainer_level", 5), #average trainer level is 3 for npc lords, worst : 0, best : 6
         (store_mul, ":xp_gain", ":trainer_level", 1000), #xp gain in two days of period for each lord, average : 8000.
         
         (assign, ":max_accepted_random_value", 30),
         (try_begin),               
           (store_troop_faction, ":cur_troop_faction", ":troop_no"),
           (neq, ":cur_troop_faction", "$players_kingdom"),
           
           (game_get_reduce_campaign_ai, ":reduce_campaign_ai"),
           (try_begin),
             (eq, ":reduce_campaign_ai", 0), #hard (1.5x)
             (assign, ":max_accepted_random_value", 35),
             (val_mul, ":xp_gain", 3),
             (val_div, ":xp_gain", 2),
           (else_try),
             (eq, ":reduce_campaign_ai", 2), #easy (0.5x)
             (assign, ":max_accepted_random_value", 25),
             (val_div, ":xp_gain", 2),
           (try_end),
         (try_end),
         
         (store_random_in_range, ":rand", 0, 100),
         (le, ":rand", ":max_accepted_random_value"),

         (party_upgrade_with_xp, ":hero_party", ":xp_gain"),
       (try_end),
      
       (try_for_range, ":center_no", walled_centers_begin, walled_centers_end),         
         (party_get_slot, ":center_lord", ":center_no", slot_town_lord),
         (neq, ":center_lord", "trp_player"),
         
         (assign, ":xp_gain", 3000), #xp gain in two days of period for each center, average : 3000.
         
         (assign, ":max_accepted_random_value", 30),
         (try_begin),            
           (assign, ":cur_center_lord_faction", -1),
           (try_begin),
             (ge, ":center_lord", 0),
             (store_troop_faction, ":cur_center_lord_faction", ":center_lord"),
           (try_end),            
           (neq, ":cur_center_lord_faction", "$players_kingdom"),
           
           (game_get_reduce_campaign_ai, ":reduce_campaign_ai"),
           (try_begin),
             (eq, ":reduce_campaign_ai", 0), #hard (1.5x)
             (assign, ":max_accepted_random_value", 35),
             (val_mul, ":xp_gain", 3),
             (val_div, ":xp_gain", 2),
           (else_try),
             (eq, ":reduce_campaign_ai", 2), #easy (0.5x)
             (assign, ":max_accepted_random_value", 25),
             (val_div, ":xp_gain", 2),
           (try_end),
         (try_end),

         (store_random_in_range, ":rand", 0, 100),
         (le, ":rand", ":max_accepted_random_value"),
         
         (party_upgrade_with_xp, ":center_no", ":xp_gain"),
       (try_end),
    ]),

rubik

0

主题

79

回帖

24

积分

随仆

Rank: 1

UID
519757
第纳尔
179
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2011-9-25

战团正版勋章霸主正版勋章

鲜花(0) 鸡蛋(0)
发表于 2019-4-26 10:12:11 | 显示全部楼层
不懂不懂,我就是来看看
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-12-28 04:10 , Processed in 0.179816 second(s), 38 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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