How to Use#
下面我们将介绍如何使用这个项目. 我们假设我们刚来到一个 WotLK 巫妖王之怒版本的服务器, 我们建立了 5 个游戏账号, 每个账号上有 1 个角色, 它们分别是一个 防护/惩戒 (主防护) 骑士, 三个 元素/恢复 (主元素) 萨满, 一个 元素/恢复 (主恢复) 的萨满.
Note
这个项目支持多个不同的 WOW 版本, 因为它们的客户端 WTF 目录结构大同小异. 虽然这篇文档是以人气较高的 WotLK 版本为例, 但是你在使用其他版本时依然可以参考本文.
Note
在 wow_sdm/tests/exp03_wotlk 目录有一个完整的如何使用这个库项目来管理你的宏命令的例子. 请在阅读本文时跟这个例子互相印证.
1. Account and Character Configuration#
首先你要枚举你的账号和角色.
我们在 acc_dataset.yml 文件中定义了我们的游戏账号和角色.
wow_sdm/tests/exp03_wotlk/acc_dataset.yml
1acc01:
2 realm1:
3 - mypaladin
4acc02:
5 realm1:
6 - myshaman1
7acc03:
8 realm1:
9 - myshaman2
10acc04:
11 realm1:
12 - myshaman3
13acc05:
14 realm1:
15 - myshaman4
然后我们编写了一个 acc_dataset.py 脚本用于生成对所有账号和角色的 enum 模块.
wow_sdm/tests/exp03_wotlk/acc_dataset.py
1# -*- coding: utf-8 -*-
2
3from pathlib_mate import Path
4from wow_acc.api import Dataset
5
6dir_here = Path(__file__).absolute().parent
7ds = Dataset.from_yaml(dir_here.joinpath("acc_dataset.yml").read_text())
8
9if __name__ == "__main__":
10 path = dir_here.joinpath("acc_enum.py")
11 content = ds.to_module(
12 import_line="from wow_sdm.tests.exp03_wotlk.acc_dataset import ds",
13 )
14 path.write_text(content)
现在我们就得到了一个可以用 Python 变量引用我们的账号和角色的 acc_enum.py 模块了.
wow_sdm/tests/exp03_wotlk/acc_enum.py
1# -*- coding: utf-8 -*-
2
3from wow_sdm.tests.exp03_wotlk.acc_dataset import ds
4
5
6# fmt: off
7class AccountEnum:
8 acc01 = ds.accounts["acc01"]
9 acc02 = ds.accounts["acc02"]
10 acc03 = ds.accounts["acc03"]
11 acc04 = ds.accounts["acc04"]
12 acc05 = ds.accounts["acc05"]
13
14
15class RealmEnum:
16 acc01_realm1 = ds.accounts["acc01"].realms_mapper["realm1"]
17 acc02_realm1 = ds.accounts["acc02"].realms_mapper["realm1"]
18 acc03_realm1 = ds.accounts["acc03"].realms_mapper["realm1"]
19 acc04_realm1 = ds.accounts["acc04"].realms_mapper["realm1"]
20 acc05_realm1 = ds.accounts["acc05"].realms_mapper["realm1"]
21
22
23class CharacterEnum:
24 acc01_realm1_mypaladin = ds.accounts["acc01"].realms_mapper["realm1"].characters_mapper["mypaladin"]
25 acc02_realm1_myshaman1 = ds.accounts["acc02"].realms_mapper["realm1"].characters_mapper["myshaman1"]
26 acc03_realm1_myshaman2 = ds.accounts["acc03"].realms_mapper["realm1"].characters_mapper["myshaman2"]
27 acc04_realm1_myshaman3 = ds.accounts["acc04"].realms_mapper["realm1"].characters_mapper["myshaman3"]
28 acc05_realm1_myshaman4 = ds.accounts["acc05"].realms_mapper["realm1"].characters_mapper["myshaman4"]
29# fmt: on
更进一步地, 你可以按照逻辑对这些账号和角色的 enum 进行分组, 这样在之后引用的时候就可以批量引用而不用一个个的手打了. acc_group.py 模块是一个很好的例子.
wow_sdm/tests/exp03_wotlk/acc_group.py
1# -*- coding: utf-8 -*-
2
3"""
4This module can help you organize your enum into group, made it easier to
5construct mappings later.
6"""
7
8from wow_sdm.api import get_values
9from wow_sdm.tests.exp03_wotlk.acc_enum import AccountEnum, CharacterEnum
10
11
12# ==============================================================================
13# START of manual editing
14# ==============================================================================
15class AccountGroupEnum:
16 all_accounts = get_values(AccountEnum)
17
18
19class CharacterGroupEnum:
20 all_characters = get_values(CharacterEnum)
21
22 paladin_protect_retri = [
23 CharacterEnum.acc01_realm1_mypaladin,
24 ]
25
26 shaman_elemental_resto = [
27 CharacterEnum.acc02_realm1_myshaman1,
28 CharacterEnum.acc03_realm1_myshaman2,
29 CharacterEnum.acc04_realm1_myshaman3,
30 CharacterEnum.acc05_realm1_myshaman4,
31 ]
32
33
34# ==============================================================================
35# END of manual editing
36# ==============================================================================
2. Craft Your Macro Catalogs#
下面我们就会开始编写一个非常庞大的宏命令库了.
exp03_wotlk/sdm_macros 目录下有一些 YAML 文件和文件夹. 每个 YAML 文件就是一个宏命令. 例如在 02-paladin/1-protect-retri/11305-rotation-zhCN.yml 就是一个 防护/惩戒 骑士的输出循环宏.
02-paladin/1-protect-retri/11305-rotation-zhCN.yml
1name: Rotation
2character:
3 name:
4 realm:
5type: b
6id: 11305
7icon:
8description: |
9 防骑 / 惩戒骑 的一键宏循环.
10text: |
11 #showtooltip
12 /startattack
13 /castsequence [spec:1] reset=10 正义之锤,正义盾击,智慧审判,神圣之盾,正义之锤,正义盾击,智慧审判,正义之锤,正义盾击,神圣之盾
14 /castsequence [spec:2] reset=10 智慧审判,十字军打击,神圣风暴,奉献,十字军打击,智慧审判,驱邪术,十字军打击,神圣风暴,十字军打击
这个目录结构只是我认为最合理的结构, 你可以使用你喜欢的任何目录结构. 不过我在 exp03_wotlk/sdm_macros/README.rst 文件中详细阐述了我的目录结构为什么这样设计. 我建议你查看 exp03_wotlk/sdm_macros 里的 yaml 文件, 学习了解之后再考虑设计你自己的目录结构.
3. Generate Macro Enum Module#
和 1. Account and Character Configuration 类似, 我们也要将我们的宏命令转化成一个 Python 模块, 使得每一个宏命令文件都是一个 enum.
我们编写了一个 sdm_dataset.py 脚本用于生成对所有配置文件的 enum 模块.
wow_sdm/tests/exp03_wotlk/sdm_dataset.py
1# -*- coding: utf-8 -*-
2
3from pathlib_mate import Path
4from wow_sdm.api import exp03_wotlk
5
6dir_here = Path.dir_here(__file__)
7dir_root = dir_here.joinpath("sdm_macros")
8
9if __name__ == "__main__":
10 content = exp03_wotlk.to_module(
11 dir_root=dir_root,
12 import_dir_root_line="from .sdm_dataset import dir_root",
13 )
14 dir_here.joinpath("sdm_enum.py").write_text(content, encoding="utf-8")
现在我们就得到了一个可以用 Python 变量引用我们的配置文件的 sdm_enum.py 模块了.
wow_sdm/tests/exp03_wotlk/sdm_enum.py
1# -*- coding: utf-8 -*-
2
3from wow_sdm.tests.exp03_wotlk.sdm_dataset import dir_root
4
5# fmt: off
6class MacroEnum:
7 f_00_common__1001_respawn = dir_root.joinpath("00-common", "1001-respawn.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1001-respawn.yml
8 f_00_common__1002_feigh_death = dir_root.joinpath("00-common", "1002-feigh-death.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1002-feigh-death.yml
9 f_00_common__1003_reset_cooldown = dir_root.joinpath("00-common", "1003-reset-cooldown.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1003-reset-cooldown.yml
10 f_00_common__1004_ice_block = dir_root.joinpath("00-common", "1004-ice-block.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1004-ice-block.yml
11 f_00_common__1005_resurrection = dir_root.joinpath("00-common", "1005-resurrection.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1005-resurrection.yml
12 f_00_common__1006_invisibility = dir_root.joinpath("00-common", "1006-invisibility.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1006-invisibility.yml
13 f_00_common__1007_unbind_instance = dir_root.joinpath("00-common", "1007-unbind-instance.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1007-unbind-instance.yml
14 f_00_common__1008_fly_up = dir_root.joinpath("00-common", "1008-fly-up.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1008-fly-up.yml
15 f_00_common__1009_fly_down = dir_root.joinpath("00-common", "1009-fly-down.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1009-fly-down.yml
16 f_00_common__1010_x32_speed = dir_root.joinpath("00-common", "1010-x32-speed.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1010-x32-speed.yml
17 f_00_common__1011_MountUp_zhCN = dir_root.joinpath("00-common", "1011-MountUp-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1011-MountUp-zhCN.yml
18 f_00_common__1011_MountUp_zhTW = dir_root.joinpath("00-common", "1011-MountUp-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1011-MountUp-zhTW.yml
19 f_00_common__1012_MountDown_zhCN = dir_root.joinpath("00-common", "1012-MountDown-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1012-MountDown-zhCN.yml
20 f_00_common__1012_MountDown_zhTW = dir_root.joinpath("00-common", "1012-MountDown-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1012-MountDown-zhTW.yml
21 f_00_common__1101_target_party = dir_root.joinpath("00-common", "1101-target-party.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1101-target-party.yml
22 f_00_common__1102_target_raid = dir_root.joinpath("00-common", "1102-target-raid.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1102-target-raid.yml
23 f_00_common__1103_target_focus_target = dir_root.joinpath("00-common", "1103-target-focus-target.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1103-target-focus-target.yml
24 f_00_common__1104_target_focus_target_target = dir_root.joinpath("00-common", "1104-target-focus-target-target.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1104-target-focus-target-target.yml
25 f_00_common__1105_confirm = dir_root.joinpath("00-common", "1105-confirm.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1105-confirm.yml
26 f_00_common__1106_set_focus = dir_root.joinpath("00-common", "1106-set-focus.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1106-set-focus.yml
27 f_00_common__1107_clear_focus = dir_root.joinpath("00-common", "1107-clear-focus.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1107-clear-focus.yml
28 f_00_common__1108_set_high_fps = dir_root.joinpath("00-common", "1108-set-high-fps.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1108-set-high-fps.yml
29 f_00_common__1109_set_low_fps = dir_root.joinpath("00-common", "1109-set-low-fps.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1109-set-low-fps.yml
30 f_00_common__1110_follow_focus = dir_root.joinpath("00-common", "1110-follow-focus.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1110-follow-focus.yml
31 f_00_common__1131_target_window_01 = dir_root.joinpath("00-common", "1131-target-window-01.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1131-target-window-01.yml
32 f_00_common__1132_target_window_10 = dir_root.joinpath("00-common", "1132-target-window-10.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1132-target-window-10.yml
33 f_00_common__1151_invite_raid = dir_root.joinpath("00-common", "1151-invite-raid.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1151-invite-raid.yml
34 f_00_common__1152_leave_raid = dir_root.joinpath("00-common", "1152-leave-raid.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1152-leave-raid.yml
35 f_00_common__1153_summon = dir_root.joinpath("00-common", "1153-summon.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1153-summon.yml
36 f_00_common__1171_tele_darnassus = dir_root.joinpath("00-common", "1171-tele-darnassus.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1171-tele-darnassus.yml
37 f_00_common__1172_tele_ironforge = dir_root.joinpath("00-common", "1172-tele-ironforge.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1172-tele-ironforge.yml
38 f_00_common__1173_tele_orgrimmar = dir_root.joinpath("00-common", "1173-tele-orgrimmar.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1173-tele-orgrimmar.yml
39 f_00_common__1174_tele_undercity = dir_root.joinpath("00-common", "1174-tele-undercity.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1174-tele-undercity.yml
40 f_00_common__1175_tele_shattrath = dir_root.joinpath("00-common", "1175-tele-shattrath.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1175-tele-shattrath.yml
41 f_00_common__1176_tele_dalaran = dir_root.joinpath("00-common", "1176-tele-dalaran.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/1176-tele-dalaran.yml
42 f_00_common__2001_buff_physics_dps_lv60 = dir_root.joinpath("00-common", "2001-buff-physics-dps-lv60.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/2001-buff-physics-dps-lv60.yml
43 f_00_common__2001_buff_physics_dps = dir_root.joinpath("00-common", "2001-buff-physics-dps.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/2001-buff-physics-dps.yml
44 f_00_common__2002_buff_caster_dps_lv60 = dir_root.joinpath("00-common", "2002-buff-caster-dps-lv60.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/2002-buff-caster-dps-lv60.yml
45 f_00_common__2002_buff_caster_dps = dir_root.joinpath("00-common", "2002-buff-caster-dps.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/2002-buff-caster-dps.yml
46 f_00_common__2003_buff_tank_lv60 = dir_root.joinpath("00-common", "2003-buff-tank-lv60.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/2003-buff-tank-lv60.yml
47 f_00_common__2003_buff_tank = dir_root.joinpath("00-common", "2003-buff-tank.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/2003-buff-tank.yml
48 f_00_common__2004_buff_healer_lv60 = dir_root.joinpath("00-common", "2004-buff-healer-lv60.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/2004-buff-healer-lv60.yml
49 f_00_common__2004_buff_healer = dir_root.joinpath("00-common", "2004-buff-healer.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/2004-buff-healer.yml
50 f_00_common__6001_mb_special1 = dir_root.joinpath("00-common", "6001-mb-special1.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/6001-mb-special1.yml
51 f_00_common__6002_mb_special2 = dir_root.joinpath("00-common", "6002-mb-special2.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/6002-mb-special2.yml
52 f_00_common__6003_mb_special3 = dir_root.joinpath("00-common", "6003-mb-special3.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/00-common/6003-mb-special3.yml
53 f_02_paladin__0_common__11101_consumable = dir_root.joinpath("02-paladin", "0-common", "11101-consumable.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/11101-consumable.yml
54 f_02_paladin__0_common__11111_clear_debuff_zhCN = dir_root.joinpath("02-paladin", "0-common", "11111-clear-debuff-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/11111-clear-debuff-zhCN.yml
55 f_02_paladin__0_common__11111_clear_debuff_zhTW = dir_root.joinpath("02-paladin", "0-common", "11111-clear-debuff-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/11111-clear-debuff-zhTW.yml
56 f_02_paladin__0_common__11112_raid_divine_sacrifice_zhCN = dir_root.joinpath("02-paladin", "0-common", "11112-raid-divine-sacrifice-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/11112-raid-divine-sacrifice-zhCN.yml
57 f_02_paladin__0_common__11112_raid_divine_sacrifice_zhTW = dir_root.joinpath("02-paladin", "0-common", "11112-raid-divine-sacrifice-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/11112-raid-divine-sacrifice-zhTW.yml
58 f_02_paladin__0_common__11131_protect_rotation_zhCN = dir_root.joinpath("02-paladin", "0-common", "11131-protect-rotation-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/11131-protect-rotation-zhCN.yml
59 f_02_paladin__0_common__11131_protect_rotation_zhTW = dir_root.joinpath("02-paladin", "0-common", "11131-protect-rotation-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/11131-protect-rotation-zhTW.yml
60 f_02_paladin__0_common__11132_retribution_rotation_zhCN = dir_root.joinpath("02-paladin", "0-common", "11132-retribution-rotation-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/11132-retribution-rotation-zhCN.yml
61 f_02_paladin__0_common__11132_retribution_rotation_zhTW = dir_root.joinpath("02-paladin", "0-common", "11132-retribution-rotation-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/11132-retribution-rotation-zhTW.yml
62 f_02_paladin__0_common__11133_holy_rotation_zhCN = dir_root.joinpath("02-paladin", "0-common", "11133-holy-rotation-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/11133-holy-rotation-zhCN.yml
63 f_02_paladin__0_common__11133_holy_rotation_zhTW = dir_root.joinpath("02-paladin", "0-common", "11133-holy-rotation-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/11133-holy-rotation-zhTW.yml
64 f_02_paladin__0_common__27171_high_int_heal_rotation_zhCN = dir_root.joinpath("02-paladin", "0-common", "27171-high-int-heal-rotation-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/27171-high-int-heal-rotation-zhCN.yml
65 f_02_paladin__0_common__27171_high_int_heal_rotation_zhTW = dir_root.joinpath("02-paladin", "0-common", "27171-high-int-heal-rotation-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/27171-high-int-heal-rotation-zhTW.yml
66 f_02_paladin__0_common__27172_high_crt_heal_rotation_zhCN = dir_root.joinpath("02-paladin", "0-common", "27172-high-crt-heal-rotation-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/27172-high-crt-heal-rotation-zhCN.yml
67 f_02_paladin__0_common__27172_high_crt_heal_rotation_zhTW = dir_root.joinpath("02-paladin", "0-common", "27172-high-crt-heal-rotation-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/0-common/27172-high-crt-heal-rotation-zhTW.yml
68 f_02_paladin__1_protect_retri__11301_act1_zhCN = dir_root.joinpath("02-paladin", "1-protect-retri", "11301-act1-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11301-act1-zhCN.yml
69 f_02_paladin__1_protect_retri__11301_act1_zhTW = dir_root.joinpath("02-paladin", "1-protect-retri", "11301-act1-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11301-act1-zhTW.yml
70 f_02_paladin__1_protect_retri__11302_act2_zhCN = dir_root.joinpath("02-paladin", "1-protect-retri", "11302-act2-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11302-act2-zhCN.yml
71 f_02_paladin__1_protect_retri__11302_act2_zhTW = dir_root.joinpath("02-paladin", "1-protect-retri", "11302-act2-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11302-act2-zhTW.yml
72 f_02_paladin__1_protect_retri__11303_act3_zhCN = dir_root.joinpath("02-paladin", "1-protect-retri", "11303-act3-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11303-act3-zhCN.yml
73 f_02_paladin__1_protect_retri__11303_act3_zhTW = dir_root.joinpath("02-paladin", "1-protect-retri", "11303-act3-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11303-act3-zhTW.yml
74 f_02_paladin__1_protect_retri__11304_act4_zhCN = dir_root.joinpath("02-paladin", "1-protect-retri", "11304-act4-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11304-act4-zhCN.yml
75 f_02_paladin__1_protect_retri__11304_act4_zhTW = dir_root.joinpath("02-paladin", "1-protect-retri", "11304-act4-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11304-act4-zhTW.yml
76 f_02_paladin__1_protect_retri__11305_rotation_zhCN = dir_root.joinpath("02-paladin", "1-protect-retri", "11305-rotation-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11305-rotation-zhCN.yml
77 f_02_paladin__1_protect_retri__11305_rotation_zhTW = dir_root.joinpath("02-paladin", "1-protect-retri", "11305-rotation-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11305-rotation-zhTW.yml
78 f_02_paladin__1_protect_retri__11311_buff_self_alliance_zhCN = dir_root.joinpath("02-paladin", "1-protect-retri", "11311-buff-self-alliance-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11311-buff-self-alliance-zhCN.yml
79 f_02_paladin__1_protect_retri__11311_buff_self_alliance_zhTW = dir_root.joinpath("02-paladin", "1-protect-retri", "11311-buff-self-alliance-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11311-buff-self-alliance-zhTW.yml
80 f_02_paladin__1_protect_retri__11311_buff_self_horde_zhCN = dir_root.joinpath("02-paladin", "1-protect-retri", "11311-buff-self-horde-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11311-buff-self-horde-zhCN.yml
81 f_02_paladin__1_protect_retri__11311_buff_self_horde_zhTW = dir_root.joinpath("02-paladin", "1-protect-retri", "11311-buff-self-horde-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/1-protect-retri/11311-buff-self-horde-zhTW.yml
82 f_02_paladin__3_holy_protect__11711_act1_zhCN = dir_root.joinpath("02-paladin", "3-holy-protect", "11711-act1-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/3-holy-protect/11711-act1-zhCN.yml
83 f_02_paladin__3_holy_protect__11711_act1_zhTW = dir_root.joinpath("02-paladin", "3-holy-protect", "11711-act1-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/3-holy-protect/11711-act1-zhTW.yml
84 f_02_paladin__3_holy_protect__11712_act2_zhCN = dir_root.joinpath("02-paladin", "3-holy-protect", "11712-act2-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/3-holy-protect/11712-act2-zhCN.yml
85 f_02_paladin__3_holy_protect__11712_act2_zhTW = dir_root.joinpath("02-paladin", "3-holy-protect", "11712-act2-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/3-holy-protect/11712-act2-zhTW.yml
86 f_02_paladin__3_holy_protect__11731_buff_self_alliance_zhCN = dir_root.joinpath("02-paladin", "3-holy-protect", "11731-buff-self-alliance-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/3-holy-protect/11731-buff-self-alliance-zhCN.yml
87 f_02_paladin__3_holy_protect__11731_buff_self_alliance_zhTW = dir_root.joinpath("02-paladin", "3-holy-protect", "11731-buff-self-alliance-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/3-holy-protect/11731-buff-self-alliance-zhTW.yml
88 f_02_paladin__3_holy_protect__11731_buff_self_horde_zhCN = dir_root.joinpath("02-paladin", "3-holy-protect", "11731-buff-self-horde-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/3-holy-protect/11731-buff-self-horde-zhCN.yml
89 f_02_paladin__3_holy_protect__11731_buff_self_horde_zhTW = dir_root.joinpath("02-paladin", "3-holy-protect", "11731-buff-self-horde-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/3-holy-protect/11731-buff-self-horde-zhTW.yml
90 f_02_paladin__3_holy_protect__11751_mb_periodical_beacon_zhCN = dir_root.joinpath("02-paladin", "3-holy-protect", "11751-mb-periodical-beacon-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/3-holy-protect/11751-mb-periodical-beacon-zhCN.yml
91 f_02_paladin__3_holy_protect__11751_mb_periodical_beacon_zhTW = dir_root.joinpath("02-paladin", "3-holy-protect", "11751-mb-periodical-beacon-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/3-holy-protect/11751-mb-periodical-beacon-zhTW.yml
92 f_02_paladin__3_holy_protect__11752_mb_periodical_judgement_zhCN = dir_root.joinpath("02-paladin", "3-holy-protect", "11752-mb-periodical-judgement-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/3-holy-protect/11752-mb-periodical-judgement-zhCN.yml
93 f_02_paladin__3_holy_protect__11752_mb_periodical_judgement_zhTW = dir_root.joinpath("02-paladin", "3-holy-protect", "11752-mb-periodical-judgement-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/02-paladin/3-holy-protect/11752-mb-periodical-judgement-zhTW.yml
94 f_05_shaman__0_common__14101_consumable = dir_root.joinpath("05-shaman", "0-common", "14101-consumable.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/0-common/14101-consumable.yml
95 f_05_shaman__0_common__14102_interrupt_zhCN = dir_root.joinpath("05-shaman", "0-common", "14102-interrupt-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/0-common/14102-interrupt-zhCN.yml
96 f_05_shaman__0_common__14102_interrupt_zhTW = dir_root.joinpath("05-shaman", "0-common", "14102-interrupt-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/0-common/14102-interrupt-zhTW.yml
97 f_05_shaman__0_common__14111_elemental_rotation_lv60_zhCN = dir_root.joinpath("05-shaman", "0-common", "14111-elemental-rotation-lv60-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/0-common/14111-elemental-rotation-lv60-zhCN.yml
98 f_05_shaman__0_common__14111_elemental_rotation_zhCN = dir_root.joinpath("05-shaman", "0-common", "14111-elemental-rotation-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/0-common/14111-elemental-rotation-zhCN.yml
99 f_05_shaman__0_common__14111_elemental_rotation_zhTW = dir_root.joinpath("05-shaman", "0-common", "14111-elemental-rotation-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/0-common/14111-elemental-rotation-zhTW.yml
100 f_05_shaman__0_common__14112_resto_rotation_zhCN = dir_root.joinpath("05-shaman", "0-common", "14112-resto-rotation-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/0-common/14112-resto-rotation-zhCN.yml
101 f_05_shaman__0_common__14112_resto_rotation_zhTW = dir_root.joinpath("05-shaman", "0-common", "14112-resto-rotation-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/0-common/14112-resto-rotation-zhTW.yml
102 f_05_shaman__0_common__14113_enhancement_rotation_zhCN = dir_root.joinpath("05-shaman", "0-common", "14113-enhancement-rotation-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/0-common/14113-enhancement-rotation-zhCN.yml
103 f_05_shaman__0_common__14113_enhancement_rotation_zhTW = dir_root.joinpath("05-shaman", "0-common", "14113-enhancement-rotation-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/0-common/14113-enhancement-rotation-zhTW.yml
104 f_05_shaman__0_common__14114_mb_resto_earth_shield_zhCN = dir_root.joinpath("05-shaman", "0-common", "14114-mb-resto-earth-shield-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/0-common/14114-mb-resto-earth-shield-zhCN.yml
105 f_05_shaman__0_common__14114_mb_resto_earth_shield_zhTW = dir_root.joinpath("05-shaman", "0-common", "14114-mb-resto-earth-shield-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/0-common/14114-mb-resto-earth-shield-zhTW.yml
106 f_05_shaman__1_elemental_resto__14311_buff_self_zhCN = dir_root.joinpath("05-shaman", "1-elemental-resto", "14311-buff-self-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/1-elemental-resto/14311-buff-self-zhCN.yml
107 f_05_shaman__1_elemental_resto__14311_buff_self_zhTW = dir_root.joinpath("05-shaman", "1-elemental-resto", "14311-buff-self-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/1-elemental-resto/14311-buff-self-zhTW.yml
108 f_05_shaman__1_elemental_resto__14312_burst_zhCN = dir_root.joinpath("05-shaman", "1-elemental-resto", "14312-burst-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/1-elemental-resto/14312-burst-zhCN.yml
109 f_05_shaman__1_elemental_resto__14312_burst_zhTW = dir_root.joinpath("05-shaman", "1-elemental-resto", "14312-burst-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/1-elemental-resto/14312-burst-zhTW.yml
110 f_05_shaman__2_resto_enhancement__14511_buff_self_zhCN = dir_root.joinpath("05-shaman", "2-resto-enhancement", "14511-buff-self-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/2-resto-enhancement/14511-buff-self-zhCN.yml
111 f_05_shaman__2_resto_enhancement__14511_buff_self_zhTW = dir_root.joinpath("05-shaman", "2-resto-enhancement", "14511-buff-self-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/2-resto-enhancement/14511-buff-self-zhTW.yml
112 f_05_shaman__2_resto_enhancement__14512_burst_zhCN = dir_root.joinpath("05-shaman", "2-resto-enhancement", "14512-burst-zhCN.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/2-resto-enhancement/14512-burst-zhCN.yml
113 f_05_shaman__2_resto_enhancement__14512_burst_zhTW = dir_root.joinpath("05-shaman", "2-resto-enhancement", "14512-burst-zhTW.yml") # file:///Users/sanhehu/Documents/GitHub/wow_sdm-project/wow_sdm/tests/exp03_wotlk/sdm_macros/05-shaman/2-resto-enhancement/14512-burst-zhTW.yml
114# fmt: on
更进一步地, 你可以按照逻辑对这些 enum 进行分组, 这样在之后引用的时候就可以批量引用而不用一个个的手打了. sdm_group.py 模块是一个很好的例子.
wow_sdm/tests/exp03_wotlk/sdm_group.py
1# -*- coding: utf-8 -*-
2
3"""
4This module can help you organize your enum into group, made it easier to
5construct mappings later.
6"""
7
8from ordered_set import OrderedSet
9from wow_sdm.api import get_values
10from wow_sdm.tests.exp03_wotlk.sdm_enum import MacroEnum
11
12
13# ==============================================================================
14# START of manual editing
15# ==============================================================================
16class MacroGroupEnum:
17 all_macros = get_values(MacroEnum)
18
19 acc_common = [
20 # GM command
21 MacroEnum.f_00_common__1001_respawn,
22 MacroEnum.f_00_common__1002_feigh_death,
23 MacroEnum.f_00_common__1003_reset_cooldown,
24 MacroEnum.f_00_common__1004_ice_block,
25 MacroEnum.f_00_common__1005_resurrection,
26 MacroEnum.f_00_common__1006_invisibility,
27 MacroEnum.f_00_common__1007_unbind_instance,
28 MacroEnum.f_00_common__1008_fly_up,
29 MacroEnum.f_00_common__1009_fly_down,
30 MacroEnum.f_00_common__1010_x32_speed,
31 # Mount
32 MacroEnum.f_00_common__1011_MountUp_zhTW,
33 MacroEnum.f_00_common__1012_MountDown_zhTW,
34 # Multi-box
35 MacroEnum.f_00_common__1101_target_party,
36 MacroEnum.f_00_common__1102_target_raid,
37 MacroEnum.f_00_common__1103_target_focus_target,
38 MacroEnum.f_00_common__1104_target_focus_target_target,
39 MacroEnum.f_00_common__1105_confirm,
40 MacroEnum.f_00_common__1106_set_focus,
41 MacroEnum.f_00_common__1107_clear_focus,
42 MacroEnum.f_00_common__1108_set_high_fps,
43 MacroEnum.f_00_common__1109_set_low_fps,
44 MacroEnum.f_00_common__1110_follow_focus,
45 # Target specific character
46 MacroEnum.f_00_common__1131_target_window_01,
47 MacroEnum.f_00_common__1132_target_window_10,
48 # Party and Raid
49 MacroEnum.f_00_common__1151_invite_raid,
50 MacroEnum.f_00_common__1152_leave_raid,
51 MacroEnum.f_00_common__1153_summon,
52 # Teleport
53 MacroEnum.f_00_common__1173_tele_orgrimmar,
54 MacroEnum.f_00_common__1174_tele_undercity,
55 MacroEnum.f_00_common__1175_tele_shattrath,
56 MacroEnum.f_00_common__1176_tele_dalaran,
57 ]
58 acc_common = OrderedSet(acc_common)
59
60 paladin_protect_retri = [
61 # Buff
62 MacroEnum.f_02_paladin__1_protect_retri__11311_buff_self_alliance_zhCN,
63 # Act
64 MacroEnum.f_02_paladin__1_protect_retri__11301_act1_zhCN,
65 MacroEnum.f_02_paladin__1_protect_retri__11302_act2_zhCN,
66 MacroEnum.f_02_paladin__1_protect_retri__11303_act3_zhCN,
67 MacroEnum.f_02_paladin__1_protect_retri__11304_act4_zhCN,
68 MacroEnum.f_02_paladin__0_common__11131_protect_rotation_zhCN,
69 MacroEnum.f_02_paladin__0_common__11132_retribution_rotation_zhCN,
70 ]
71 paladin_protect_retri = OrderedSet(paladin_protect_retri)
72
73 shaman_elemental_resto = [
74 # Command
75 MacroEnum.f_05_shaman__0_common__14102_interrupt_zhCN,
76 # Buff
77 MacroEnum.f_05_shaman__1_elemental_resto__14311_buff_self_zhCN,
78 # Act
79 MacroEnum.f_05_shaman__0_common__14111_elemental_rotation_lv60_zhCN,
80 MacroEnum.f_05_shaman__0_common__14112_resto_rotation_zhCN,
81 MacroEnum.f_05_shaman__0_common__14114_mb_resto_earth_shield_zhCN,
82 MacroEnum.f_05_shaman__1_elemental_resto__14312_burst_zhCN,
83 ]
84 shaman_elemental_resto = OrderedSet(shaman_elemental_resto)
85
86
87# ==============================================================================
88# END of manual editing
89# ==============================================================================
4. Define Your Account / Character and Macro Mapping#
我们有了 Account / Character 的 Enum, 也有了 WTF Config 的 Enum, 下面就是要指定哪些账号和角色应该使用哪些配置了. 这个映射关系叫做 mapping.
我们需要编写一个 sdm_mapping.py 模块, 里面导入了我们之前定义的 acc_enum.py 和 wtf_enum.py Enum.
wow_sdm/tests/exp03_wotlk/sdm_mapping.py
1# -*- coding: utf-8 -*-
2
3from pathlib_mate import Path
4from wow_sdm.api import get_values, concat_lists, exp03_wotlk
5from wow_sdm.tests.exp03_wotlk.acc_enum import (
6 AccountEnum as AccEnum,
7 CharacterEnum as CharEnum,
8)
9from wow_sdm.tests.exp03_wotlk.acc_group import (
10 AccountGroupEnum as AccGrpEnum,
11 CharacterGroupEnum as CharGrpEnum,
12)
13from wow_sdm.tests.exp03_wotlk.sdm_enum import MacroEnum
14from wow_sdm.tests.exp03_wotlk.sdm_group import MacroGroupEnum
15
16Client = exp03_wotlk.Client
17AccMap = exp03_wotlk.AccLvlMapping
18CharMap = exp03_wotlk.CharLvlMapping
19SdmMapping = exp03_wotlk.SdmMapping
20
21dir_here = Path.dir_here(__file__)
22dir_game_client = dir_here.joinpath("world_of_warcraft_zhCN")
23
24client = exp03_wotlk.Client(
25 locale="zhCN",
26 dir=dir_game_client,
27)
28all_accounts = AccGrpEnum.all_accounts
29all_characters = CharGrpEnum.all_characters
30
31# ==============================================================================
32# START of manual editing
33# ==============================================================================
34# ------------------------------------------------------------------------------
35# acc_macros
36# ------------------------------------------------------------------------------
37acc_macros = AccMap.make_many(AccGrpEnum.all_accounts, MacroGroupEnum.acc_common)
38
39# ------------------------------------------------------------------------------
40# char_macros
41# ------------------------------------------------------------------------------
42char_macros = concat_lists(
43 CharMap.make_many(
44 CharGrpEnum.paladin_protect_retri, MacroGroupEnum.paladin_protect_retri
45 ),
46 CharMap.make_many(
47 CharGrpEnum.shaman_elemental_resto, MacroGroupEnum.shaman_elemental_resto
48 ),
49)
50
51# ==============================================================================
52# END of manual editing
53# ==============================================================================
54# ------------------------------------------------------------------------------
55# wtf_mapping
56# ------------------------------------------------------------------------------
57sdm_mapping = exp03_wotlk.SdmMapping(
58 client=client,
59 all_accounts=all_accounts,
60 all_characters=all_characters,
61 acc_macros=acc_macros,
62 char_macros=char_macros,
63)
接下来就是定义 SdmMapping 对象, 它是一个 mapping 数据的容器. 里面定义了例如 account 和 character 级别的宏命令.
wow_sdm 库还提供了一些函数能让你更方便地定义这些 mapping 数据. 例如:
make_many()和make_many()方法可以方便地让你将多个账户或角色和多个配置文件建立映射关系.get_values()方法可以方便地让你获得一个 enum 类的所有 member 的集合. 注意这里是集合, 也就是说你可以用difference(取差异),intersection(取交集),union(取并集) 这些集合操作进行筛选.concat_lists()方法可以方便地让你将多个 list 连接起来.
5. Apply Macros#
有了 SdmMapping 对象之后, 你就可以将你的配置批量应用到你的客户端了. 你可以使用下面 wow_sdm.exp03_wotlk.mapping.SdmMapping.apply() 方法来将你的宏命令写入到客户端的 WTF/Account/MYACCOUNT/SavedVariables/SuperDuperMacro.lua 文件中:
sdm_apply.py 文件是一个例子, 它展示了如何将我们的配置应用到我们的客户端.
wow_sdm/tests/exp03_wotlk/sdm_apply.py
1# -*- coding: utf-8 -*-
2
3from wow_sdm.tests.exp03_wotlk.sdm_mapping import sdm_mapping
4
5real_run = True
6
7sdm_mapping.apply(real_run)
How to debug before you apply
由于 apply 操作会覆盖 WTF 中已有的文件. 所以在你还不确定你的代码是否正确之前, 你希望能提前进行验证, 或是确保出现问题时能够回滚到之前的状态. 我推荐下面几种方法:
备份你客户端中的 WTF 文件夹, 以备不时之需.
在定义
Client时将目录指向到一个临时目录, 而不是真正的魔兽世界客户端目录. 这样你可以检查生成后的文件, 然后拷贝一小部分到客户端中看看是否惯用.在调用
apply(...)方法时, 将real_run参数设为False. 这样它只会渲染最终要写入的内容而不会真正写入. 这样可以确定你至少你的 lua 文件没有问题.
Manage Multiple Servers and Mappings#
本节介绍了在你同时玩多个服务器的时候, 有多个客户端, 有多套人物角色和配置的组合的时候, 如何组织你的文件目录来管理数量庞大的 WTF 配置.
首先我们要知道一些规范:
用不同的客户端玩不同的服务器. 例如你在用一个客户端玩 2 个私服. 那么建议把你的游戏客户端拷贝一份, 每一个客户端玩不同的私服. 因为不同的私服的服务器名和游戏角色名可能会出现冲突.
不要用多个 mapping 来分别管理一个账号下的不同角色. 举例来说, 你一个账号下有 10 个角色, 你用一套 mapping 管理其中的 5 个, 另一套 mapping 管理另外 5 个. 这样是不可以的. 因为 SDM 的插件 lua 文件是账号级别的. 如果你的配置只涉及到其中的 5 个角色, 那么一旦你登录另外的 5 个角色中的任意一个, 那么登录的角色里的宏命令就丢失了, 导致动作条混乱, 并且这个动作条还会被保存到服务器上.
跟上一条对应, 你可以用多个 mapping 来管理一个服务器上的不同账号. 例如用一套 mapping 管理 5 个账号, 用另一套 mapping 管理另外 5 个账号, 这样做是可以的.
根据这些规范, 我们可以创建下面的目录结构. 在 workspace 下的每一个子目录都应该是一套独立的 mapping. 子目录的文件夹名可以是 ${server_name}_${description}. 其中 server_name 是服务器的名字, description 是你这套 mapping 的描述. 而这些子目录的结构就跟 exp03_wotlk 目录下的结构一样了.