diff --git a/audio/die/ahuinan.mp3 b/audio/die/ahuinan.mp3 new file mode 100644 index 000000000..0faadeb3d Binary files /dev/null and b/audio/die/ahuinan.mp3 differ diff --git a/audio/die/chengbing.mp3 b/audio/die/chengbing.mp3 new file mode 100644 index 000000000..9ad698840 Binary files /dev/null and b/audio/die/chengbing.mp3 differ diff --git a/audio/die/chenjiao.mp3 b/audio/die/chenjiao.mp3 new file mode 100644 index 000000000..1533e9d47 Binary files /dev/null and b/audio/die/chenjiao.mp3 differ diff --git a/audio/die/clan_xuncai.mp3 b/audio/die/clan_xuncai.mp3 new file mode 100644 index 000000000..40e83c6e4 Binary files /dev/null and b/audio/die/clan_xuncai.mp3 differ diff --git a/audio/die/clan_xuncan.mp3 b/audio/die/clan_xuncan.mp3 new file mode 100644 index 000000000..49e7c2c83 Binary files /dev/null and b/audio/die/clan_xuncan.mp3 differ diff --git a/audio/die/clan_xunchen.mp3 b/audio/die/clan_xunchen.mp3 new file mode 100644 index 000000000..d878ae78f Binary files /dev/null and b/audio/die/clan_xunchen.mp3 differ diff --git a/audio/die/clan_xunshu.mp3 b/audio/die/clan_xunshu.mp3 new file mode 100644 index 000000000..886102aaf Binary files /dev/null and b/audio/die/clan_xunshu.mp3 differ diff --git a/audio/die/dc_hujinding.mp3 b/audio/die/dc_hujinding.mp3 new file mode 100644 index 000000000..56f0b3990 Binary files /dev/null and b/audio/die/dc_hujinding.mp3 differ diff --git a/audio/die/dc_sp_jiaxu.mp3 b/audio/die/dc_sp_jiaxu.mp3 new file mode 100644 index 000000000..756ed1f85 Binary files /dev/null and b/audio/die/dc_sp_jiaxu.mp3 differ diff --git a/audio/die/dc_wangyun.mp3 b/audio/die/dc_wangyun.mp3 new file mode 100644 index 000000000..9e41c41d1 Binary files /dev/null and b/audio/die/dc_wangyun.mp3 differ diff --git a/audio/die/dc_yuejiu.mp3 b/audio/die/dc_yuejiu.mp3 new file mode 100644 index 000000000..f908dea7f Binary files /dev/null and b/audio/die/dc_yuejiu.mp3 differ diff --git a/audio/die/dc_zhouxuān.mp3 b/audio/die/dc_zhouxuān.mp3 new file mode 100644 index 000000000..101889d3e Binary files /dev/null and b/audio/die/dc_zhouxuān.mp3 differ diff --git a/audio/die/dongguiren.mp3 b/audio/die/dongguiren.mp3 new file mode 100644 index 000000000..75df73e46 Binary files /dev/null and b/audio/die/dongguiren.mp3 differ diff --git a/audio/die/gongsundu.mp3 b/audio/die/gongsundu.mp3 new file mode 100644 index 000000000..46e502d74 Binary files /dev/null and b/audio/die/gongsundu.mp3 differ diff --git a/audio/die/leibo.mp3 b/audio/die/leibo.mp3 new file mode 100644 index 000000000..f5e93e419 Binary files /dev/null and b/audio/die/leibo.mp3 differ diff --git a/audio/die/liupi.mp3 b/audio/die/liupi.mp3 new file mode 100644 index 000000000..c119a5b68 Binary files /dev/null and b/audio/die/liupi.mp3 differ diff --git a/audio/die/liwan.mp3 b/audio/die/liwan.mp3 new file mode 100644 index 000000000..97d675427 Binary files /dev/null and b/audio/die/liwan.mp3 differ diff --git a/audio/die/liyixiejing.mp3 b/audio/die/liyixiejing.mp3 new file mode 100644 index 000000000..6d31357a7 Binary files /dev/null and b/audio/die/liyixiejing.mp3 differ diff --git a/audio/die/ol_furong.mp3 b/audio/die/ol_furong.mp3 new file mode 100644 index 000000000..5a2c9a7f2 Binary files /dev/null and b/audio/die/ol_furong.mp3 differ diff --git a/audio/die/panghui.mp3 b/audio/die/panghui.mp3 new file mode 100644 index 000000000..fd32a3246 Binary files /dev/null and b/audio/die/panghui.mp3 differ diff --git a/audio/die/re_caiyong.mp3 b/audio/die/re_caiyong.mp3 new file mode 100644 index 000000000..da50b517f Binary files /dev/null and b/audio/die/re_caiyong.mp3 differ diff --git a/audio/die/re_chengong.mp3 b/audio/die/re_chengong.mp3 new file mode 100644 index 000000000..f858bcb50 Binary files /dev/null and b/audio/die/re_chengong.mp3 differ diff --git a/audio/die/re_mazhong.mp3 b/audio/die/re_mazhong.mp3 new file mode 100644 index 000000000..032eea923 Binary files /dev/null and b/audio/die/re_mazhong.mp3 differ diff --git a/audio/die/re_xunyou.mp3 b/audio/die/re_xunyou.mp3 new file mode 100644 index 000000000..82e4de62f Binary files /dev/null and b/audio/die/re_xunyou.mp3 differ diff --git a/audio/die/sb_caocao.mp3 b/audio/die/sb_caocao.mp3 new file mode 100644 index 000000000..52522f48f Binary files /dev/null and b/audio/die/sb_caocao.mp3 differ diff --git a/audio/die/sb_caoren.mp3 b/audio/die/sb_caoren.mp3 new file mode 100644 index 000000000..374ab01b3 Binary files /dev/null and b/audio/die/sb_caoren.mp3 differ diff --git a/audio/die/sb_ganning.mp3 b/audio/die/sb_ganning.mp3 new file mode 100644 index 000000000..623106663 Binary files /dev/null and b/audio/die/sb_ganning.mp3 differ diff --git a/audio/die/sb_huanggai.mp3 b/audio/die/sb_huanggai.mp3 new file mode 100644 index 000000000..b25ef1dcc Binary files /dev/null and b/audio/die/sb_huanggai.mp3 differ diff --git a/audio/die/sb_lvmeng.mp3 b/audio/die/sb_lvmeng.mp3 new file mode 100644 index 000000000..a7363838e Binary files /dev/null and b/audio/die/sb_lvmeng.mp3 differ diff --git a/audio/die/sb_machao.mp3 b/audio/die/sb_machao.mp3 new file mode 100644 index 000000000..c3586e9bb Binary files /dev/null and b/audio/die/sb_machao.mp3 differ diff --git a/audio/die/sb_sunquan.mp3 b/audio/die/sb_sunquan.mp3 new file mode 100644 index 000000000..167431386 Binary files /dev/null and b/audio/die/sb_sunquan.mp3 differ diff --git a/audio/die/sb_sunshangxiang.mp3 b/audio/die/sb_sunshangxiang.mp3 new file mode 100644 index 000000000..b5a865860 Binary files /dev/null and b/audio/die/sb_sunshangxiang.mp3 differ diff --git a/audio/die/sb_xiahoushi.mp3 b/audio/die/sb_xiahoushi.mp3 new file mode 100644 index 000000000..51ce99ac7 Binary files /dev/null and b/audio/die/sb_xiahoushi.mp3 differ diff --git a/audio/die/sb_xuhuang.mp3 b/audio/die/sb_xuhuang.mp3 new file mode 100644 index 000000000..f0dab1533 Binary files /dev/null and b/audio/die/sb_xuhuang.mp3 differ diff --git a/audio/die/sb_zhangfei.mp3 b/audio/die/sb_zhangfei.mp3 new file mode 100644 index 000000000..be2c700c9 Binary files /dev/null and b/audio/die/sb_zhangfei.mp3 differ diff --git a/audio/die/sb_zhangjiao.mp3 b/audio/die/sb_zhangjiao.mp3 new file mode 100644 index 000000000..740f9535c Binary files /dev/null and b/audio/die/sb_zhangjiao.mp3 differ diff --git a/audio/die/sb_zhenji.mp3 b/audio/die/sb_zhenji.mp3 new file mode 100644 index 000000000..f603182a1 Binary files /dev/null and b/audio/die/sb_zhenji.mp3 differ diff --git a/audio/die/sb_zhouyu.mp3 b/audio/die/sb_zhouyu.mp3 new file mode 100644 index 000000000..8eb8f444a Binary files /dev/null and b/audio/die/sb_zhouyu.mp3 differ diff --git a/audio/die/shen_zhangjiao.mp3 b/audio/die/shen_zhangjiao.mp3 new file mode 100644 index 000000000..906bc8b0c Binary files /dev/null and b/audio/die/shen_zhangjiao.mp3 differ diff --git a/audio/die/shiyi.mp3 b/audio/die/shiyi.mp3 new file mode 100644 index 000000000..17bbc49dd Binary files /dev/null and b/audio/die/shiyi.mp3 differ diff --git a/audio/die/sp_caosong.mp3 b/audio/die/sp_caosong.mp3 new file mode 100644 index 000000000..59d955a04 Binary files /dev/null and b/audio/die/sp_caosong.mp3 differ diff --git a/audio/die/sp_pengyang.mp3 b/audio/die/sp_pengyang.mp3 new file mode 100644 index 000000000..14127bfe0 Binary files /dev/null and b/audio/die/sp_pengyang.mp3 differ diff --git a/audio/die/sunlang.mp3 b/audio/die/sunlang.mp3 new file mode 100644 index 000000000..066b6d8ec Binary files /dev/null and b/audio/die/sunlang.mp3 differ diff --git a/audio/die/tw_baoxin.mp3 b/audio/die/tw_baoxin.mp3 new file mode 100644 index 000000000..abc734d73 Binary files /dev/null and b/audio/die/tw_baoxin.mp3 differ diff --git a/audio/die/tw_bingyuan.mp3 b/audio/die/tw_bingyuan.mp3 new file mode 100644 index 000000000..c81ca3a80 Binary files /dev/null and b/audio/die/tw_bingyuan.mp3 differ diff --git a/audio/die/tw_fengxi.mp3 b/audio/die/tw_fengxi.mp3 new file mode 100644 index 000000000..085e0717f Binary files /dev/null and b/audio/die/tw_fengxi.mp3 differ diff --git a/audio/die/tw_haomeng.mp3 b/audio/die/tw_haomeng.mp3 new file mode 100644 index 000000000..c7245e79f Binary files /dev/null and b/audio/die/tw_haomeng.mp3 differ diff --git a/audio/die/tw_huchuquan.mp3 b/audio/die/tw_huchuquan.mp3 new file mode 100644 index 000000000..5ff0c4c06 Binary files /dev/null and b/audio/die/tw_huchuquan.mp3 differ diff --git a/audio/die/tw_jiangji.mp3 b/audio/die/tw_jiangji.mp3 new file mode 100644 index 000000000..f57f1e53d Binary files /dev/null and b/audio/die/tw_jiangji.mp3 differ diff --git a/audio/die/tw_jiangwei.mp3 b/audio/die/tw_jiangwei.mp3 new file mode 100644 index 000000000..73c4d459b Binary files /dev/null and b/audio/die/tw_jiangwei.mp3 differ diff --git a/audio/die/tw_jianshuo.mp3 b/audio/die/tw_jianshuo.mp3 new file mode 100644 index 000000000..1a5030908 Binary files /dev/null and b/audio/die/tw_jianshuo.mp3 differ diff --git a/audio/die/tw_liubei.mp3 b/audio/die/tw_liubei.mp3 new file mode 100644 index 000000000..cf65c4fb8 Binary files /dev/null and b/audio/die/tw_liubei.mp3 differ diff --git a/audio/die/tw_liufuren.mp3 b/audio/die/tw_liufuren.mp3 new file mode 100644 index 000000000..4235a4bfb Binary files /dev/null and b/audio/die/tw_liufuren.mp3 differ diff --git a/audio/die/tw_liyi.mp3 b/audio/die/tw_liyi.mp3 new file mode 100644 index 000000000..35623bca1 Binary files /dev/null and b/audio/die/tw_liyi.mp3 differ diff --git a/audio/die/tw_mateng.mp3 b/audio/die/tw_mateng.mp3 new file mode 100644 index 000000000..dc028ad22 Binary files /dev/null and b/audio/die/tw_mateng.mp3 differ diff --git a/audio/die/tw_niufudongxie.mp3 b/audio/die/tw_niufudongxie.mp3 new file mode 100644 index 000000000..13ea34e83 Binary files /dev/null and b/audio/die/tw_niufudongxie.mp3 differ diff --git a/audio/die/tw_qiaorui.mp3 b/audio/die/tw_qiaorui.mp3 new file mode 100644 index 000000000..b7900e648 Binary files /dev/null and b/audio/die/tw_qiaorui.mp3 differ diff --git a/audio/die/tw_shen_lvmeng.mp3 b/audio/die/tw_shen_lvmeng.mp3 new file mode 100644 index 000000000..4c1a21f9b Binary files /dev/null and b/audio/die/tw_shen_lvmeng.mp3 differ diff --git a/audio/die/tw_weixu.mp3 b/audio/die/tw_weixu.mp3 new file mode 100644 index 000000000..0c0f8164a Binary files /dev/null and b/audio/die/tw_weixu.mp3 differ diff --git a/audio/die/tw_xiahouen.mp3 b/audio/die/tw_xiahouen.mp3 new file mode 100644 index 000000000..46b66477b Binary files /dev/null and b/audio/die/tw_xiahouen.mp3 differ diff --git a/audio/die/tw_xiahoushang.mp3 b/audio/die/tw_xiahoushang.mp3 new file mode 100644 index 000000000..7487003a0 Binary files /dev/null and b/audio/die/tw_xiahoushang.mp3 differ diff --git a/audio/die/tw_yanxiang.mp3 b/audio/die/tw_yanxiang.mp3 new file mode 100644 index 000000000..37d92843a Binary files /dev/null and b/audio/die/tw_yanxiang.mp3 differ diff --git a/audio/die/tw_yufuluo.mp3 b/audio/die/tw_yufuluo.mp3 new file mode 100644 index 000000000..3e0e4321f Binary files /dev/null and b/audio/die/tw_yufuluo.mp3 differ diff --git a/audio/die/tw_zhangji.mp3 b/audio/die/tw_zhangji.mp3 new file mode 100644 index 000000000..02f2ba25e Binary files /dev/null and b/audio/die/tw_zhangji.mp3 differ diff --git a/audio/die/tw_zhangnan.mp3 b/audio/die/tw_zhangnan.mp3 new file mode 100644 index 000000000..b1dd5b48d Binary files /dev/null and b/audio/die/tw_zhangnan.mp3 differ diff --git a/audio/die/tw_zhangning.mp3 b/audio/die/tw_zhangning.mp3 new file mode 100644 index 000000000..1640c9fc5 Binary files /dev/null and b/audio/die/tw_zhangning.mp3 differ diff --git a/audio/die/wangjun.mp3 b/audio/die/wangjun.mp3 new file mode 100644 index 000000000..6845749c0 Binary files /dev/null and b/audio/die/wangjun.mp3 differ diff --git a/audio/die/wanglie.mp3 b/audio/die/wanglie.mp3 new file mode 100644 index 000000000..b5eb56795 Binary files /dev/null and b/audio/die/wanglie.mp3 differ diff --git a/audio/die/xia_liyan.mp3 b/audio/die/xia_liyan.mp3 new file mode 100644 index 000000000..8fda3013e Binary files /dev/null and b/audio/die/xia_liyan.mp3 differ diff --git a/audio/die/xia_tongyuan.mp3 b/audio/die/xia_tongyuan.mp3 new file mode 100644 index 000000000..f6dab3ad6 Binary files /dev/null and b/audio/die/xia_tongyuan.mp3 differ diff --git a/audio/die/xia_wangyue.mp3 b/audio/die/xia_wangyue.mp3 new file mode 100644 index 000000000..311ad94f5 Binary files /dev/null and b/audio/die/xia_wangyue.mp3 differ diff --git a/audio/die/xia_xushu.mp3 b/audio/die/xia_xushu.mp3 new file mode 100644 index 000000000..fda1fcb90 Binary files /dev/null and b/audio/die/xia_xushu.mp3 differ diff --git a/audio/die/xin_caoxiu.mp3 b/audio/die/xin_caoxiu.mp3 new file mode 100644 index 000000000..33195719c Binary files /dev/null and b/audio/die/xin_caoxiu.mp3 differ diff --git a/audio/die/xin_wuyi.mp3 b/audio/die/xin_wuyi.mp3 new file mode 100644 index 000000000..152159d95 Binary files /dev/null and b/audio/die/xin_wuyi.mp3 differ diff --git a/audio/die/xin_zhuhuan.mp3 b/audio/die/xin_zhuhuan.mp3 new file mode 100644 index 000000000..24e79967a Binary files /dev/null and b/audio/die/xin_zhuhuan.mp3 differ diff --git a/audio/die/xin_zhuzhi.mp3 b/audio/die/xin_zhuzhi.mp3 new file mode 100644 index 000000000..b7fd78400 Binary files /dev/null and b/audio/die/xin_zhuzhi.mp3 differ diff --git a/audio/die/xuelingyun.mp3 b/audio/die/xuelingyun.mp3 new file mode 100644 index 000000000..40105e840 Binary files /dev/null and b/audio/die/xuelingyun.mp3 differ diff --git a/audio/die/yangfu.mp3 b/audio/die/yangfu.mp3 new file mode 100644 index 000000000..02fe983f1 Binary files /dev/null and b/audio/die/yangfu.mp3 differ diff --git a/audio/die/zhangzhi.mp3 b/audio/die/zhangzhi.mp3 new file mode 100644 index 000000000..fbfed78ca Binary files /dev/null and b/audio/die/zhangzhi.mp3 differ diff --git a/audio/die/zhaozhi.mp3 b/audio/die/zhaozhi.mp3 new file mode 100644 index 000000000..e3a1b5380 Binary files /dev/null and b/audio/die/zhaozhi.mp3 differ diff --git a/audio/skill/biejun1.mp3 b/audio/skill/biejun1.mp3 new file mode 100644 index 000000000..732d935d8 Binary files /dev/null and b/audio/skill/biejun1.mp3 differ diff --git a/audio/skill/biejun2.mp3 b/audio/skill/biejun2.mp3 new file mode 100644 index 000000000..ed8597b52 Binary files /dev/null and b/audio/skill/biejun2.mp3 differ diff --git a/audio/skill/clanbalong1.mp3 b/audio/skill/clanbalong1.mp3 new file mode 100644 index 000000000..6eb702ba6 Binary files /dev/null and b/audio/skill/clanbalong1.mp3 differ diff --git a/audio/skill/clanbalong2.mp3 b/audio/skill/clanbalong2.mp3 new file mode 100644 index 000000000..de27c50b3 Binary files /dev/null and b/audio/skill/clanbalong2.mp3 differ diff --git a/audio/skill/clanbeishi1.mp3 b/audio/skill/clanbeishi1.mp3 new file mode 100644 index 000000000..e71db0767 Binary files /dev/null and b/audio/skill/clanbeishi1.mp3 differ diff --git a/audio/skill/clanbeishi2.mp3 b/audio/skill/clanbeishi2.mp3 new file mode 100644 index 000000000..a71fa1b46 Binary files /dev/null and b/audio/skill/clanbeishi2.mp3 differ diff --git a/audio/skill/clandaojie_clan_xuncai1.mp3 b/audio/skill/clandaojie_clan_xuncai1.mp3 new file mode 100644 index 000000000..e87fdfd72 Binary files /dev/null and b/audio/skill/clandaojie_clan_xuncai1.mp3 differ diff --git a/audio/skill/clandaojie_clan_xuncai2.mp3 b/audio/skill/clandaojie_clan_xuncai2.mp3 new file mode 100644 index 000000000..a9d8f2258 Binary files /dev/null and b/audio/skill/clandaojie_clan_xuncai2.mp3 differ diff --git a/audio/skill/clandaojie_clan_xuncan1.mp3 b/audio/skill/clandaojie_clan_xuncan1.mp3 new file mode 100644 index 000000000..c103acbbe Binary files /dev/null and b/audio/skill/clandaojie_clan_xuncan1.mp3 differ diff --git a/audio/skill/clandaojie_clan_xuncan2.mp3 b/audio/skill/clandaojie_clan_xuncan2.mp3 new file mode 100644 index 000000000..cbe855445 Binary files /dev/null and b/audio/skill/clandaojie_clan_xuncan2.mp3 differ diff --git a/audio/skill/clandaojie_clan_xunchen1.mp3 b/audio/skill/clandaojie_clan_xunchen1.mp3 new file mode 100644 index 000000000..d818f32c5 Binary files /dev/null and b/audio/skill/clandaojie_clan_xunchen1.mp3 differ diff --git a/audio/skill/clandaojie_clan_xunchen2.mp3 b/audio/skill/clandaojie_clan_xunchen2.mp3 new file mode 100644 index 000000000..8a5a80753 Binary files /dev/null and b/audio/skill/clandaojie_clan_xunchen2.mp3 differ diff --git a/audio/skill/clandaojie_clan_xunshu1.mp3 b/audio/skill/clandaojie_clan_xunshu1.mp3 new file mode 100644 index 000000000..953ed4d6e Binary files /dev/null and b/audio/skill/clandaojie_clan_xunshu1.mp3 differ diff --git a/audio/skill/clandaojie_clan_xunshu2.mp3 b/audio/skill/clandaojie_clan_xunshu2.mp3 new file mode 100644 index 000000000..b22d512f5 Binary files /dev/null and b/audio/skill/clandaojie_clan_xunshu2.mp3 differ diff --git a/audio/skill/clandianzhan1.mp3 b/audio/skill/clandianzhan1.mp3 new file mode 100644 index 000000000..00c69ad1f Binary files /dev/null and b/audio/skill/clandianzhan1.mp3 differ diff --git a/audio/skill/clandianzhan2.mp3 b/audio/skill/clandianzhan2.mp3 new file mode 100644 index 000000000..6ce390529 Binary files /dev/null and b/audio/skill/clandianzhan2.mp3 differ diff --git a/audio/skill/clanfenchai1.mp3 b/audio/skill/clanfenchai1.mp3 new file mode 100644 index 000000000..3ebafb18b Binary files /dev/null and b/audio/skill/clanfenchai1.mp3 differ diff --git a/audio/skill/clanfenchai2.mp3 b/audio/skill/clanfenchai2.mp3 new file mode 100644 index 000000000..5dc1110de Binary files /dev/null and b/audio/skill/clanfenchai2.mp3 differ diff --git a/audio/skill/clanhuanyin1.mp3 b/audio/skill/clanhuanyin1.mp3 new file mode 100644 index 000000000..e544e28d0 Binary files /dev/null and b/audio/skill/clanhuanyin1.mp3 differ diff --git a/audio/skill/clanhuanyin2.mp3 b/audio/skill/clanhuanyin2.mp3 new file mode 100644 index 000000000..1bc9cc0eb Binary files /dev/null and b/audio/skill/clanhuanyin2.mp3 differ diff --git a/audio/skill/clanlieshi1.mp3 b/audio/skill/clanlieshi1.mp3 new file mode 100644 index 000000000..f4b34e02d Binary files /dev/null and b/audio/skill/clanlieshi1.mp3 differ diff --git a/audio/skill/clanlieshi2.mp3 b/audio/skill/clanlieshi2.mp3 new file mode 100644 index 000000000..626816b6e Binary files /dev/null and b/audio/skill/clanlieshi2.mp3 differ diff --git a/audio/skill/clansankuang1.mp3 b/audio/skill/clansankuang1.mp3 new file mode 100644 index 000000000..0c9761559 Binary files /dev/null and b/audio/skill/clansankuang1.mp3 differ diff --git a/audio/skill/clansankuang2.mp3 b/audio/skill/clansankuang2.mp3 new file mode 100644 index 000000000..cb59a70f7 Binary files /dev/null and b/audio/skill/clansankuang2.mp3 differ diff --git a/audio/skill/clanshangshen1.mp3 b/audio/skill/clanshangshen1.mp3 new file mode 100644 index 000000000..8c5a03e64 Binary files /dev/null and b/audio/skill/clanshangshen1.mp3 differ diff --git a/audio/skill/clanshangshen2.mp3 b/audio/skill/clanshangshen2.mp3 new file mode 100644 index 000000000..f29f2f77f Binary files /dev/null and b/audio/skill/clanshangshen2.mp3 differ diff --git a/audio/skill/clanshenjun1.mp3 b/audio/skill/clanshenjun1.mp3 new file mode 100644 index 000000000..7e9953dcb Binary files /dev/null and b/audio/skill/clanshenjun1.mp3 differ diff --git a/audio/skill/clanshenjun2.mp3 b/audio/skill/clanshenjun2.mp3 new file mode 100644 index 000000000..d91af3fb4 Binary files /dev/null and b/audio/skill/clanshenjun2.mp3 differ diff --git a/audio/skill/clanyunshen1.mp3 b/audio/skill/clanyunshen1.mp3 new file mode 100644 index 000000000..febadb17d Binary files /dev/null and b/audio/skill/clanyunshen1.mp3 differ diff --git a/audio/skill/clanyunshen2.mp3 b/audio/skill/clanyunshen2.mp3 new file mode 100644 index 000000000..7e094fca1 Binary files /dev/null and b/audio/skill/clanyunshen2.mp3 differ diff --git a/audio/skill/dcanliao1.mp3 b/audio/skill/dcanliao1.mp3 new file mode 100644 index 000000000..e04cf2c92 Binary files /dev/null and b/audio/skill/dcanliao1.mp3 differ diff --git a/audio/skill/dcanliao2.mp3 b/audio/skill/dcanliao2.mp3 new file mode 100644 index 000000000..0d785cda9 Binary files /dev/null and b/audio/skill/dcanliao2.mp3 differ diff --git a/audio/skill/dcanzhi1.mp3 b/audio/skill/dcanzhi1.mp3 new file mode 100644 index 000000000..8aa97bbd7 Binary files /dev/null and b/audio/skill/dcanzhi1.mp3 differ diff --git a/audio/skill/dcanzhi2.mp3 b/audio/skill/dcanzhi2.mp3 new file mode 100644 index 000000000..18ae76bfe Binary files /dev/null and b/audio/skill/dcanzhi2.mp3 differ diff --git a/audio/skill/dcbenshi1.mp3 b/audio/skill/dcbenshi1.mp3 new file mode 100644 index 000000000..57d851cb5 Binary files /dev/null and b/audio/skill/dcbenshi1.mp3 differ diff --git a/audio/skill/dcbenshi2.mp3 b/audio/skill/dcbenshi2.mp3 new file mode 100644 index 000000000..09c4c4e03 Binary files /dev/null and b/audio/skill/dcbenshi2.mp3 differ diff --git a/audio/skill/dcchongwang1.mp3 b/audio/skill/dcchongwang1.mp3 new file mode 100644 index 000000000..26f91351a Binary files /dev/null and b/audio/skill/dcchongwang1.mp3 differ diff --git a/audio/skill/dcchongwang2.mp3 b/audio/skill/dcchongwang2.mp3 new file mode 100644 index 000000000..67cbffe93 Binary files /dev/null and b/audio/skill/dcchongwang2.mp3 differ diff --git a/audio/skill/dccuichuan1.mp3 b/audio/skill/dccuichuan1.mp3 new file mode 100644 index 000000000..d10954eb0 Binary files /dev/null and b/audio/skill/dccuichuan1.mp3 differ diff --git a/audio/skill/dccuichuan2.mp3 b/audio/skill/dccuichuan2.mp3 new file mode 100644 index 000000000..9f01a87a2 Binary files /dev/null and b/audio/skill/dccuichuan2.mp3 differ diff --git a/audio/skill/dccuijin1.mp3 b/audio/skill/dccuijin1.mp3 new file mode 100644 index 000000000..1c32db5bf Binary files /dev/null and b/audio/skill/dccuijin1.mp3 differ diff --git a/audio/skill/dccuijin2.mp3 b/audio/skill/dccuijin2.mp3 new file mode 100644 index 000000000..a01033994 Binary files /dev/null and b/audio/skill/dccuijin2.mp3 differ diff --git a/audio/skill/dcdeshi1.mp3 b/audio/skill/dcdeshi1.mp3 new file mode 100644 index 000000000..9be4a57ba Binary files /dev/null and b/audio/skill/dcdeshi1.mp3 differ diff --git a/audio/skill/dcdeshi2.mp3 b/audio/skill/dcdeshi2.mp3 new file mode 100644 index 000000000..adac57d94 Binary files /dev/null and b/audio/skill/dcdeshi2.mp3 differ diff --git a/audio/skill/dcdouzhen1.mp3 b/audio/skill/dcdouzhen1.mp3 new file mode 100644 index 000000000..a7668fbfa Binary files /dev/null and b/audio/skill/dcdouzhen1.mp3 differ diff --git a/audio/skill/dcdouzhen2.mp3 b/audio/skill/dcdouzhen2.mp3 new file mode 100644 index 000000000..faf15d011 Binary files /dev/null and b/audio/skill/dcdouzhen2.mp3 differ diff --git a/audio/skill/dcenyu1.mp3 b/audio/skill/dcenyu1.mp3 new file mode 100644 index 000000000..aed116908 Binary files /dev/null and b/audio/skill/dcenyu1.mp3 differ diff --git a/audio/skill/dcenyu2.mp3 b/audio/skill/dcenyu2.mp3 new file mode 100644 index 000000000..0b6b41f89 Binary files /dev/null and b/audio/skill/dcenyu2.mp3 differ diff --git a/audio/skill/dcfengying1.mp3 b/audio/skill/dcfengying1.mp3 new file mode 100644 index 000000000..ac9eedbe0 Binary files /dev/null and b/audio/skill/dcfengying1.mp3 differ diff --git a/audio/skill/dcfengying2.mp3 b/audio/skill/dcfengying2.mp3 new file mode 100644 index 000000000..c66bcce32 Binary files /dev/null and b/audio/skill/dcfengying2.mp3 differ diff --git a/audio/skill/dchuagui1.mp3 b/audio/skill/dchuagui1.mp3 new file mode 100644 index 000000000..c87c72037 Binary files /dev/null and b/audio/skill/dchuagui1.mp3 differ diff --git a/audio/skill/dchuagui2.mp3 b/audio/skill/dchuagui2.mp3 new file mode 100644 index 000000000..a4cbec336 Binary files /dev/null and b/audio/skill/dchuagui2.mp3 differ diff --git a/audio/skill/dcjingzao1.mp3 b/audio/skill/dcjingzao1.mp3 new file mode 100644 index 000000000..0be070c95 Binary files /dev/null and b/audio/skill/dcjingzao1.mp3 differ diff --git a/audio/skill/dcjingzao2.mp3 b/audio/skill/dcjingzao2.mp3 new file mode 100644 index 000000000..2e8a5105c Binary files /dev/null and b/audio/skill/dcjingzao2.mp3 differ diff --git a/audio/skill/dcjuying1.mp3 b/audio/skill/dcjuying1.mp3 new file mode 100644 index 000000000..7928d742c Binary files /dev/null and b/audio/skill/dcjuying1.mp3 differ diff --git a/audio/skill/dcjuying2.mp3 b/audio/skill/dcjuying2.mp3 new file mode 100644 index 000000000..3af768b65 Binary files /dev/null and b/audio/skill/dcjuying2.mp3 differ diff --git a/audio/skill/dclianzhi1.mp3 b/audio/skill/dclianzhi1.mp3 new file mode 100644 index 000000000..2edd2c573 Binary files /dev/null and b/audio/skill/dclianzhi1.mp3 differ diff --git a/audio/skill/dclianzhi2.mp3 b/audio/skill/dclianzhi2.mp3 new file mode 100644 index 000000000..f0d9b5610 Binary files /dev/null and b/audio/skill/dclianzhi2.mp3 differ diff --git a/audio/skill/dclingfang1.mp3 b/audio/skill/dclingfang1.mp3 new file mode 100644 index 000000000..bc3c578d4 Binary files /dev/null and b/audio/skill/dclingfang1.mp3 differ diff --git a/audio/skill/dclingfang2.mp3 b/audio/skill/dclingfang2.mp3 new file mode 100644 index 000000000..808c49d93 Binary files /dev/null and b/audio/skill/dclingfang2.mp3 differ diff --git a/audio/skill/dcliuzhuan_gain1.mp3 b/audio/skill/dcliuzhuan_gain1.mp3 new file mode 100644 index 000000000..09c6f0fce Binary files /dev/null and b/audio/skill/dcliuzhuan_gain1.mp3 differ diff --git a/audio/skill/dcliuzhuan_gain2.mp3 b/audio/skill/dcliuzhuan_gain2.mp3 new file mode 100644 index 000000000..dfa7456b8 Binary files /dev/null and b/audio/skill/dcliuzhuan_gain2.mp3 differ diff --git a/audio/skill/dcmengjie1.mp3 b/audio/skill/dcmengjie1.mp3 new file mode 100644 index 000000000..74a9f7d8d Binary files /dev/null and b/audio/skill/dcmengjie1.mp3 differ diff --git a/audio/skill/dcmengjie2.mp3 b/audio/skill/dcmengjie2.mp3 new file mode 100644 index 000000000..d717a9414 Binary files /dev/null and b/audio/skill/dcmengjie2.mp3 differ diff --git a/audio/skill/dcqingyan1.mp3 b/audio/skill/dcqingyan1.mp3 new file mode 100644 index 000000000..c29228532 Binary files /dev/null and b/audio/skill/dcqingyan1.mp3 differ diff --git a/audio/skill/dcqingyan2.mp3 b/audio/skill/dcqingyan2.mp3 new file mode 100644 index 000000000..efab855d3 Binary files /dev/null and b/audio/skill/dcqingyan2.mp3 differ diff --git a/audio/skill/dcshuaijie1.mp3 b/audio/skill/dcshuaijie1.mp3 new file mode 100644 index 000000000..15ce0d58d Binary files /dev/null and b/audio/skill/dcshuaijie1.mp3 differ diff --git a/audio/skill/dcshuaijie2.mp3 b/audio/skill/dcshuaijie2.mp3 new file mode 100644 index 000000000..111334d82 Binary files /dev/null and b/audio/skill/dcshuaijie2.mp3 differ diff --git a/audio/skill/dcsilve1.mp3 b/audio/skill/dcsilve1.mp3 new file mode 100644 index 000000000..f4fedd66f Binary files /dev/null and b/audio/skill/dcsilve1.mp3 differ diff --git a/audio/skill/dcsilve2.mp3 b/audio/skill/dcsilve2.mp3 new file mode 100644 index 000000000..b2b78f0d3 Binary files /dev/null and b/audio/skill/dcsilve2.mp3 differ diff --git a/audio/skill/dctingxian1.mp3 b/audio/skill/dctingxian1.mp3 new file mode 100644 index 000000000..f539ad40b Binary files /dev/null and b/audio/skill/dctingxian1.mp3 differ diff --git a/audio/skill/dctingxian2.mp3 b/audio/skill/dctingxian2.mp3 new file mode 100644 index 000000000..aaaf77106 Binary files /dev/null and b/audio/skill/dctingxian2.mp3 differ diff --git a/audio/skill/dctongguan1.mp3 b/audio/skill/dctongguan1.mp3 new file mode 100644 index 000000000..3aeee9297 Binary files /dev/null and b/audio/skill/dctongguan1.mp3 differ diff --git a/audio/skill/dctongguan2.mp3 b/audio/skill/dctongguan2.mp3 new file mode 100644 index 000000000..ee022245c Binary files /dev/null and b/audio/skill/dctongguan2.mp3 differ diff --git a/audio/skill/dcwumei1.mp3 b/audio/skill/dcwumei1.mp3 new file mode 100644 index 000000000..2aeefe5f1 Binary files /dev/null and b/audio/skill/dcwumei1.mp3 differ diff --git a/audio/skill/dcwumei2.mp3 b/audio/skill/dcwumei2.mp3 new file mode 100644 index 000000000..c7f1d14f5 Binary files /dev/null and b/audio/skill/dcwumei2.mp3 differ diff --git a/audio/skill/dcwuyuan1.mp3 b/audio/skill/dcwuyuan1.mp3 new file mode 100644 index 000000000..80f115dc7 Binary files /dev/null and b/audio/skill/dcwuyuan1.mp3 differ diff --git a/audio/skill/dcwuyuan2.mp3 b/audio/skill/dcwuyuan2.mp3 new file mode 100644 index 000000000..4b8ea73aa Binary files /dev/null and b/audio/skill/dcwuyuan2.mp3 differ diff --git a/audio/skill/dcxialei1.mp3 b/audio/skill/dcxialei1.mp3 new file mode 100644 index 000000000..ccffcc4bd Binary files /dev/null and b/audio/skill/dcxialei1.mp3 differ diff --git a/audio/skill/dcxialei2.mp3 b/audio/skill/dcxialei2.mp3 new file mode 100644 index 000000000..197f8fbcf Binary files /dev/null and b/audio/skill/dcxialei2.mp3 differ diff --git a/audio/skill/dcxieshou1.mp3 b/audio/skill/dcxieshou1.mp3 new file mode 100644 index 000000000..959a0f4d9 Binary files /dev/null and b/audio/skill/dcxieshou1.mp3 differ diff --git a/audio/skill/dcxieshou2.mp3 b/audio/skill/dcxieshou2.mp3 new file mode 100644 index 000000000..e34ede6c2 Binary files /dev/null and b/audio/skill/dcxieshou2.mp3 differ diff --git a/audio/skill/dcyiyong1.mp3 b/audio/skill/dcyiyong1.mp3 new file mode 100644 index 000000000..a4c59301d Binary files /dev/null and b/audio/skill/dcyiyong1.mp3 differ diff --git a/audio/skill/dcyiyong2.mp3 b/audio/skill/dcyiyong2.mp3 new file mode 100644 index 000000000..8630b3e4c Binary files /dev/null and b/audio/skill/dcyiyong2.mp3 differ diff --git a/audio/skill/dczhanmeng1.mp3 b/audio/skill/dczhanmeng1.mp3 new file mode 100644 index 000000000..566990539 Binary files /dev/null and b/audio/skill/dczhanmeng1.mp3 differ diff --git a/audio/skill/dczhanmeng2.mp3 b/audio/skill/dczhanmeng2.mp3 new file mode 100644 index 000000000..a128289fa Binary files /dev/null and b/audio/skill/dczhanmeng2.mp3 differ diff --git a/audio/skill/dczhengxu1.mp3 b/audio/skill/dczhengxu1.mp3 new file mode 100644 index 000000000..140c96d62 Binary files /dev/null and b/audio/skill/dczhengxu1.mp3 differ diff --git a/audio/skill/dczhengxu2.mp3 b/audio/skill/dczhengxu2.mp3 new file mode 100644 index 000000000..bff031b40 Binary files /dev/null and b/audio/skill/dczhengxu2.mp3 differ diff --git a/audio/skill/dczhenze1.mp3 b/audio/skill/dczhenze1.mp3 new file mode 100644 index 000000000..0d35d043f Binary files /dev/null and b/audio/skill/dczhenze1.mp3 differ diff --git a/audio/skill/dczhenze2.mp3 b/audio/skill/dczhenze2.mp3 new file mode 100644 index 000000000..e32329cd2 Binary files /dev/null and b/audio/skill/dczhenze2.mp3 differ diff --git a/audio/skill/dczuojian1.mp3 b/audio/skill/dczuojian1.mp3 new file mode 100644 index 000000000..f4e204239 Binary files /dev/null and b/audio/skill/dczuojian1.mp3 differ diff --git a/audio/skill/dczuojian2.mp3 b/audio/skill/dczuojian2.mp3 new file mode 100644 index 000000000..0a5ff249d Binary files /dev/null and b/audio/skill/dczuojian2.mp3 differ diff --git a/audio/skill/duansuo1.mp3 b/audio/skill/duansuo1.mp3 new file mode 100644 index 000000000..4ad896326 Binary files /dev/null and b/audio/skill/duansuo1.mp3 differ diff --git a/audio/skill/duansuo2.mp3 b/audio/skill/duansuo2.mp3 new file mode 100644 index 000000000..4930e41b6 Binary files /dev/null and b/audio/skill/duansuo2.mp3 differ diff --git a/audio/skill/fenli_xin_zhuhuan1.mp3 b/audio/skill/fenli_xin_zhuhuan1.mp3 new file mode 100644 index 000000000..f8695e4a2 Binary files /dev/null and b/audio/skill/fenli_xin_zhuhuan1.mp3 differ diff --git a/audio/skill/fenli_xin_zhuhuan2.mp3 b/audio/skill/fenli_xin_zhuhuan2.mp3 new file mode 100644 index 000000000..227ff1474 Binary files /dev/null and b/audio/skill/fenli_xin_zhuhuan2.mp3 differ diff --git a/audio/skill/gnjinfan_gain1.mp3 b/audio/skill/gnjinfan_gain1.mp3 new file mode 100644 index 000000000..ead54ceae Binary files /dev/null and b/audio/skill/gnjinfan_gain1.mp3 differ diff --git a/audio/skill/gnjinfan_gain2.mp3 b/audio/skill/gnjinfan_gain2.mp3 new file mode 100644 index 000000000..f880587c2 Binary files /dev/null and b/audio/skill/gnjinfan_gain2.mp3 differ diff --git a/audio/skill/guanzong1.mp3 b/audio/skill/guanzong1.mp3 new file mode 100644 index 000000000..225bd0831 Binary files /dev/null and b/audio/skill/guanzong1.mp3 differ diff --git a/audio/skill/guanzong2.mp3 b/audio/skill/guanzong2.mp3 new file mode 100644 index 000000000..c359587c8 Binary files /dev/null and b/audio/skill/guanzong2.mp3 differ diff --git a/audio/skill/hannan1.mp3 b/audio/skill/hannan1.mp3 new file mode 100644 index 000000000..7e2c920f8 Binary files /dev/null and b/audio/skill/hannan1.mp3 differ diff --git a/audio/skill/hannan2.mp3 b/audio/skill/hannan2.mp3 new file mode 100644 index 000000000..d2b4acb6c Binary files /dev/null and b/audio/skill/hannan2.mp3 differ diff --git a/audio/skill/jiebing1.mp3 b/audio/skill/jiebing1.mp3 new file mode 100644 index 000000000..8408495d3 Binary files /dev/null and b/audio/skill/jiebing1.mp3 differ diff --git a/audio/skill/jiebing2.mp3 b/audio/skill/jiebing2.mp3 new file mode 100644 index 000000000..439ea6c64 Binary files /dev/null and b/audio/skill/jiebing2.mp3 differ diff --git a/audio/skill/jueman1.mp3 b/audio/skill/jueman1.mp3 new file mode 100644 index 000000000..041884bea Binary files /dev/null and b/audio/skill/jueman1.mp3 differ diff --git a/audio/skill/jueman2.mp3 b/audio/skill/jueman2.mp3 new file mode 100644 index 000000000..5e8fe7a8a Binary files /dev/null and b/audio/skill/jueman2.mp3 differ diff --git a/audio/skill/liandui1.mp3 b/audio/skill/liandui1.mp3 new file mode 100644 index 000000000..4446904d9 Binary files /dev/null and b/audio/skill/liandui1.mp3 differ diff --git a/audio/skill/liandui2.mp3 b/audio/skill/liandui2.mp3 new file mode 100644 index 000000000..0f96c45c2 Binary files /dev/null and b/audio/skill/liandui2.mp3 differ diff --git a/audio/skill/olbixin1.mp3 b/audio/skill/olbixin1.mp3 new file mode 100644 index 000000000..19f8a1acc Binary files /dev/null and b/audio/skill/olbixin1.mp3 differ diff --git a/audio/skill/olbixin2.mp3 b/audio/skill/olbixin2.mp3 new file mode 100644 index 000000000..33767c240 Binary files /dev/null and b/audio/skill/olbixin2.mp3 differ diff --git a/audio/skill/olfeibai1.mp3 b/audio/skill/olfeibai1.mp3 new file mode 100644 index 000000000..ed880b419 Binary files /dev/null and b/audio/skill/olfeibai1.mp3 differ diff --git a/audio/skill/olfeibai2.mp3 b/audio/skill/olfeibai2.mp3 new file mode 100644 index 000000000..dc3bd1c3e Binary files /dev/null and b/audio/skill/olfeibai2.mp3 differ diff --git a/audio/skill/olxiaosi1.mp3 b/audio/skill/olxiaosi1.mp3 new file mode 100644 index 000000000..c7ddae5ca Binary files /dev/null and b/audio/skill/olxiaosi1.mp3 differ diff --git a/audio/skill/olxiaosi2.mp3 b/audio/skill/olxiaosi2.mp3 new file mode 100644 index 000000000..a949fdf37 Binary files /dev/null and b/audio/skill/olxiaosi2.mp3 differ diff --git a/audio/skill/olximo1.mp3 b/audio/skill/olximo1.mp3 new file mode 100644 index 000000000..4a50f91e4 Binary files /dev/null and b/audio/skill/olximo1.mp3 differ diff --git a/audio/skill/olximo2.mp3 b/audio/skill/olximo2.mp3 new file mode 100644 index 000000000..0c73c470a Binary files /dev/null and b/audio/skill/olximo2.mp3 differ diff --git a/audio/skill/olximo3.mp3 b/audio/skill/olximo3.mp3 new file mode 100644 index 000000000..2cd14fb87 Binary files /dev/null and b/audio/skill/olximo3.mp3 differ diff --git a/audio/skill/qingguo_sb_zhenji1.mp3 b/audio/skill/qingguo_sb_zhenji1.mp3 new file mode 100644 index 000000000..fc2a28fdd Binary files /dev/null and b/audio/skill/qingguo_sb_zhenji1.mp3 differ diff --git a/audio/skill/qingguo_sb_zhenji2.mp3 b/audio/skill/qingguo_sb_zhenji2.mp3 new file mode 100644 index 000000000..8e7566995 Binary files /dev/null and b/audio/skill/qingguo_sb_zhenji2.mp3 differ diff --git a/audio/skill/rebizhuan1.mp3 b/audio/skill/rebizhuan1.mp3 new file mode 100644 index 000000000..c7891a5c2 Binary files /dev/null and b/audio/skill/rebizhuan1.mp3 differ diff --git a/audio/skill/rebizhuan2.mp3 b/audio/skill/rebizhuan2.mp3 new file mode 100644 index 000000000..15af75a4f Binary files /dev/null and b/audio/skill/rebizhuan2.mp3 differ diff --git a/audio/skill/refuman1.mp3 b/audio/skill/refuman1.mp3 new file mode 100644 index 000000000..cc47ad375 Binary files /dev/null and b/audio/skill/refuman1.mp3 differ diff --git a/audio/skill/refuman2.mp3 b/audio/skill/refuman2.mp3 new file mode 100644 index 000000000..5025d4626 Binary files /dev/null and b/audio/skill/refuman2.mp3 differ diff --git a/audio/skill/remingce1.mp3 b/audio/skill/remingce1.mp3 new file mode 100644 index 000000000..babb23608 Binary files /dev/null and b/audio/skill/remingce1.mp3 differ diff --git a/audio/skill/remingce2.mp3 b/audio/skill/remingce2.mp3 new file mode 100644 index 000000000..bbd54c16b Binary files /dev/null and b/audio/skill/remingce2.mp3 differ diff --git a/audio/skill/reqice1.mp3 b/audio/skill/reqice1.mp3 new file mode 100644 index 000000000..31487bbba Binary files /dev/null and b/audio/skill/reqice1.mp3 differ diff --git a/audio/skill/reqice2.mp3 b/audio/skill/reqice2.mp3 new file mode 100644 index 000000000..ee41fb106 Binary files /dev/null and b/audio/skill/reqice2.mp3 differ diff --git a/audio/skill/retongbo1.mp3 b/audio/skill/retongbo1.mp3 new file mode 100644 index 000000000..53d0aec13 Binary files /dev/null and b/audio/skill/retongbo1.mp3 differ diff --git a/audio/skill/retongbo2.mp3 b/audio/skill/retongbo2.mp3 new file mode 100644 index 000000000..940276259 Binary files /dev/null and b/audio/skill/retongbo2.mp3 differ diff --git a/audio/skill/rezhiyu1.mp3 b/audio/skill/rezhiyu1.mp3 new file mode 100644 index 000000000..ced2e56c9 Binary files /dev/null and b/audio/skill/rezhiyu1.mp3 differ diff --git a/audio/skill/rezhiyu2.mp3 b/audio/skill/rezhiyu2.mp3 new file mode 100644 index 000000000..7b22fcec3 Binary files /dev/null and b/audio/skill/rezhiyu2.mp3 differ diff --git a/audio/skill/sanshou1.mp3 b/audio/skill/sanshou1.mp3 new file mode 100644 index 000000000..3975099da Binary files /dev/null and b/audio/skill/sanshou1.mp3 differ diff --git a/audio/skill/sanshou2.mp3 b/audio/skill/sanshou2.mp3 new file mode 100644 index 000000000..35790b3ea Binary files /dev/null and b/audio/skill/sanshou2.mp3 differ diff --git a/audio/skill/sbanguo1.mp3 b/audio/skill/sbanguo1.mp3 new file mode 100644 index 000000000..f7dccd914 Binary files /dev/null and b/audio/skill/sbanguo1.mp3 differ diff --git a/audio/skill/sbanguo2.mp3 b/audio/skill/sbanguo2.mp3 new file mode 100644 index 000000000..437f3823f Binary files /dev/null and b/audio/skill/sbanguo2.mp3 differ diff --git a/audio/skill/sbanguo3.mp3 b/audio/skill/sbanguo3.mp3 new file mode 100644 index 000000000..061d7cfc0 Binary files /dev/null and b/audio/skill/sbanguo3.mp3 differ diff --git a/audio/skill/sbbenxi1.mp3 b/audio/skill/sbbenxi1.mp3 new file mode 100644 index 000000000..1d22e30ab Binary files /dev/null and b/audio/skill/sbbenxi1.mp3 differ diff --git a/audio/skill/sbbenxi2.mp3 b/audio/skill/sbbenxi2.mp3 new file mode 100644 index 000000000..668a90abc Binary files /dev/null and b/audio/skill/sbbenxi2.mp3 differ diff --git a/audio/skill/sbbenxi3.mp3 b/audio/skill/sbbenxi3.mp3 new file mode 100644 index 000000000..104e51914 Binary files /dev/null and b/audio/skill/sbbenxi3.mp3 differ diff --git a/audio/skill/sbduanliang1.mp3 b/audio/skill/sbduanliang1.mp3 new file mode 100644 index 000000000..3d1c45969 Binary files /dev/null and b/audio/skill/sbduanliang1.mp3 differ diff --git a/audio/skill/sbduanliang2.mp3 b/audio/skill/sbduanliang2.mp3 new file mode 100644 index 000000000..bba133362 Binary files /dev/null and b/audio/skill/sbduanliang2.mp3 differ diff --git a/audio/skill/sbdujiang1.mp3 b/audio/skill/sbdujiang1.mp3 new file mode 100644 index 000000000..d2116de1a Binary files /dev/null and b/audio/skill/sbdujiang1.mp3 differ diff --git a/audio/skill/sbdujiang2.mp3 b/audio/skill/sbdujiang2.mp3 new file mode 100644 index 000000000..a1940df30 Binary files /dev/null and b/audio/skill/sbdujiang2.mp3 differ diff --git a/audio/skill/sbduojing1.mp3 b/audio/skill/sbduojing1.mp3 new file mode 100644 index 000000000..72b5510b1 Binary files /dev/null and b/audio/skill/sbduojing1.mp3 differ diff --git a/audio/skill/sbduojing2.mp3 b/audio/skill/sbduojing2.mp3 new file mode 100644 index 000000000..8b40db6af Binary files /dev/null and b/audio/skill/sbduojing2.mp3 differ diff --git a/audio/skill/sbfanjian1.mp3 b/audio/skill/sbfanjian1.mp3 new file mode 100644 index 000000000..6313ab2fb Binary files /dev/null and b/audio/skill/sbfanjian1.mp3 differ diff --git a/audio/skill/sbfanjian2.mp3 b/audio/skill/sbfanjian2.mp3 new file mode 100644 index 000000000..79aa2502c Binary files /dev/null and b/audio/skill/sbfanjian2.mp3 differ diff --git a/audio/skill/sbfenwei1.mp3 b/audio/skill/sbfenwei1.mp3 new file mode 100644 index 000000000..dc6a48c87 Binary files /dev/null and b/audio/skill/sbfenwei1.mp3 differ diff --git a/audio/skill/sbfenwei2.mp3 b/audio/skill/sbfenwei2.mp3 new file mode 100644 index 000000000..b4d064745 Binary files /dev/null and b/audio/skill/sbfenwei2.mp3 differ diff --git a/audio/skill/sbguidao1.mp3 b/audio/skill/sbguidao1.mp3 new file mode 100644 index 000000000..300754b91 Binary files /dev/null and b/audio/skill/sbguidao1.mp3 differ diff --git a/audio/skill/sbguidao2.mp3 b/audio/skill/sbguidao2.mp3 new file mode 100644 index 000000000..6575300fc Binary files /dev/null and b/audio/skill/sbguidao2.mp3 differ diff --git a/audio/skill/sbhuangtian1.mp3 b/audio/skill/sbhuangtian1.mp3 new file mode 100644 index 000000000..9c6ced99b Binary files /dev/null and b/audio/skill/sbhuangtian1.mp3 differ diff --git a/audio/skill/sbhuangtian2.mp3 b/audio/skill/sbhuangtian2.mp3 new file mode 100644 index 000000000..a2acb1f1d Binary files /dev/null and b/audio/skill/sbhuangtian2.mp3 differ diff --git a/audio/skill/sbhujia1.mp3 b/audio/skill/sbhujia1.mp3 new file mode 100644 index 000000000..95ea51b5c Binary files /dev/null and b/audio/skill/sbhujia1.mp3 differ diff --git a/audio/skill/sbhujia2.mp3 b/audio/skill/sbhujia2.mp3 new file mode 100644 index 000000000..1cc48df04 Binary files /dev/null and b/audio/skill/sbhujia2.mp3 differ diff --git a/audio/skill/sbjianxiong1.mp3 b/audio/skill/sbjianxiong1.mp3 new file mode 100644 index 000000000..1d27b7081 Binary files /dev/null and b/audio/skill/sbjianxiong1.mp3 differ diff --git a/audio/skill/sbjianxiong2.mp3 b/audio/skill/sbjianxiong2.mp3 new file mode 100644 index 000000000..281d7fc16 Binary files /dev/null and b/audio/skill/sbjianxiong2.mp3 differ diff --git a/audio/skill/sbjiewei1.mp3 b/audio/skill/sbjiewei1.mp3 new file mode 100644 index 000000000..4e2524c49 Binary files /dev/null and b/audio/skill/sbjiewei1.mp3 differ diff --git a/audio/skill/sbjiewei2.mp3 b/audio/skill/sbjiewei2.mp3 new file mode 100644 index 000000000..77c0910fc Binary files /dev/null and b/audio/skill/sbjiewei2.mp3 differ diff --git a/audio/skill/sbjieyin1.mp3 b/audio/skill/sbjieyin1.mp3 new file mode 100644 index 000000000..f1b3dc97f Binary files /dev/null and b/audio/skill/sbjieyin1.mp3 differ diff --git a/audio/skill/sbjieyin2.mp3 b/audio/skill/sbjieyin2.mp3 new file mode 100644 index 000000000..8ebff5f2a Binary files /dev/null and b/audio/skill/sbjieyin2.mp3 differ diff --git a/audio/skill/sbjiuyuan1.mp3 b/audio/skill/sbjiuyuan1.mp3 new file mode 100644 index 000000000..fd854502f Binary files /dev/null and b/audio/skill/sbjiuyuan1.mp3 differ diff --git a/audio/skill/sbjiuyuan2.mp3 b/audio/skill/sbjiuyuan2.mp3 new file mode 100644 index 000000000..c1bc595c4 Binary files /dev/null and b/audio/skill/sbjiuyuan2.mp3 differ diff --git a/audio/skill/sbjushou1.mp3 b/audio/skill/sbjushou1.mp3 new file mode 100644 index 000000000..2bdd46ea6 Binary files /dev/null and b/audio/skill/sbjushou1.mp3 differ diff --git a/audio/skill/sbjushou2.mp3 b/audio/skill/sbjushou2.mp3 new file mode 100644 index 000000000..78efe51fb Binary files /dev/null and b/audio/skill/sbjushou2.mp3 differ diff --git a/audio/skill/sbjushou3.mp3 b/audio/skill/sbjushou3.mp3 new file mode 100644 index 000000000..a6a8ea9fc Binary files /dev/null and b/audio/skill/sbjushou3.mp3 differ diff --git a/audio/skill/sbkeji1.mp3 b/audio/skill/sbkeji1.mp3 new file mode 100644 index 000000000..3d977de4f Binary files /dev/null and b/audio/skill/sbkeji1.mp3 differ diff --git a/audio/skill/sbkeji2.mp3 b/audio/skill/sbkeji2.mp3 new file mode 100644 index 000000000..c15239b42 Binary files /dev/null and b/audio/skill/sbkeji2.mp3 differ diff --git a/audio/skill/sbkurou1.mp3 b/audio/skill/sbkurou1.mp3 new file mode 100644 index 000000000..66983e3a0 Binary files /dev/null and b/audio/skill/sbkurou1.mp3 differ diff --git a/audio/skill/sbkurou2.mp3 b/audio/skill/sbkurou2.mp3 new file mode 100644 index 000000000..ced407e21 Binary files /dev/null and b/audio/skill/sbkurou2.mp3 differ diff --git a/audio/skill/sbleiji1.mp3 b/audio/skill/sbleiji1.mp3 new file mode 100644 index 000000000..43f5bb371 Binary files /dev/null and b/audio/skill/sbleiji1.mp3 differ diff --git a/audio/skill/sbleiji2.mp3 b/audio/skill/sbleiji2.mp3 new file mode 100644 index 000000000..d52376cbe Binary files /dev/null and b/audio/skill/sbleiji2.mp3 differ diff --git a/audio/skill/sbliangzhu1.mp3 b/audio/skill/sbliangzhu1.mp3 new file mode 100644 index 000000000..df18f848d Binary files /dev/null and b/audio/skill/sbliangzhu1.mp3 differ diff --git a/audio/skill/sbliangzhu2.mp3 b/audio/skill/sbliangzhu2.mp3 new file mode 100644 index 000000000..8b60469b0 Binary files /dev/null and b/audio/skill/sbliangzhu2.mp3 differ diff --git a/audio/skill/sbluoshen1.mp3 b/audio/skill/sbluoshen1.mp3 new file mode 100644 index 000000000..f986f6a98 Binary files /dev/null and b/audio/skill/sbluoshen1.mp3 differ diff --git a/audio/skill/sbluoshen2.mp3 b/audio/skill/sbluoshen2.mp3 new file mode 100644 index 000000000..d908611b1 Binary files /dev/null and b/audio/skill/sbluoshen2.mp3 differ diff --git a/audio/skill/sbpaoxiao1.mp3 b/audio/skill/sbpaoxiao1.mp3 new file mode 100644 index 000000000..787cb6353 Binary files /dev/null and b/audio/skill/sbpaoxiao1.mp3 differ diff --git a/audio/skill/sbpaoxiao2.mp3 b/audio/skill/sbpaoxiao2.mp3 new file mode 100644 index 000000000..df223efc5 Binary files /dev/null and b/audio/skill/sbpaoxiao2.mp3 differ diff --git a/audio/skill/sbqiaoshi1.mp3 b/audio/skill/sbqiaoshi1.mp3 new file mode 100644 index 000000000..2f035ca1a Binary files /dev/null and b/audio/skill/sbqiaoshi1.mp3 differ diff --git a/audio/skill/sbqiaoshi2.mp3 b/audio/skill/sbqiaoshi2.mp3 new file mode 100644 index 000000000..ea47f8464 Binary files /dev/null and b/audio/skill/sbqiaoshi2.mp3 differ diff --git a/audio/skill/sbqingzheng1.mp3 b/audio/skill/sbqingzheng1.mp3 new file mode 100644 index 000000000..885c30386 Binary files /dev/null and b/audio/skill/sbqingzheng1.mp3 differ diff --git a/audio/skill/sbqingzheng2.mp3 b/audio/skill/sbqingzheng2.mp3 new file mode 100644 index 000000000..6a0baaf97 Binary files /dev/null and b/audio/skill/sbqingzheng2.mp3 differ diff --git a/audio/skill/sbqixi1.mp3 b/audio/skill/sbqixi1.mp3 new file mode 100644 index 000000000..4a18a1c9f Binary files /dev/null and b/audio/skill/sbqixi1.mp3 differ diff --git a/audio/skill/sbqixi2.mp3 b/audio/skill/sbqixi2.mp3 new file mode 100644 index 000000000..dfde3a980 Binary files /dev/null and b/audio/skill/sbqixi2.mp3 differ diff --git a/audio/skill/sbshipo1.mp3 b/audio/skill/sbshipo1.mp3 new file mode 100644 index 000000000..92a46e76b Binary files /dev/null and b/audio/skill/sbshipo1.mp3 differ diff --git a/audio/skill/sbshipo2.mp3 b/audio/skill/sbshipo2.mp3 new file mode 100644 index 000000000..ec9579888 Binary files /dev/null and b/audio/skill/sbshipo2.mp3 differ diff --git a/audio/skill/sbtieji1.mp3 b/audio/skill/sbtieji1.mp3 new file mode 100644 index 000000000..1dbeba7ea Binary files /dev/null and b/audio/skill/sbtieji1.mp3 differ diff --git a/audio/skill/sbtieji2.mp3 b/audio/skill/sbtieji2.mp3 new file mode 100644 index 000000000..1ee4988bc Binary files /dev/null and b/audio/skill/sbtieji2.mp3 differ diff --git a/audio/skill/sbtongye1.mp3 b/audio/skill/sbtongye1.mp3 new file mode 100644 index 000000000..625ad5e76 Binary files /dev/null and b/audio/skill/sbtongye1.mp3 differ diff --git a/audio/skill/sbtongye2.mp3 b/audio/skill/sbtongye2.mp3 new file mode 100644 index 000000000..4b063ed8f Binary files /dev/null and b/audio/skill/sbtongye2.mp3 differ diff --git a/audio/skill/sbxiaoji1.mp3 b/audio/skill/sbxiaoji1.mp3 new file mode 100644 index 000000000..b24660945 Binary files /dev/null and b/audio/skill/sbxiaoji1.mp3 differ diff --git a/audio/skill/sbxiaoji2.mp3 b/audio/skill/sbxiaoji2.mp3 new file mode 100644 index 000000000..c9f7acfc2 Binary files /dev/null and b/audio/skill/sbxiaoji2.mp3 differ diff --git a/audio/skill/sbxieji1.mp3 b/audio/skill/sbxieji1.mp3 new file mode 100644 index 000000000..afabf9bc8 Binary files /dev/null and b/audio/skill/sbxieji1.mp3 differ diff --git a/audio/skill/sbxieji2.mp3 b/audio/skill/sbxieji2.mp3 new file mode 100644 index 000000000..036f82c72 Binary files /dev/null and b/audio/skill/sbxieji2.mp3 differ diff --git a/audio/skill/sbxieji3.mp3 b/audio/skill/sbxieji3.mp3 new file mode 100644 index 000000000..0d0466237 Binary files /dev/null and b/audio/skill/sbxieji3.mp3 differ diff --git a/audio/skill/sbyanyu1.mp3 b/audio/skill/sbyanyu1.mp3 new file mode 100644 index 000000000..1791a9b11 Binary files /dev/null and b/audio/skill/sbyanyu1.mp3 differ diff --git a/audio/skill/sbyanyu2.mp3 b/audio/skill/sbyanyu2.mp3 new file mode 100644 index 000000000..9b9759e29 Binary files /dev/null and b/audio/skill/sbyanyu2.mp3 differ diff --git a/audio/skill/sbyingzi1.mp3 b/audio/skill/sbyingzi1.mp3 new file mode 100644 index 000000000..ad055a412 Binary files /dev/null and b/audio/skill/sbyingzi1.mp3 differ diff --git a/audio/skill/sbyingzi2.mp3 b/audio/skill/sbyingzi2.mp3 new file mode 100644 index 000000000..bef9918ff Binary files /dev/null and b/audio/skill/sbyingzi2.mp3 differ diff --git a/audio/skill/sbzhaxiang1.mp3 b/audio/skill/sbzhaxiang1.mp3 new file mode 100644 index 000000000..a778c9c55 Binary files /dev/null and b/audio/skill/sbzhaxiang1.mp3 differ diff --git a/audio/skill/sbzhaxiang2.mp3 b/audio/skill/sbzhaxiang2.mp3 new file mode 100644 index 000000000..3ce0adcb4 Binary files /dev/null and b/audio/skill/sbzhaxiang2.mp3 differ diff --git a/audio/skill/sbzhiheng1.mp3 b/audio/skill/sbzhiheng1.mp3 new file mode 100644 index 000000000..22cde35a3 Binary files /dev/null and b/audio/skill/sbzhiheng1.mp3 differ diff --git a/audio/skill/sbzhiheng2.mp3 b/audio/skill/sbzhiheng2.mp3 new file mode 100644 index 000000000..7c556a1cc Binary files /dev/null and b/audio/skill/sbzhiheng2.mp3 differ diff --git a/audio/skill/sijun1.mp3 b/audio/skill/sijun1.mp3 new file mode 100644 index 000000000..b3c3cb090 Binary files /dev/null and b/audio/skill/sijun1.mp3 differ diff --git a/audio/skill/sijun2.mp3 b/audio/skill/sijun2.mp3 new file mode 100644 index 000000000..5681857e2 Binary files /dev/null and b/audio/skill/sijun2.mp3 differ diff --git a/audio/skill/spdaming1.mp3 b/audio/skill/spdaming1.mp3 new file mode 100644 index 000000000..d41e3401b Binary files /dev/null and b/audio/skill/spdaming1.mp3 differ diff --git a/audio/skill/spdaming2.mp3 b/audio/skill/spdaming2.mp3 new file mode 100644 index 000000000..193f505dc Binary files /dev/null and b/audio/skill/spdaming2.mp3 differ diff --git a/audio/skill/spdaming3.mp3 b/audio/skill/spdaming3.mp3 new file mode 100644 index 000000000..f531312e1 Binary files /dev/null and b/audio/skill/spdaming3.mp3 differ diff --git a/audio/skill/spxiaoni1.mp3 b/audio/skill/spxiaoni1.mp3 new file mode 100644 index 000000000..3f13ca13a Binary files /dev/null and b/audio/skill/spxiaoni1.mp3 differ diff --git a/audio/skill/spxiaoni2.mp3 b/audio/skill/spxiaoni2.mp3 new file mode 100644 index 000000000..c440bacfd Binary files /dev/null and b/audio/skill/spxiaoni2.mp3 differ diff --git a/audio/skill/tianjie1.mp3 b/audio/skill/tianjie1.mp3 new file mode 100644 index 000000000..4403bd9ab Binary files /dev/null and b/audio/skill/tianjie1.mp3 differ diff --git a/audio/skill/tianjie2.mp3 b/audio/skill/tianjie2.mp3 new file mode 100644 index 000000000..a7b9d120a Binary files /dev/null and b/audio/skill/tianjie2.mp3 differ diff --git a/audio/skill/twbingde1.mp3 b/audio/skill/twbingde1.mp3 new file mode 100644 index 000000000..c191907a4 Binary files /dev/null and b/audio/skill/twbingde1.mp3 differ diff --git a/audio/skill/twbingde2.mp3 b/audio/skill/twbingde2.mp3 new file mode 100644 index 000000000..f0b6e78fb Binary files /dev/null and b/audio/skill/twbingde2.mp3 differ diff --git a/audio/skill/twchaofeng1.mp3 b/audio/skill/twchaofeng1.mp3 new file mode 100644 index 000000000..8422d0c77 Binary files /dev/null and b/audio/skill/twchaofeng1.mp3 differ diff --git a/audio/skill/twchaofeng2.mp3 b/audio/skill/twchaofeng2.mp3 new file mode 100644 index 000000000..a03bc0cfa Binary files /dev/null and b/audio/skill/twchaofeng2.mp3 differ diff --git a/audio/skill/twchuanshu1.mp3 b/audio/skill/twchuanshu1.mp3 new file mode 100644 index 000000000..86a343e86 Binary files /dev/null and b/audio/skill/twchuanshu1.mp3 differ diff --git a/audio/skill/twchuanshu2.mp3 b/audio/skill/twchuanshu2.mp3 new file mode 100644 index 000000000..ed3168c3a Binary files /dev/null and b/audio/skill/twchuanshu2.mp3 differ diff --git a/audio/skill/twdingzhen1.mp3 b/audio/skill/twdingzhen1.mp3 new file mode 100644 index 000000000..c190de776 Binary files /dev/null and b/audio/skill/twdingzhen1.mp3 differ diff --git a/audio/skill/twdingzhen2.mp3 b/audio/skill/twdingzhen2.mp3 new file mode 100644 index 000000000..79fdb28cf Binary files /dev/null and b/audio/skill/twdingzhen2.mp3 differ diff --git a/audio/skill/twfenwu1.mp3 b/audio/skill/twfenwu1.mp3 new file mode 100644 index 000000000..731869120 Binary files /dev/null and b/audio/skill/twfenwu1.mp3 differ diff --git a/audio/skill/twfenwu2.mp3 b/audio/skill/twfenwu2.mp3 new file mode 100644 index 000000000..935d8adc4 Binary files /dev/null and b/audio/skill/twfenwu2.mp3 differ diff --git a/audio/skill/twfujian1.mp3 b/audio/skill/twfujian1.mp3 new file mode 100644 index 000000000..04d36d0ab Binary files /dev/null and b/audio/skill/twfujian1.mp3 differ diff --git a/audio/skill/twfujian2.mp3 b/audio/skill/twfujian2.mp3 new file mode 100644 index 000000000..13d57da62 Binary files /dev/null and b/audio/skill/twfujian2.mp3 differ diff --git a/audio/skill/twfupan1.mp3 b/audio/skill/twfupan1.mp3 new file mode 100644 index 000000000..e2f1d370b Binary files /dev/null and b/audio/skill/twfupan1.mp3 differ diff --git a/audio/skill/twfupan2.mp3 b/audio/skill/twfupan2.mp3 new file mode 100644 index 000000000..4d19aa27e Binary files /dev/null and b/audio/skill/twfupan2.mp3 differ diff --git a/audio/skill/twfupan3.mp3 b/audio/skill/twfupan3.mp3 new file mode 100644 index 000000000..43b024076 Binary files /dev/null and b/audio/skill/twfupan3.mp3 differ diff --git a/audio/skill/twgongge1.mp3 b/audio/skill/twgongge1.mp3 new file mode 100644 index 000000000..308858829 Binary files /dev/null and b/audio/skill/twgongge1.mp3 differ diff --git a/audio/skill/twgongge2.mp3 b/audio/skill/twgongge2.mp3 new file mode 100644 index 000000000..86d1f1c43 Binary files /dev/null and b/audio/skill/twgongge2.mp3 differ diff --git a/audio/skill/twgongge3.mp3 b/audio/skill/twgongge3.mp3 new file mode 100644 index 000000000..7e38b9967 Binary files /dev/null and b/audio/skill/twgongge3.mp3 differ diff --git a/audio/skill/twjiange1.mp3 b/audio/skill/twjiange1.mp3 new file mode 100644 index 000000000..14ddc504a Binary files /dev/null and b/audio/skill/twjiange1.mp3 differ diff --git a/audio/skill/twjiange2.mp3 b/audio/skill/twjiange2.mp3 new file mode 100644 index 000000000..c5e64dd05 Binary files /dev/null and b/audio/skill/twjiange2.mp3 differ diff --git a/audio/skill/twjianming1.mp3 b/audio/skill/twjianming1.mp3 new file mode 100644 index 000000000..b1d91f9c8 Binary files /dev/null and b/audio/skill/twjianming1.mp3 differ diff --git a/audio/skill/twjianming2.mp3 b/audio/skill/twjianming2.mp3 new file mode 100644 index 000000000..78b8bd297 Binary files /dev/null and b/audio/skill/twjianming2.mp3 differ diff --git a/audio/skill/twjianwei1.mp3 b/audio/skill/twjianwei1.mp3 new file mode 100644 index 000000000..3582c6d18 Binary files /dev/null and b/audio/skill/twjianwei1.mp3 differ diff --git a/audio/skill/twjianwei2.mp3 b/audio/skill/twjianwei2.mp3 new file mode 100644 index 000000000..85e63a923 Binary files /dev/null and b/audio/skill/twjianwei2.mp3 differ diff --git a/audio/skill/twjiaohua1.mp3 b/audio/skill/twjiaohua1.mp3 new file mode 100644 index 000000000..63c6a9fb0 Binary files /dev/null and b/audio/skill/twjiaohua1.mp3 differ diff --git a/audio/skill/twjiaohua2.mp3 b/audio/skill/twjiaohua2.mp3 new file mode 100644 index 000000000..e8140f059 Binary files /dev/null and b/audio/skill/twjiaohua2.mp3 differ diff --git a/audio/skill/twjichou1.mp3 b/audio/skill/twjichou1.mp3 new file mode 100644 index 000000000..6f8f7b212 Binary files /dev/null and b/audio/skill/twjichou1.mp3 differ diff --git a/audio/skill/twjichou2.mp3 b/audio/skill/twjichou2.mp3 new file mode 100644 index 000000000..9a8f6fc46 Binary files /dev/null and b/audio/skill/twjichou2.mp3 differ diff --git a/audio/skill/twjiekuang1.mp3 b/audio/skill/twjiekuang1.mp3 new file mode 100644 index 000000000..0d008e2e3 Binary files /dev/null and b/audio/skill/twjiekuang1.mp3 differ diff --git a/audio/skill/twjiekuang2.mp3 b/audio/skill/twjiekuang2.mp3 new file mode 100644 index 000000000..1adb0a0f8 Binary files /dev/null and b/audio/skill/twjiekuang2.mp3 differ diff --git a/audio/skill/twjijiang1.mp3 b/audio/skill/twjijiang1.mp3 new file mode 100644 index 000000000..55ffa8498 Binary files /dev/null and b/audio/skill/twjijiang1.mp3 differ diff --git a/audio/skill/twjijiang2.mp3 b/audio/skill/twjijiang2.mp3 new file mode 100644 index 000000000..49662b2f0 Binary files /dev/null and b/audio/skill/twjijiang2.mp3 differ diff --git a/audio/skill/twjizhu2.mp3 b/audio/skill/twjizhu2.mp3 new file mode 100644 index 000000000..d5c7ec948 Binary files /dev/null and b/audio/skill/twjizhu2.mp3 differ diff --git a/audio/skill/twjizhu3.mp3 b/audio/skill/twjizhu3.mp3 new file mode 100644 index 000000000..ac9cc31ce Binary files /dev/null and b/audio/skill/twjizhu3.mp3 differ diff --git a/audio/skill/twjuchen1.mp3 b/audio/skill/twjuchen1.mp3 new file mode 100644 index 000000000..dda023513 Binary files /dev/null and b/audio/skill/twjuchen1.mp3 differ diff --git a/audio/skill/twjuchen2.mp3 b/audio/skill/twjuchen2.mp3 new file mode 100644 index 000000000..c8f45f09d Binary files /dev/null and b/audio/skill/twjuchen2.mp3 differ diff --git a/audio/skill/twjuntun1.mp3 b/audio/skill/twjuntun1.mp3 new file mode 100644 index 000000000..47f01753a Binary files /dev/null and b/audio/skill/twjuntun1.mp3 differ diff --git a/audio/skill/twjuntun2.mp3 b/audio/skill/twjuntun2.mp3 new file mode 100644 index 000000000..e797a3161 Binary files /dev/null and b/audio/skill/twjuntun2.mp3 differ diff --git a/audio/skill/twkujian1.mp3 b/audio/skill/twkujian1.mp3 new file mode 100644 index 000000000..95eb0927e Binary files /dev/null and b/audio/skill/twkujian1.mp3 differ diff --git a/audio/skill/twkujian2.mp3 b/audio/skill/twkujian2.mp3 new file mode 100644 index 000000000..122acf0d0 Binary files /dev/null and b/audio/skill/twkujian2.mp3 differ diff --git a/audio/skill/twkujian3.mp3 b/audio/skill/twkujian3.mp3 new file mode 100644 index 000000000..f20418d69 Binary files /dev/null and b/audio/skill/twkujian3.mp3 differ diff --git a/audio/skill/twkunsi1.mp3 b/audio/skill/twkunsi1.mp3 new file mode 100644 index 000000000..987aaa215 Binary files /dev/null and b/audio/skill/twkunsi1.mp3 differ diff --git a/audio/skill/twkunsi2.mp3 b/audio/skill/twkunsi2.mp3 new file mode 100644 index 000000000..9ec213890 Binary files /dev/null and b/audio/skill/twkunsi2.mp3 differ diff --git a/audio/skill/twlanjiang.mp3 b/audio/skill/twlanjiang.mp3 new file mode 100644 index 000000000..837b51281 Binary files /dev/null and b/audio/skill/twlanjiang.mp3 differ diff --git a/audio/skill/twluanlve1.mp3 b/audio/skill/twluanlve1.mp3 new file mode 100644 index 000000000..ec148eecb Binary files /dev/null and b/audio/skill/twluanlve1.mp3 differ diff --git a/audio/skill/twluanlve2.mp3 b/audio/skill/twluanlve2.mp3 new file mode 100644 index 000000000..9780be705 Binary files /dev/null and b/audio/skill/twluanlve2.mp3 differ diff --git a/audio/skill/twluannian1.mp3 b/audio/skill/twluannian1.mp3 new file mode 100644 index 000000000..a3c57a661 Binary files /dev/null and b/audio/skill/twluannian1.mp3 differ diff --git a/audio/skill/twluannian2.mp3 b/audio/skill/twluannian2.mp3 new file mode 100644 index 000000000..e19916760 Binary files /dev/null and b/audio/skill/twluannian2.mp3 differ diff --git a/audio/skill/twlvren1.mp3 b/audio/skill/twlvren1.mp3 new file mode 100644 index 000000000..518ee743c Binary files /dev/null and b/audio/skill/twlvren1.mp3 differ diff --git a/audio/skill/twlvren2.mp3 b/audio/skill/twlvren2.mp3 new file mode 100644 index 000000000..44a8697f9 Binary files /dev/null and b/audio/skill/twlvren2.mp3 differ diff --git a/audio/skill/twmutao1.mp3 b/audio/skill/twmutao1.mp3 new file mode 100644 index 000000000..30a5fd533 Binary files /dev/null and b/audio/skill/twmutao1.mp3 differ diff --git a/audio/skill/twmutao2.mp3 b/audio/skill/twmutao2.mp3 new file mode 100644 index 000000000..fc0f4ac25 Binary files /dev/null and b/audio/skill/twmutao2.mp3 differ diff --git a/audio/skill/twneirao1.mp3 b/audio/skill/twneirao1.mp3 new file mode 100644 index 000000000..7c7b1925b Binary files /dev/null and b/audio/skill/twneirao1.mp3 differ diff --git a/audio/skill/twneirao2.mp3 b/audio/skill/twneirao2.mp3 new file mode 100644 index 000000000..646a345e7 Binary files /dev/null and b/audio/skill/twneirao2.mp3 differ diff --git a/audio/skill/twqingkou1.mp3 b/audio/skill/twqingkou1.mp3 new file mode 100644 index 000000000..f304c11e8 Binary files /dev/null and b/audio/skill/twqingkou1.mp3 differ diff --git a/audio/skill/twqingkou2.mp3 b/audio/skill/twqingkou2.mp3 new file mode 100644 index 000000000..a3dbd3fde Binary files /dev/null and b/audio/skill/twqingkou2.mp3 differ diff --git a/audio/skill/twqingren1.mp3 b/audio/skill/twqingren1.mp3 new file mode 100644 index 000000000..a391db416 Binary files /dev/null and b/audio/skill/twqingren1.mp3 differ diff --git a/audio/skill/twqingren2.mp3 b/audio/skill/twqingren2.mp3 new file mode 100644 index 000000000..c8f3f3727 Binary files /dev/null and b/audio/skill/twqingren2.mp3 differ diff --git a/audio/skill/twqingtao1.mp3 b/audio/skill/twqingtao1.mp3 new file mode 100644 index 000000000..32fd3659a Binary files /dev/null and b/audio/skill/twqingtao1.mp3 differ diff --git a/audio/skill/twqingtao2.mp3 b/audio/skill/twqingtao2.mp3 new file mode 100644 index 000000000..e9f629e5d Binary files /dev/null and b/audio/skill/twqingtao2.mp3 differ diff --git a/audio/skill/twqiongji1.mp3 b/audio/skill/twqiongji1.mp3 new file mode 100644 index 000000000..60d70beca Binary files /dev/null and b/audio/skill/twqiongji1.mp3 differ diff --git a/audio/skill/twqiongji2.mp3 b/audio/skill/twqiongji2.mp3 new file mode 100644 index 000000000..e01defcc8 Binary files /dev/null and b/audio/skill/twqiongji2.mp3 differ diff --git a/audio/skill/twrende1.mp3 b/audio/skill/twrende1.mp3 new file mode 100644 index 000000000..1842d2337 Binary files /dev/null and b/audio/skill/twrende1.mp3 differ diff --git a/audio/skill/twrende2.mp3 b/audio/skill/twrende2.mp3 new file mode 100644 index 000000000..a12f36fb3 Binary files /dev/null and b/audio/skill/twrende2.mp3 differ diff --git a/audio/skill/twrende3.mp3 b/audio/skill/twrende3.mp3 new file mode 100644 index 000000000..68866a572 Binary files /dev/null and b/audio/skill/twrende3.mp3 differ diff --git a/audio/skill/twruilian1.mp3 b/audio/skill/twruilian1.mp3 new file mode 100644 index 000000000..0df0e6253 Binary files /dev/null and b/audio/skill/twruilian1.mp3 differ diff --git a/audio/skill/twruilian2.mp3 b/audio/skill/twruilian2.mp3 new file mode 100644 index 000000000..847dc9d1c Binary files /dev/null and b/audio/skill/twruilian2.mp3 differ diff --git a/audio/skill/twshigong1.mp3 b/audio/skill/twshigong1.mp3 new file mode 100644 index 000000000..9a055bee6 Binary files /dev/null and b/audio/skill/twshigong1.mp3 differ diff --git a/audio/skill/twshigong2.mp3 b/audio/skill/twshigong2.mp3 new file mode 100644 index 000000000..bc49e1b2b Binary files /dev/null and b/audio/skill/twshigong2.mp3 differ diff --git a/audio/skill/twsuizheng1.mp3 b/audio/skill/twsuizheng1.mp3 new file mode 100644 index 000000000..b9728c689 Binary files /dev/null and b/audio/skill/twsuizheng1.mp3 differ diff --git a/audio/skill/twsuizheng2.mp3 b/audio/skill/twsuizheng2.mp3 new file mode 100644 index 000000000..48c648c32 Binary files /dev/null and b/audio/skill/twsuizheng2.mp3 differ diff --git a/audio/skill/twsuizheng3.mp3 b/audio/skill/twsuizheng3.mp3 new file mode 100644 index 000000000..c3fe1ca38 Binary files /dev/null and b/audio/skill/twsuizheng3.mp3 differ diff --git a/audio/skill/twtanfeng1.mp3 b/audio/skill/twtanfeng1.mp3 new file mode 100644 index 000000000..3eb62e243 Binary files /dev/null and b/audio/skill/twtanfeng1.mp3 differ diff --git a/audio/skill/twtanfeng2.mp3 b/audio/skill/twtanfeng2.mp3 new file mode 100644 index 000000000..ae5a21104 Binary files /dev/null and b/audio/skill/twtanfeng2.mp3 differ diff --git a/audio/skill/twtiaoxin1.mp3 b/audio/skill/twtiaoxin1.mp3 new file mode 100644 index 000000000..9cd0efc22 Binary files /dev/null and b/audio/skill/twtiaoxin1.mp3 differ diff --git a/audio/skill/twtiaoxin2.mp3 b/audio/skill/twtiaoxin2.mp3 new file mode 100644 index 000000000..6d34381cb Binary files /dev/null and b/audio/skill/twtiaoxin2.mp3 differ diff --git a/audio/skill/twtuidao1.mp3 b/audio/skill/twtuidao1.mp3 new file mode 100644 index 000000000..55cfbe985 Binary files /dev/null and b/audio/skill/twtuidao1.mp3 differ diff --git a/audio/skill/twtuidao2.mp3 b/audio/skill/twtuidao2.mp3 new file mode 100644 index 000000000..66754810e Binary files /dev/null and b/audio/skill/twtuidao2.mp3 differ diff --git a/audio/skill/twxiafeng1.mp3 b/audio/skill/twxiafeng1.mp3 new file mode 100644 index 000000000..547d3cc71 Binary files /dev/null and b/audio/skill/twxiafeng1.mp3 differ diff --git a/audio/skill/twxiafeng2.mp3 b/audio/skill/twxiafeng2.mp3 new file mode 100644 index 000000000..eb07b907c Binary files /dev/null and b/audio/skill/twxiafeng2.mp3 differ diff --git a/audio/skill/twxiawang1.mp3 b/audio/skill/twxiawang1.mp3 new file mode 100644 index 000000000..315279cfc Binary files /dev/null and b/audio/skill/twxiawang1.mp3 differ diff --git a/audio/skill/twxiawang2.mp3 b/audio/skill/twxiawang2.mp3 new file mode 100644 index 000000000..17892e2d5 Binary files /dev/null and b/audio/skill/twxiawang2.mp3 differ diff --git a/audio/skill/twxiawei1.mp3 b/audio/skill/twxiawei1.mp3 new file mode 100644 index 000000000..c06df1bd0 Binary files /dev/null and b/audio/skill/twxiawei1.mp3 differ diff --git a/audio/skill/twxiawei2.mp3 b/audio/skill/twxiawei2.mp3 new file mode 100644 index 000000000..8f8fd6945 Binary files /dev/null and b/audio/skill/twxiawei2.mp3 differ diff --git a/audio/skill/twxingzhui1.mp3 b/audio/skill/twxingzhui1.mp3 new file mode 100644 index 000000000..ccb08f0ef Binary files /dev/null and b/audio/skill/twxingzhui1.mp3 differ diff --git a/audio/skill/twxingzhui2.mp3 b/audio/skill/twxingzhui2.mp3 new file mode 100644 index 000000000..5e35eec76 Binary files /dev/null and b/audio/skill/twxingzhui2.mp3 differ diff --git a/audio/skill/twxiongjun1.mp3 b/audio/skill/twxiongjun1.mp3 new file mode 100644 index 000000000..c1f2a0a3a Binary files /dev/null and b/audio/skill/twxiongjun1.mp3 differ diff --git a/audio/skill/twxiongjun2.mp3 b/audio/skill/twxiongjun2.mp3 new file mode 100644 index 000000000..e0dc1353c Binary files /dev/null and b/audio/skill/twxiongjun2.mp3 differ diff --git a/audio/skill/twxiongxi1.mp3 b/audio/skill/twxiongxi1.mp3 new file mode 100644 index 000000000..2d8ea0021 Binary files /dev/null and b/audio/skill/twxiongxi1.mp3 differ diff --git a/audio/skill/twxiongxi2.mp3 b/audio/skill/twxiongxi2.mp3 new file mode 100644 index 000000000..0ddee973e Binary files /dev/null and b/audio/skill/twxiongxi2.mp3 differ diff --git a/audio/skill/twxiongzheng1.mp3 b/audio/skill/twxiongzheng1.mp3 new file mode 100644 index 000000000..011c7436d Binary files /dev/null and b/audio/skill/twxiongzheng1.mp3 differ diff --git a/audio/skill/twxiongzheng2.mp3 b/audio/skill/twxiongzheng2.mp3 new file mode 100644 index 000000000..8006d6970 Binary files /dev/null and b/audio/skill/twxiongzheng2.mp3 differ diff --git a/audio/skill/twyimou1.mp3 b/audio/skill/twyimou1.mp3 new file mode 100644 index 000000000..4d63177ff Binary files /dev/null and b/audio/skill/twyimou1.mp3 differ diff --git a/audio/skill/twyimou2.mp3 b/audio/skill/twyimou2.mp3 new file mode 100644 index 000000000..9b0de66c6 Binary files /dev/null and b/audio/skill/twyimou2.mp3 differ diff --git a/audio/skill/twyouye1.mp3 b/audio/skill/twyouye1.mp3 new file mode 100644 index 000000000..6a82efe86 Binary files /dev/null and b/audio/skill/twyouye1.mp3 differ diff --git a/audio/skill/twyouye2.mp3 b/audio/skill/twyouye2.mp3 new file mode 100644 index 000000000..f93cd6a0f Binary files /dev/null and b/audio/skill/twyouye2.mp3 differ diff --git a/audio/skill/twyulong1.mp3 b/audio/skill/twyulong1.mp3 new file mode 100644 index 000000000..67cdaab9d Binary files /dev/null and b/audio/skill/twyulong1.mp3 differ diff --git a/audio/skill/twyulong2.mp3 b/audio/skill/twyulong2.mp3 new file mode 100644 index 000000000..cfd3a4b4d Binary files /dev/null and b/audio/skill/twyulong2.mp3 differ diff --git a/audio/skill/twzhangwu1.mp3 b/audio/skill/twzhangwu1.mp3 new file mode 100644 index 000000000..92797b2b7 Binary files /dev/null and b/audio/skill/twzhangwu1.mp3 differ diff --git a/audio/skill/twzhangwu2.mp3 b/audio/skill/twzhangwu2.mp3 new file mode 100644 index 000000000..cf5edcafc Binary files /dev/null and b/audio/skill/twzhangwu2.mp3 differ diff --git a/audio/skill/twzhenhu1.mp3 b/audio/skill/twzhenhu1.mp3 new file mode 100644 index 000000000..fcb4fb923 Binary files /dev/null and b/audio/skill/twzhenhu1.mp3 differ diff --git a/audio/skill/twzhenhu2.mp3 b/audio/skill/twzhenhu2.mp3 new file mode 100644 index 000000000..054e6de3d Binary files /dev/null and b/audio/skill/twzhenhu2.mp3 differ diff --git a/audio/skill/twzhiji1.mp3 b/audio/skill/twzhiji1.mp3 new file mode 100644 index 000000000..609485956 Binary files /dev/null and b/audio/skill/twzhiji1.mp3 differ diff --git a/audio/skill/twzhiji2.mp3 b/audio/skill/twzhiji2.mp3 new file mode 100644 index 000000000..8e27ddf13 Binary files /dev/null and b/audio/skill/twzhiji2.mp3 differ diff --git a/audio/skill/twzhuidu1.mp3 b/audio/skill/twzhuidu1.mp3 new file mode 100644 index 000000000..74b5ed46f Binary files /dev/null and b/audio/skill/twzhuidu1.mp3 differ diff --git a/audio/skill/twzhuidu2.mp3 b/audio/skill/twzhuidu2.mp3 new file mode 100644 index 000000000..543d54ac2 Binary files /dev/null and b/audio/skill/twzhuidu2.mp3 differ diff --git a/audio/skill/xinpingkou1.mp3 b/audio/skill/xinpingkou1.mp3 new file mode 100644 index 000000000..e923cf139 Binary files /dev/null and b/audio/skill/xinpingkou1.mp3 differ diff --git a/audio/skill/xinpingkou2.mp3 b/audio/skill/xinpingkou2.mp3 new file mode 100644 index 000000000..b35a68651 Binary files /dev/null and b/audio/skill/xinpingkou2.mp3 differ diff --git a/audio/skill/xinqingxi1.mp3 b/audio/skill/xinqingxi1.mp3 new file mode 100644 index 000000000..a7be039ab Binary files /dev/null and b/audio/skill/xinqingxi1.mp3 differ diff --git a/audio/skill/xinqingxi2.mp3 b/audio/skill/xinqingxi2.mp3 new file mode 100644 index 000000000..5b5a86dee Binary files /dev/null and b/audio/skill/xinqingxi2.mp3 differ diff --git a/audio/skill/yijin1.mp3 b/audio/skill/yijin1.mp3 new file mode 100644 index 000000000..936d416c3 Binary files /dev/null and b/audio/skill/yijin1.mp3 differ diff --git a/audio/skill/yijin2.mp3 b/audio/skill/yijin2.mp3 new file mode 100644 index 000000000..ce063d78a Binary files /dev/null and b/audio/skill/yijin2.mp3 differ diff --git a/audio/skill/yijin3.mp3 b/audio/skill/yijin3.mp3 new file mode 100644 index 000000000..93cd6cf66 Binary files /dev/null and b/audio/skill/yijin3.mp3 differ diff --git a/audio/skill/yizhao1.mp3 b/audio/skill/yizhao1.mp3 new file mode 100644 index 000000000..91fb938fc Binary files /dev/null and b/audio/skill/yizhao1.mp3 differ diff --git a/audio/skill/yizhao2.mp3 b/audio/skill/yizhao2.mp3 new file mode 100644 index 000000000..2ed359572 Binary files /dev/null and b/audio/skill/yizhao2.mp3 differ diff --git a/audio/skill/zhichi_re_chengong1.mp3 b/audio/skill/zhichi_re_chengong1.mp3 new file mode 100644 index 000000000..c4be17369 Binary files /dev/null and b/audio/skill/zhichi_re_chengong1.mp3 differ diff --git a/audio/skill/zhichi_re_chengong2.mp3 b/audio/skill/zhichi_re_chengong2.mp3 new file mode 100644 index 000000000..92c7b57c6 Binary files /dev/null and b/audio/skill/zhichi_re_chengong2.mp3 differ diff --git a/audio/skill/zhujian.mp3 b/audio/skill/zhujian.mp3 new file mode 100644 index 000000000..5ca8b254d Binary files /dev/null and b/audio/skill/zhujian.mp3 differ diff --git a/audio/skill/zhujian1.mp3 b/audio/skill/zhujian1.mp3 new file mode 100644 index 000000000..687d7ab32 Binary files /dev/null and b/audio/skill/zhujian1.mp3 differ diff --git a/card/extra.js b/card/extra.js index 7c843b736..a0fba9d92 100644 --- a/card/extra.js +++ b/card/extra.js @@ -944,7 +944,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ hualiu_info:'你的防御距离+1', zhuque_bg:'扇', zhuque_skill:'朱雀羽扇', - zhuque_info:'当你声明使用普【杀】时,你可以为此【杀】赋予火属性。', + zhuque_info:'当你声明使用普【杀】后,你可以为此【杀】赋予火属性。', guding:'古锭刀', guding_info:'锁定技,当你因执行【杀】的效果而对目标角色造成伤害时,若其没有手牌,则此伤害+1。', guding_skill:'古锭刀', diff --git a/card/standard.js b/card/standard.js index 481c144b9..71b626e86 100644 --- a/card/standard.js +++ b/card/standard.js @@ -2838,7 +2838,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ renwang_skill_info:'锁定技,黑色【杀】对你无效', sha_info:'出牌阶段,对你攻击范围内的一名角色使用。其须使用一张【闪】,否则你对其造成1点伤害。', shan_info:'抵消一张【杀】', - tao_info:'①出牌阶段,对自己使用,目标角色一点体力。②当有角色处于濒死状态时,对该角色使用。目标角色回复1点体力。', + tao_info:'①出牌阶段,对自己使用,目标角色回复1点体力。②当有角色处于濒死状态时,对该角色使用。目标角色回复1点体力。', bagua_info:'当你需要使用或打出一张【闪】时,你可以进行判定。若结果为红色,则你视为使用或打出一张【闪】。', bagua_skill_info:'当你需要使用或打出一张【闪】时,你可以进行判定。若结果为红色,则你视为使用或打出一张【闪】。', jueying_info:'锁定技,其他角色计算与你的距离+1。', diff --git a/card/yingbian.js b/card/yingbian.js index b737d88d3..1a0d39d63 100644 --- a/card/yingbian.js +++ b/card/yingbian.js @@ -808,7 +808,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ chuqibuyi_info:'出牌阶段,对一名有手牌的其他角色使用。你展示其一张手牌,若此牌与【出其不意】的花色不同,则你对其造成1点伤害。', wuxinghelingshan:'五行鹤翎扇', wuxinghelingshan_skill:'五行鹤翎扇', - wuxinghelingshan_info:'当你声明使用不为神属性的属性【杀】时,你可将此【杀】的属性改为不为神属性的其他属性。', + wuxinghelingshan_info:'当你声明使用不为神属性的属性【杀】后,你可将此【杀】的属性改为不为神属性的其他属性。', wutiesuolian:'乌铁锁链', wutiesuolian_skill:'乌铁锁链', wutiesuolian_info:'锁定技,当你使用【杀】指定目标后,若其未横置,则其横置。', diff --git a/character/clan.js b/character/clan.js index 33d3b2a83..7a1898387 100644 --- a/character/clan.js +++ b/character/clan.js @@ -54,7 +54,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('clansankuang',target); if(num2==0) event._result={bool:false}; else if(num2<=num) event._result={bool:true,cards:target.getCards('he')}; - target.chooseCard('he',true,[num,Infinity]).set('ai',get.unuseful); + else target.chooseCard('he',true,[num,Infinity]).set('ai',get.unuseful); }else event.finish(); 'step 2' if(result.bool){ @@ -121,7 +121,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, subSkill:{ viewAs:{ - trigger:{player:['phaseZhunbeiEnd','phaseJudgeEnd','phaseDrawEnd','phaseUseEnd','phaseDiscardEnd','phaseJieshuEnd']}, + trigger:{global:['phaseZhunbeiEnd','phaseJudgeEnd','phaseDrawEnd','phaseUseEnd','phaseDiscardEnd','phaseJieshuEnd']}, filter:function(event,player){ return player.countCards('h',card=>card.hasGaintag('clanshenjun'))>0; }, @@ -148,7 +148,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(result.bool){ var name=result.links[0][2],nature=result.links[0][3]; - debugger; var cards=player.getCards('h',card=>card.hasGaintag('clanshenjun')); game.broadcastAll(function(num,card){ lib.skill.clanshenjun_backup.selectCard=num; @@ -319,6 +318,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:'clanfenchai', forced:true, trigger:{player:'judge'}, + filter:function(event,player){ + return player.getStorage('clanfenchai').length; + }, content:function(){} } }, @@ -504,11 +506,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.targets[0].link(true); } var cards=player.getCards('h',card=>get.suit(card)==get.suit(trigger.card)); - if(cards.filter(card=>{ - var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); - if(mod!='unchanged') return false; - return true; - }).length==0){ + if(cards.length>0){ player.loseToDiscardpile(cards); player.draw(cards.length); } @@ -857,7 +855,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clanshangshen:'伤神', clanshangshen_info:'当一名角色受到属性伤害后,若本回合此前没有角色或已死亡的角色受到过属性伤害,你可以进行目标角色为你的【闪电】的特殊的使用流程,然后其将手牌摸至四张。', clanfenchai:'分钗', - clanfenchai_info:'锁定技。若你首次发动技能指定的目标角色中:存在存活角色,你的判定牌视为♥;不存在存活角色,你的判定牌视为♠。', + clanfenchai_info:'锁定技。若你首次发动技能指定的异性目标角色中:存在存活角色,你的判定牌视为♥;不存在存活角色,你的判定牌视为♠。', clan_wu:'陈留·吴氏', clan_xun:'颍川·荀氏', diff --git a/character/diy.js b/character/diy.js index 9e0222367..ef8442782 100755 --- a/character/diy.js +++ b/character/diy.js @@ -86,7 +86,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_kyouko:['female','key',3,['kyouko_rongzhu','kyouko_gongmian']], key_kyou:['female','key',3,['kyou_zhidian','kyou_duanfa']], key_seira:['female','key',3,['seira_xinghui','seira_yuanying']], - key_kiyu:['female','key',3,['kiyu_yuling','kiyu_xianyu']], + key_kiyu:['female','key',3,['kiyu_yuling','kiyu_rexianyu']], key_tomoyo:['female','key',4,['tomoyo_wuwei','tomoyo_zhengfeng']], ns_huangchengyan:['male','shu',3,['nslongyue','nszhenyin']], @@ -178,6 +178,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ junk_zhangrang:['male','qun',3,['junktaoluan']], old_bulianshi:['female','wu',3,['anxu','zhuiyi']], junk_sunquan:['male','shen',4,['junkyuheng','junkdili'],['wei']], + ol_maliang:['male','shu',3,['zishu','yingyuan']], }, characterFilter:{ key_jojiro:function(mode){ @@ -212,7 +213,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_default:["diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji"], diy_noname:['noname'], diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri","key_akiko","key_abyusa","key_godan","key_yuu","key_ryoichi","key_kotori","key_jojiro","key_shiroha","key_shizuku","key_hiroto","key_sakuya","key_youta","key_rumi","key_chihaya","key_yukito","key_asara","key_kotomi","key_mia","key_kano","db_key_liyingxia","key_erika","key_satomi"], - diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang','old_bulianshi','junk_sunquan'], + diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang','old_bulianshi','junk_sunquan','ol_maliang'], }, }, characterIntro:{ @@ -231,6 +232,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunyi:'孙翊(184年~204年),又名孙俨,字叔弼,是孙坚的第三子,孙策、孙权的弟弟。曾被大臣推荐为继承者。孙权继位后,孙翊任丹杨太守,后被身边的人边鸿刺杀。', zhangning:'《三国杀·阵面对决》中登场的角色。张角之女,能呼雷掣电。', yanghu:'羊祜(221年-278年12月27日),字叔子,泰山郡南城县人。西晋时期杰出的战略家、政治家、文学家,曹魏上党太守羊衜的儿子,名儒蔡邕的女儿蔡文姬的外甥。出身“泰山羊氏”,博学能文,清廉正直。曹魏时期,接受公车征辟,出任中书郎,迁给事黄门侍郎。姐姐嫁给大将军司马师,投靠司马氏家族,仕途平步青云。魏元帝曹奂即位,出任秘书监、相国从事中郎、中领军,统领御林军,兼管内外政事,册封钜平县子,迁。西晋建立后,迁中军将军、散骑常侍、郎中令,册封钜平侯。泰始五年(269年),出任车骑将军、荆州都督,加任开府仪同三司坐镇襄阳,屯田兴学,以德怀柔,深得军民之心;扩充军备,训练士兵,全力准备灭亡孙吴,累迁征南大将军,册封南城侯。咸宁四年,去世,临终前举荐杜预接任职务,获赠侍中、太傅,谥号为“成”。唐宋时期,配享武庙。', + ns_wangyue:'王越,东汉末年游侠(生卒年不详),乃辽东燕山人士,擅使剑术, 三国时期史阿的师父,曹丕的师公,官职虎贲将军。在史书《典论》中略有记载。', }, characterTitle:{ key_satomi:'#rHeaven Burns Red', @@ -737,6 +739,146 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, + kiyu_rexianyu:{ + trigger:{player:'phaseUseEnd'}, + charlotte:true, + unique:true, + filter:function(event,player){ + return !player.hasSkill('kiyu_rexianyu_round',null,null,false)&&player.hasHistory('useCard',function(evt){ + var type=get.type(evt.card); + if(type!='basic'&&type!='trick') return false; + return evt.getParent('phaseUse')==event; + }); + }, + direct:true, + content:function(){ + 'step 0' + var history=player.getHistory('useCard',function(evt){ + var type=get.type(evt.card); + if(type!='basic'&&type!='trick') return false; + return evt.getParent('phaseUse')==trigger; + }); + var list=[]; + event.list=list; + for(var i=0;i②当你因【毒】失去体力时,你改为回复等量的体力。', @@ -16851,7 +16993,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ komari_tiankou:'甜口', komari_tiankou_info:'锁定技,当你使用红色的非伤害性基本牌/锦囊牌选择目标时,或成为其他角色使用的这些牌的目标时,你选择一项:1.摸一张牌;2.为此牌增加一个目标', komari_xueshang:'血殇', - komari_xueshang_info:'锁定技,蓄力技,当有角色死亡时,你对自己造成1点伤害,然后对所有其他角色依次造成1点伤害。当有角色因此法进入濒死状态时,你加1点体力上限并回复1点体力,然后失去此技能并终止此技能的所有后续结算。', + komari_xueshang_info:'锁定技,蓄能技,当有角色死亡时,你对自己造成1点伤害,然后对所有其他角色依次造成1点伤害。当有角色因此法进入濒死状态时,你加1点体力上限并回复1点体力,然后失去此技能并终止此技能的所有后续结算。', yukine_wenzhou:'问咒', yukine_wenzhou_info:'一名角色的出牌阶段开始时,其可以交给你一张牌。若如此做,你选择一项:交给其一张牌,或令其从牌堆中获得一张与此牌类型相同的牌,且其于此阶段内使用与此牌牌名相同的牌时无法被响应。', //如果对自己发动【问咒】,则自己可以响应这些牌。但其他角色发动【问咒】时,该角色自己并不能响应 @@ -17180,9 +17322,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liyingxia_wumai:'武脉', liyingxia_wumai_info:'蜀势力技。一轮游戏开始时,你可以选择获得其中一个未选择过的技能直到本轮结束:〖八阵〗/〖集智〗/〖观星〗/〖游龙〗。若均已选择过,则你可以摸X张牌(X为场上已受伤的角色数且至多为3)。', erika_shisong:'识诵', - erika_shisong_info:'锁定技。①你的手牌上限+X(X为你的护甲数)。②当你于回合内使用第X张牌时,若此牌与你上回合使用的第X张牌类型相同,则你摸一张牌。', + erika_shisong_info:'锁定技。①你的手牌上限+X(X为你的护甲数)。②当你于回合内使用第Y张牌时,若此牌与你上回合使用的第Y张牌类型相同,则你摸一张牌。', erika_yousheng:'佑生', - erika_yousheng_info:'使命技。①限定技。一轮游戏开始时,你可以选择至多两名其他角色。你减2点体力上限并增加3点护甲。②当你因〖佑生①〗选择的角色成为【杀】或伤害类锦囊牌的目标时,你可以弃置X张牌并将此目标转移给自己(X为你本轮内发动过〖佑生②〗的次数)。此牌结算结束后,你可令一名原目标角色获得此牌。③成功:当你失去最后的护甲后,若你已发动过〖佑生①〗,则你和所有〖佑生①〗选择的角色各摸三张牌。④失败:当一名〖佑生①〗选择的角色因【杀】或伤害类锦囊牌而受到伤害时,你失去所有护甲并弃置等量的牌。', + erika_yousheng_info:'使命技。①限定技。一轮游戏开始时,你可以选择至多两名其他角色。你减2点体力上限并增加3点护甲。②当你〖佑生①〗选择的角色成为【杀】或伤害类锦囊牌的目标时,你可以弃置X张牌并将此目标转移给自己(X为你本轮内发动过〖佑生②〗的次数)。此牌结算结束后,你可令一名原目标角色获得此牌。③成功:当你失去最后的护甲后,若你已发动过〖佑生①〗,则你和所有〖佑生①〗选择的角色各摸三张牌。④失败:当一名〖佑生①〗选择的角色因【杀】或伤害类锦囊牌而受到伤害时,你失去所有护甲并弃置等量的牌。', erika_yousheng_append:'Death is not the end of life, but the completion of life.', satomi_luodao:'落刀', satomi_luodao_info:'当你使用【杀】指定目标后,你可以展示目标角色的所有手牌。若其中:有【闪】,则你弃置其中的一张【闪】;没有【闪】,则你弃置一张牌。', @@ -17272,6 +17414,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ kiyu_yuling_info:'锁定技。你不是有距离限制的锦囊牌的合法目标;你成为【杀】的目标后,使用者需弃置X张牌(X为其至你的距离)。', kiyu_xianyu:'先预', kiyu_xianyu_info:'每轮限一次。一名角色的出牌阶段开始时,你可观看其手牌并预测其使用这些牌的顺序。此出牌阶段结束时,你摸X张牌,且其本回合的手牌上限+X(X为你的预测与其实际使用顺序的吻合数且至多为3)。', + kiyu_rexianyu:'先预', + kiyu_rexianyu_info:'每轮限一次。出牌阶段结束时,你可以选择一名其他角色。该角色于下个出牌阶段内使用第X张牌时,其可以将一张牌当做你本阶段内使用的第X张基本牌或普通锦囊牌使用(X至多为3);若如此做,你摸一张牌,且其本回合的手牌上限+1。', key_tomoyo:'坂上智代', tomoyo_wuwei:'武威', tomoyo_wuwei_info:'①每回合每种花色限一次。你可以将一张手牌当做【杀】使用或打出。②当有角色使用【闪】后,若你在其攻击范围内,你可以对其使用一张【杀】(无距离限制)。', @@ -17642,6 +17786,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_jiakui_ab:'贾逵', old_bulianshi_ab:'步练师', old_bulianshi:'RE步练师', + ol_maliang:'削弱版马良', + ol_maliang_ab:'马良', diy_tieba:'吧友设计', diy_xushi:'玩点论杀·虚实篇', diy_default:'常规', diff --git a/character/extra.js b/character/extra.js index 48e259f36..a083e2c1a 100755 --- a/character/extra.js +++ b/character/extra.js @@ -17,11 +17,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ extra_ol:['ol_zhangliao','shen_caopi','shen_zhenji','shen_sunquan'], extra_mobilezhi:['shen_guojia','shen_xunyu'], extra_mobilexin:['shen_taishici','shen_sunce'], - extra_tw:['tw_shen_guanyu'], + extra_tw:['tw_shen_guanyu','tw_shen_lvmeng'], extra_offline:['shen_diaochan','boss_zhaoyun'], }, }, character:{ + tw_shen_lvmeng:['male','shen',3,['twshelie','twgongxin'],['wu']], shen_zhangjiao:['male','shen',3,['yizhao','sijun','sanshou','tianjie'],['qun']], shen_zhangfei:['male','shen',4,['shencai','xunshi'],['shu']], tw_shen_guanyu:['male','shen',4,['twwushen','twwuhun'],['shu']], @@ -66,6 +67,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shen_zhaoyun:['shen_zhaoyun','boss_zhaoyun'], shen_guanyu:['shen_guanyu','tw_shen_guanyu'], shen_sunquan:['shen_sunquan','junk_sunquan'], + shen_lvmeng:['tw_shen_lvmeng','shen_lvmeng'], }, characterFilter:{ shen_diaochan:function(mode){ @@ -73,6 +75,149 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //海外神吕蒙 + twshelie:{ + audio:'shelie', + inherit:'shelie', + group:'twshelie_jingce', + //什么精策技能啊喂! + subSkill:{ + round:{charlotte:true}, + count:{ + charlotte:true, + onremove:true, + intro:{ + markcount:function(storage){ + return storage.length; + }, + content:'本回合已使用$花色的牌', + }, + }, + jingce:{ + audio:'shelie', + trigger:{player:['phaseJieshu','useCard1']}, + filter:function(event,player){ + if(player.hasSkill('twshelie_round')||player!=_status.currentPhase) return false; + var list=[]; + player.getHistory('useCard',function(evt){ + if(lib.suit.contains(get.suit(evt.card))&&!list.contains(get.suit(evt.card))) list.push(get.suit(evt.card)); + }); + if(list.length){ + player.addTempSkill('twshelie_count'); + player.storage.twshelie_count=list.sort(function(a,b){ + return lib.suit.indexOf(b)-lib.suit.indexOf(a); + }); + player.markSkill('twshelie_count'); + player.syncStorage('twshelie_count'); + } + return event.name!='useCard'&&list.length>=player.hp; + }, + forced:true, + locked:false, + content:function(){ + 'step 0' + player.addTempSkill('twshelie_round','roundStart'); + player.chooseControl('摸牌阶段','出牌阶段').set('prompt','涉猎:请选择要执行的额外阶段'); + 'step 1' + if(result.index==0){ + var next=player.phaseDraw(); + event.next.remove(next); + trigger.getParent().next.push(next); + } + if(result.index==1){ + var next=player.phaseUse(); + event.next.remove(next); + trigger.getParent().next.push(next); + } + }, + }, + }, + }, + twgongxin:{ + audio:'gongxin', + enable:'phaseUse', + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&¤t.countCards('h'); + }); + }, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h'); + }, + usable:1, + content:function(){ + 'step 0' + event.num=target.getCards('h').reduce(function(arr,card){ + return arr.add(get.suit(card,player)),arr; + },[]).length; + 'step 1' + var cards=target.getCards('h'); + player.chooseButton(2,[ + '攻心', + cards, + [['弃置此牌','置于牌堆顶'],'tdnodes'], + ]).set('filterButton',function(button){ + var type=typeof button.link; + if(ui.selected.buttons.length&&type==typeof ui.selected.buttons[0].link) return false; + return true; + }).set('ai',function(button){ + var target=_status.event.target; + var type=typeof button.link; + if(type=='object') return get.value(button.link,target); + }); + 'step 2' + if(result.bool){ + if(typeof result.links[0]!='string') result.links.reverse(); + var card=result.links[1],choice=result.links[0]; + if(choice=='弃置此牌') target.discard(card); + else { + player.showCards(card,get.translation(player)+'对'+get.translation(target)+'发动了【攻心】'); + target.lose(card,ui.cardPile,'visible','insert'); + game.log(card,'被置于了牌堆顶'); + } + } + 'step 3' + if(event.num==target.getCards('h').reduce(function(arr,card){ + return arr.add(get.suit(card,player)),arr; + },[]).length) event.finish(); + 'step 4' + var num1=0; + for(var card of target.getCards('h')){ + if(get.color(card)=='red') num1++; + } + var num2=target.countCards('h')-num1; + player.chooseControl(['红色','黑色','cancel2']).set('prompt','是否令'+get.translation(target)+'本回合无法使用一种颜色的牌?').set('ai',function(){ + return num1>=num2?'红色':'黑色'; + }); + 'step 5' + if(result.control!='cancel2'){ + player.line(target); + target.addTempSkill('twgongxin2'); + target.markAuto('twgongxin2',[result.control=='红色'?'red':'black']); + game.log(target,'本回合无法使用'+result.control+'牌'); + if(!event.isMine()&&!event.isOnline()) game.delayx(); + } + }, + ai:{ + order:10, + expose:0.25, + result:{ + target:function(player,target){ + return -target.countCards('h'); + }, + }, + }, + }, + twgongxin2:{ + mod:{ + cardEnabled2:function(card,player){ + if(player.getStorage('twgongxin2').contains(get.color(card))) return false; + }, + }, + charlotte:true, + onremove:true, + intro:{content:'本回合内不能使用或打出$牌'}, + }, //神张角 yizhao:{ audio:2, @@ -107,7 +252,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, mod:{ aiOrder:function(player,card,num){ - if(get.number(card)+player.countMark('yizhao')%10>10) return num+10; + if((get.number(card)+player.countMark('yizhao'))%10>10) return num+10; }, }, ai:{ @@ -129,22 +274,37 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.removeMark('yizhao',player.countMark('yizhao')); - 'step 1' - var total=0,cards=[]; - for(var i=0;i<36;i++){ - var card=get.cardPile(card=>{ - if(cards.contains(card)) return false; - var num=get.number(card,false); - if(total+num>36) return false; - return true; - }); - if(card){ - total+=get.number(card,false); - cards.push(card); - } - if(total==36) break; + var cards=get.cards(ui.cardPile.childElementCount+1); + for(var i=0;i36) break; + } + if(num==36){ + bool=true; + break; + } + } + if(bool){ + var cards=[]; + for(var k=0;k{ + player.chooseTarget(get.prompt('tianjie'),'选择至多三名其他角色,依次对这些角色造成X点雷电伤害(X为其手牌中【闪】的数量,至少为1)',[1,3]).set('ai',target=>{ var player=_status.event.player; return get.damageEffect(target,player,player,'thunder')*Math.sqrt(Math.max(1,target.countCards('h','shan'))); }); 'step 1' if(result.bool){ var targets=result.targets; - player.logSkill('tianjie_effect',targets); + targets.sortBySeat(); + player.logSkill('tianjie',targets); for(var target of targets){ var num=Math.max(1,target.countCards('h','shan')); target.damage(num,'thunder'); @@ -6604,7 +6768,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ pinghe_info:'锁定技。①你的手牌上限基数等于你已损失的体力值。②当你受到其他角色造成的伤害时,若你有牌且你的体力上限大于1,则你防止此伤害,减一点体力上限并将一张手牌交给一名其他角色。然后若你拥有〖英霸〗,则伤害来源获得一个“平定”标记。', shen_jiangwei:'神姜维', jiufa:'九伐', - jiufa_info:'①当你声明使用或打出牌时,你记录此牌的牌名。②当你使用或打出的牌结算结束后,若你的〖九伐〗记录中包含至少⑨种不同的牌名,则你可以展示牌堆顶的⑨张牌,选择并获得其中任意张点数各不相同且{这九张牌中存在未被选择且和已选择的牌点数相同}的牌,清除所有的记录,将其余牌置入弃牌堆。', + jiufa_info:'①当你声明使用牌后或打出牌时,你记录此牌的牌名。②当你使用或打出的牌结算结束后,若你的〖九伐〗记录中包含至少⑨种不同的牌名,则你可以展示牌堆顶的⑨张牌,选择并获得其中任意张点数各不相同且{这九张牌中存在未被选择且和已选择的牌点数相同}的牌,清除所有的记录,将其余牌置入弃牌堆。', tianren:'天任', tianren_info:'锁定技。①当有一张基本牌或普通锦囊牌不因使用而进入弃牌堆后,你获得一枚“天任”标记。②当你获得“天任”标记或体力上限变化后,若你的“天任”数不小于X,则你移去X枚“天任”,加1点体力上限并摸两张牌(X为你的体力上限)。', pingxiang:'平襄', @@ -6674,13 +6838,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xunshi_info:'锁定技。①你手牌区内所有的多目标锦囊牌均视为花色为none的普【杀】。②你使用颜色为none的牌无距离和次数限制。③当你使用无颜色的牌选择目标后,你令你的〖神裁〗的发动次数上限+1(至多为5),然后可以为此牌增加任意个目标。', shen_zhangjiao:'神张角', yizhao:'异兆', - yizhao_info:'锁定技。当你使用或打出牌后,你获得等同于此牌点数枚“黄”标记。然后若“黄”的十位数发生变化,你获得牌堆中一张点数为你“黄”的十位数的牌。', + yizhao_info:'锁定技。当你使用或打出牌时,你获得等同于此牌点数枚“黄”标记。然后若“黄”的十位数发生变化,你获得牌堆中一张点数为你“黄”的十位数的牌。', sijun:'肆军', - sijun_info:'准备阶段,若“黄”数大于牌堆的牌数,你可以移去所有“黄”,然后随机获得任意张点数之和为36的牌。', + sijun_info:'准备阶段,若“黄”数大于牌堆的牌数,你可以移去所有“黄”并洗牌,然后随机获得任意张点数之和为36的牌。', sanshou:'三首', sanshou_info:'当你受到伤害时,你可以亮出牌堆顶三张牌。若其中有本回合未被使用过的牌的类型,防止此伤害。', tianjie:'天劫', tianjie_info:'一名角色的回合结束时,若本回合牌堆洗过牌,你可以选择至多三名其他角色。你依次对每名目标角色造成X点雷电伤害(X为其手牌中【闪】的数量,至少为1)。', + tw_shen_lvmeng: 'TW神吕蒙', + twshelie:'涉猎', + twshelie_info:'①摸牌阶段,你可放弃摸牌并亮出牌堆顶的五张牌,然后选择获得其中每种花色的牌各一张。②每轮限一次。结束阶段,若你本回合使用的花色数不小于你的体力值,你执行一个额外的摸牌阶段或出牌阶段。', + twgongxin:'攻心', + twgongxin2:'攻心', + twgongxin_info:'出牌阶段限一次。你可以观看一名其他角色的手牌,然后你可以展示其中一张牌并选择一项:1.弃置此牌;2.将此牌置于牌堆顶。若该角色手牌中的花色数因此减少,你选择一种颜色,其于本回合不能使用或打出该颜色的牌。', extra_feng:'神话再临·风', diff --git a/character/mobile.js b/character/mobile.js index 88b6b2006..7a13d01c6 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -19,13 +19,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin","re_wuguotai","re_gaoshun"], mobile_yijiang2:["xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui","re_bulianshi"], mobile_yijiang3:["re_liru","xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_yufan"], - mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen","xin_jushou","xin_wuyi","xin_zhuhuan"], + mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen","xin_jushou","xin_wuyi","xin_zhuhuan","re_chenqun"], mobile_yijiang5:['xin_sunxiu','xin_quancong','xin_zhuzhi','xin_caoxiu'], mobile_yijiang67:["re_jikang"], mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan","xin_hansui"], }, }, character:{ + re_chenqun:['male','wei',3,['redingpin','refaen']], xin_caoxiu:['male','wei',4,['qianju','xinqingxi']], xin_zhuhuan:['male','wu',4,['fenli','xinpingkou'],['unseen']], sp_pengyang:['male','shu',3,['spdaming','spxiaoni']], @@ -40,7 +41,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ruanhui:['female','wei',3,['mingcha','jingzhong']], xin_quancong:['male','wu',4,['sbyaoming']], re_xunyu:["male","wei",3,["quhu","rejieming"],['clan:颍川荀氏']], - xin_jushou:['male','qun',3,['xinjianying','shibei']], + xin_jushou:['male','qun','2/3/3',['xinjianying','shibei']], liuba:['male','shu',3,['duanbi','tongduo']], re_bulianshi:['female','wu',3,['reanxu','zhuiyi']], re_caiwenji:['female','qun',3,['rebeige','duanchang']], @@ -715,7 +716,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.log(player,(num>0?'获得了':'减少了')+get.cnNumber(Math.abs(num))+'点“达命”值'); }, content:function(){ - lib.skill.spdaming.change(player,1); + lib.skill.spdaming.change(player,2); }, intro:{ name:'达命值', @@ -1218,7 +1219,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); }, content:function(){ - player.draw(2); + player.draw(3); }, mod:{ aiOrder:function(player,card,num){ @@ -1999,9 +2000,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //全琮 sbyaoming:{ audio:2, + chargeSkill:true, enable:'phaseUse', filter:function(event,player){ - return player.countMark('sbyaoming')>0; + return player.countMark('charge')>0; }, filterTarget:true, prompt:function(){ @@ -2012,15 +2014,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - player.removeMark('sbyaoming',1); + player.removeMark('charge',1); var num=target.countCards('h'),num2=player.countCards('h'); if(num==num2&&target.countCards('he')>0){ + var choice=get.attitude(player,target)>0?1:0; var str=get.translation(target),choiceList=[ '弃置'+str+'的一张牌', '令'+str+'摸一张牌', ]; if(typeof player.storage.sbyaoming_status=='number') choiceList[player.storage.sbyaoming_status]+='(上次选择)'; - player.chooseControl().set('choiceList',choiceList); + var next=player.chooseControl().set('choiceList',choiceList); + next.set('ai_choice',choice); + next.set('ai',()=>_status.event.ai_choice); } else event._result={index:num>num2?0:1}; 'step 1' @@ -2029,7 +2034,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else target.draw(); if(typeof player.storage.sbyaoming_status=='number'&&result.index!=player.storage.sbyaoming_status){ - player.addMark('sbyaoming',1); + player.addMark('charge',1); delete player.storage.sbyaoming_status; } else{ @@ -2055,21 +2060,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, group:['sbyaoming_damage','sbyaoming_init'], - marktext:'名', - intro:{ - name2:'名', - content:'mark', - }, subSkill:{ damage:{ trigger:{player:'damageEnd'}, direct:true, content:function(){ 'step 0' - var num=Math.min(trigger.num,4-player.countMark('sbyaoming_damage')); + var num=Math.min(trigger.num,4-player.countMark('charge')); if(num>0){ player.logSkill('sbyaoming_damage'); - player.addMark('sbyaoming',num); + player.addMark('charge',num); game.delayx(); } 'step 1' @@ -2091,10 +2091,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, locked:false, filter:function(event,player){ - return (event.name!='phase'||game.phaseNumber==0); + return (event.name!='phase'||game.phaseNumber==0)&&player.countMark('charge')<4; }, content:function(){ - player.addMark('sbyaoming',2); + player.addMark('charge',Math.min(2,4-player.countMark('charge'))); }, }, }, @@ -6897,8 +6897,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, add:{ trigger:{player:'compare',target:'compare'}, - filter:function(event){ - return !event.iwhile; + filter:function(event,player){ + if(event.player==player) return !event.iwhile; + return true; }, forced:true, locked:false, @@ -12164,31 +12165,49 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target:['chooseToCompareAfter','compareMultipleAfter'] }, filter:function(event,player){ - return !event.preserve; + if(event.preserve) return false; + if(event.name=='compareMultiple') return true; + return !event.compareMultiple; }, frequent:true, content:function(){ 'step 0' var str='
牌堆顶'; var cards=get.cards(); - if(player==trigger.player){ - if(trigger.num1>trigger.num2&&get.position(trigger.card2,true)=='o'){ + if(trigger.name=='chooseToCompare'&&trigger.compareMeanwhile){ + var result=trigger.result; + var list=[[result.num1[0],result.player]]; + list.addArray(result.num2.map(function(card,i){ + return [card,result.targets[i]]; + })); + list.sort(function(a,b){ + return a[0]-b[0]; + }); + if(list[0][0]trigger.num2&&get.position(trigger.card2,true)=='o'){ + str+='/拼点牌'; + cards.push(trigger.card2) + } + else if(trigger.num1trigger.num2&&get.position(trigger.card2,true)=='o'){ - str+='/拼点牌'; - cards.push(trigger.card2); + else{ + if(trigger.num1trigger.num2&&get.position(trigger.card2,true)=='o'){ + str+='/拼点牌'; + cards.push(trigger.card2); + } } } str+='
'; @@ -17672,19 +17691,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shenpei:['shenpei','sp_shenpei'], wangcan:['tw_wangcan','wangcan','sp_wangcan'], sunshao:['sp_sunshao','sunshao'], - xunchen:['re_xunchen','xunchen','sp_xunchen'], + xunchen:['re_xunchen','xunchen','tw_xunchen','sp_xunchen'], xinpi:['xinpi','sp_xinpi'], duyu:['duyu','sp_duyu'], zhangwen:['sp_zhangwen','zhangwen'], - ol_bianfuren:['ol_bianfuren','sp_bianfuren'], + ol_bianfuren:['ol_bianfuren','tw_bianfuren','sp_bianfuren'], wangshuang:['wangshuang','sp_wangshuang'], huaman:['huaman','sp_huaman'], gaolan:['dc_gaolan','gaolan','sp_gaolan'], cuiyan:['sp_cuiyan','cuiyan'], wujing:['tw_wujing','wujing'], sunru:['dc_sunru','sunru'], - zhouchu:['jin_zhouchu','zhouchu'], + zhouchu:['jin_zhouchu','zhouchu','tw_zhouchu'], liuye:['dc_liuye','liuye'], + liuzhang:['liuzhang','tw_liuzhang'], + chenzhen:['tw_chenzhen','sp_chenzhen'], + feiyi:['tw_feiyi','feiyi'], + wangling:['tw_wangling','wangling'], + qiaogong:['tw_qiaogong','qiaogong'], + sp_chendong:['tw_chendong','sp_chendong'], + sp_jiangqing:['tw_jiangqing','sp_jiangqing'], }, translate:{ liuzan:'手杀留赞', @@ -17818,7 +17844,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhongzuo:'忠佐', zhongzuo_info:'一名角色的结束阶段开始时,若你于此回合内造成或受到过伤害,则你可以令一名角色摸两张牌。若该角色已受伤,则你摸一张牌。', wanlan:'挽澜', - wanlan_info:'限定技,当一名角色进入濒死状态时,你可以弃置所有手牌并令其回复体力至1点,然后对当前回合角色造成1点伤害。', + wanlan_info:'限定技,当一名角色进入濒死状态时,你可以弃置所有手牌(无牌可不弃)。其回复体力至1点,然后你对当前回合角色造成1点伤害。', re_jikang:"手杀嵇康", old_caochun:'旧曹纯', shenpei:'审配', @@ -17976,7 +18002,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tongqu:'通渠', tongqu_info:'游戏开始时,你拥有一个“渠”标记。准备阶段,你可以失去1点体力令一名没有“渠”标记的角色获得“渠”标记。有“渠”的角色摸牌阶段额外摸一张牌,然后将一张牌交给其他有“渠”的角色或弃置。若以此法给出的是装备牌则使用之。当有“渠”的角色进入濒死状态时,移除其“渠”标记。', xinwanlan:'挽澜', - xinwanlan_info:'当一名角色受到会令其进入濒死状态的伤害时,你可以弃置装备区中的所有牌(至少一张) 防止此伤害。', + xinwanlan_info:'当一名角色受到伤害值不小于体力值的伤害时,你可以弃置装备区中的所有牌(至少一张) 防止此伤害。', re_xusheng:'手杀徐盛', re_dongzhuo:'手杀董卓', rejiuchi:'酒池', @@ -18040,7 +18066,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liyong:'厉勇', liyong2:'厉勇', liyong3:'厉勇', - liyong_info:'锁定技,若你于出牌阶段使用的【杀】被【闪】抵消,本阶段你下一张【杀】不可被响应且伤害+1,指定的目标本回合非锁定技失效,当此【杀】造成伤害后,若目标角色未死亡,你失去1点体力。', + liyong_info:'锁定技,若你于出牌阶段内使用的【杀】被【闪】抵消,则你获得如下效果:你本回合使用的下一张【杀】不可被响应且伤害+1,指定的目标本回合非锁定技失效,当此【杀】造成伤害后,若目标角色未死亡,你失去1点体力。', gongsunkang:'公孙康', juliao:'据辽', juliao_info:'锁定技,其他角色计算与你的距离始终+X(X为场上势力数-1)。', @@ -18127,7 +18153,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ heji:'合击', heji_info:'当有角色使用的【决斗】或红色【杀】结算完成后,若此牌对应的目标数为1,则你可以对相同的目标使用一张【杀】或【决斗】(无距离和次数限制)。若你以此法使用的牌不为转化牌,则你从牌堆中随机获得一张红色牌。', liubing:'流兵', - liubing_info:'锁定技。①当你声明使用【杀】时,若此牌是你本回合使用的第一张有唯一对应实体牌的【杀】,则你将此牌的花色改为♦。②其他角色于其出牌阶段内使用的非转化黑色杀结算结束后,若此【杀】未造成伤害,则你获得之。', + liubing_info:'锁定技。①当你声明使用【杀】后,若此牌是你本回合使用的第一张有唯一对应实体牌的【杀】,则你将此牌的花色改为♦。②其他角色于其出牌阶段内使用的非转化黑色杀结算结束后,若此【杀】未造成伤害,则你获得之。', sp_mifuren:'糜夫人', spcunsi:'存嗣', spcunsi2:'存嗣', @@ -18208,7 +18234,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ejian_info:'锁定技,每名角色限一次。当有其他角色因〖博名〗而获得了你的牌后,若其拥有与此牌类型相同的其他牌,则你令其选择一项:①受到1点伤害。②展示所有手牌,并弃置所有与此牌类别相同的牌。', xin_zhoucang:'手杀周仓', mobilezhongyong:'忠勇', - mobilezhongyong_info:'当你于出牌阶段使用【杀】结算结束后,若没有目标角色使用【闪】响应过此【杀】,则你可获得此【杀】;否则你可选择一项:①获得目标角色使用的【闪】,然后可将此【杀】交给另一名其他角色。②将目标角色使用的【闪】交给另一名其他角色,然后你本回合使用【杀】的次数上限+1且下一张【杀】的伤害值基数+1。(你不能使用本回合因执行〖忠勇〗的效果获得的牌)', + mobilezhongyong_info:'当你于出牌阶段内使用的【杀】结算结束后,若没有目标角色使用【闪】响应过此【杀】,则你可获得此【杀】;否则你可选择一项:①获得目标角色使用的【闪】,然后可将此【杀】交给另一名其他角色。②将目标角色使用的【闪】交给另一名其他角色,然后你本回合使用【杀】的次数上限+1且下一张【杀】的伤害值基数+1。(你不能使用本回合因执行〖忠勇〗的效果获得的牌)', mjdingyi:'定仪', mjdingyi_info:'游戏开始时,你选择一个效果(相同效果不可叠加)并令全场角色获得之:①摸牌阶段额定摸牌数+1。②手牌上限+2。③攻击范围+1。④脱离濒死状态时回复1点体力。', mjzuici:'罪辞', @@ -18505,7 +18531,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rejieming_info:"当你受到1点伤害后,你可以令一名角色摸两张牌。然后若其手牌数小于体力上限,则你摸一张牌。", xin_quancong:'手杀全琮', sbyaoming:'邀名', - sbyaoming_info:'①游戏开始时,你获得2枚“名”。②当你受到1点伤害后,若你的“名”少于4枚,则你获得一枚“名”。③出牌阶段或当你受到伤害后,你可以移除一枚“名”并选择一项:⒈弃置一名手牌数不小于你的角色的一张牌。⒉令一名手牌数不大于你的角色摸一张牌。若你上次发动〖邀名③〗时未获得过“名”且你选择的选项和上次不同,则你获得一枚“名”。', + sbyaoming_info:'蓄力技(2/4)。①当你受到1点伤害后,你可以获得1点蓄力值。②出牌阶段或当你受到伤害后,你可消耗1点蓄力值并选择一项:⒈弃置一名手牌数不小于你的角色的一张牌。⒉令一名手牌数不大于你的角色摸一张牌。若你上次发动〖邀名②〗时未获得过蓄力值且你选择的选项和上次不同,则你获得1点蓄力值。', ruanhui:'阮慧', mingcha:'明察', mingcha_info:'摸牌阶段开始时,你亮出牌堆顶的三张牌。若这三张牌中有点数小于9的牌,则你可以放弃摸牌并获得这些牌,然后你可以获得一名其他角色的随机一张牌。', @@ -18544,7 +18570,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ hannan_info:'出牌阶段限一次。你可以与一名角色拼点,赢的角色对没赢的角色造成2点伤害。', xin_wuyi:'手杀吴懿', sbbenxi:'奔袭', - sbbenxi_info:'出牌阶段开始时,你可以弃置至少一张牌,然后你于此阶段获得如下效果:①你至其他角色距离-X;②当你使用的下一张基本牌或普通锦囊牌A选择目标后,你可以额外指定X名距离为1的角色为目标;③牌A结算结束后,若此牌造成过伤害,你摸两张牌(X为你以此法弃置的牌数)。', + sbbenxi_info:'出牌阶段开始时,你可以弃置至少一张牌,然后你于此阶段获得如下效果:①你至其他角色距离-X;②当你使用的下一张基本牌或普通锦囊牌A选择目标后,你可以额外指定X名距离为1的角色为目标;③牌A结算结束后,若此牌造成过伤害,你摸三张牌(X为你以此法弃置的牌数)。', xin_zhuzhi:'手杀朱治', sbanguo:'安国', sbanguo_info:'①游戏开始时,你令一名其他角色获得1枚“安国”标记(有“安国”的角色手牌上限基数等于体力上限)。②出牌阶段开始时,你可以将一名有“安国”的角色的所有“安国”移动给一名本局游戏未获得过“安国”的其他角色。③当你受到伤害时,若有有“安国”的角色且伤害值不小于你的体力值且此伤害没有来源或来源没有“安国”,防止此伤害。④一名角色进入濒死状态时,若其有你因〖安国①〗获得的“安国”,你移去其该“安国”,令其将体力回复至1点。然后你选择一项:1.若你的体力值大于1,你失去体力至1点;2.若你的体力上限大于1,你将体力上限减至1。最后你令其获得X点护甲(X为你以此法失去的体力值或减少的体力上限)。', @@ -18555,7 +18581,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ duansuo_info:'出牌阶段限一次。你可以重置任意名处于连环状态的角色,然后对这些角色各造成1点火焰伤害。', sp_pengyang:'彭羕', spdaming:'达命', - spdaming_info:'①游戏开始时,你获得1点“达命”值。②其他角色A的出牌阶段限一次。其可以交给你一张牌,然后你选择令一名其他角色B。若B有与此牌相同类型的牌,其将一张该类型的牌交给A,你获得1点“达命”值;否则你将此牌交给A。', + spdaming_info:'①游戏开始时,你获得2点“达命”值。②其他角色A的出牌阶段限一次。其可以交给你一张牌,然后你选择令一名其他角色B。若B有与此牌相同类型的牌,其将一张该类型的牌交给A,你获得1点“达命”值;否则你将此牌交给A。', spxiaoni:'嚣逆', spxiaoni_info:'①出牌阶段限一次。若你的“达命”值大于0,你可以将一张牌当任意一种【杀】或伤害类锦囊牌使用。然后你减少等同于此牌指定目标数的“达命”值。②你的手牌上限基数为X(X为“达命”值,且至多为你的体力值,至少为0)。', xin_zhuhuan:'手杀朱桓', diff --git a/character/offline.js b/character/offline.js index 2b22bd41d..0e59e6538 100644 --- a/character/offline.js +++ b/character/offline.js @@ -2617,7 +2617,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ suiren_info:'限定技,准备阶段开始时,你可以失去技能〖义从〗,然后加1点体力上限并回复1点体力,然后令一名角色摸三张牌。', huangjinleishi:'黄巾雷使', fulu:'符箓', - fulu_info:'当你声明使用普通【杀】时,你可以将此【杀】改为雷【杀】。', + fulu_info:'当你声明使用普通【杀】后,你可以将此【杀】改为雷【杀】。', fuji:'助祭', fuji_info:'当一名角色造成雷属性伤害时,你可以令其进行判定,若结果为黑色,此伤害+1;若结果为红色,该角色获得判定牌。', sp_pangtong:'SP庞统', diff --git a/character/old.js b/character/old.js index 83392eea7..0f4ecb5d0 100755 --- a/character/old.js +++ b/character/old.js @@ -13,7 +13,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_yijiang4:["old_caozhen","old_chenqun","old_zhuhuan"], old_yijiang5:["old_caoxiu","old_zhuzhi"], old_yijiang67:["ol_zhangrang","ol_liuyu"], - old_sp:["old_lingju","old_maliang","old_machao","zhangliang","jsp_caoren","ol_guansuo","old_zhangxingcai","old_huangfusong","ol_maliang","old_wangyun"], + old_sp:["old_lingju","old_maliang","old_machao","zhangliang","jsp_caoren","ol_guansuo","old_zhangxingcai","old_huangfusong","old_wangyun"], old_yingbian:['junk_simayi','old_yangyan','old_yangzhi'], old_mobile:["old_caochun","old_majun"], }, @@ -32,7 +32,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xiaoqiao:['female','wu',3,['tianxiang','hongyan']], weiyan:['male','shu',4,['kuanggu']], xiahouyuan:['male','wei',4,['shensu']], - ol_maliang:['male','shu',3,['zishu','yingyuan']], old_huangfusong:['male','qun',4,['fenyue']], old_majun:["male","wei",3,["xinfu_jingxie1","xinfu_qiaosi"],[]], old_zhangxingcai:['female','shu',3,['oldshenxian','qiangwu']], @@ -588,7 +587,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_caochong:'旧曹冲', old_guanqiujian:'旧毌丘俭', old_huangfusong:'旧皇甫嵩', - ol_maliang:'旧马良', ol_liuyu:'OL刘虞', old_wangyun:'旧王允', old_zhaoyun:'旧赵云', diff --git a/character/rank.js b/character/rank.js index 64593b84e..c136b685a 100644 --- a/character/rank.js +++ b/character/rank.js @@ -42,6 +42,7 @@ window.noname_character_rank={ 'boss_zhaoyun', 'noname', 'sb_machao', + 'dc_zhouxuān', ], ap:[ 'gjqt_aruan', @@ -107,6 +108,7 @@ window.noname_character_rank={ 'shen_zhangfei', 'clan_xuncai', 'zhujianping', + 'liuzhang', 'key_kamome', 'key_yukine', 'key_inari', @@ -285,6 +287,9 @@ window.noname_character_rank={ 'wanglie', 'zhaozhi', 'shen_zhangjiao', + 'tw_jiangji', + 'tw_niufudongxie', + 'tw_shen_lvmeng', 'key_misuzu', 'key_sunohara', 'key_umi', @@ -491,6 +496,7 @@ window.noname_character_rank={ 'key_shizuku', 'wangrong', 're_fazheng', + 'tw_re_fazheng', 'huaxin', 're_chunyuqiong', 'ns_luyusheng', @@ -550,6 +556,13 @@ window.noname_character_rank={ 'chenjiao', 'chengbing', 'sb_caosong', + 'guyong', + 'tw_jiangqing', + 'tw_liuzhang', + 'tw_wangling', + 'tw_zhangji', + 'tw_liyàn', + 'xuelingyun', ], bp:[ 'chess_diaochan', @@ -763,7 +776,7 @@ window.noname_character_rank={ 're_caifuren', 'sp_kongrong', 'qiaogong', - 'liuzhang', + 'tw_qiaogong', 're_guyong', 'xin_zhonghui', 'jiachong', @@ -851,6 +864,22 @@ window.noname_character_rank={ 'shiyi', 'gongsundu', 'yuanji', + 'dc_chenqun', + 'liupi', + 'mazhong', + 're_mazhong', + 'tw_baoxin', + 'tw_bingyuan', + 'tw_chenzhen', + 'tw_handang', + 'tw_haomeng', + 'tw_liwei', + 'tw_mateng', + 'tw_xunchen', + 'tw_zhangfei', + 'tw_zhangning', + 'xia_tongyuan', + 'xia_wangyue', ], b:[ 'diy_feishi', @@ -1008,6 +1037,7 @@ window.noname_character_rank={ 'sp_zhangliao', 'xinxianying', 'sp_bianfuren', + 'tw_bianfuren', 'key_haruko', 'key_rei', 'key_komari', @@ -1105,6 +1135,22 @@ window.noname_character_rank={ 'sunlang', 'yangfu', 'sp_pengyang', + 'tw_caoxiu', + 'tw_chendong', + 'tw_feiyi', + 'tw_fengxí', + 'tw_guyong', + 'tw_huchuquan', + 'tw_jianshuo', + 'dc_jiling', + 'tw_jiling', + 'tw_liufuren', + 'tw_madai', + 'tw_sunyi', + 'tw_xuezong', + 'tw_yufuluo', + 'tw_zongyu', + 'xia_xushu', ], bm:[ 'diy_xizhenxihong', @@ -1148,7 +1194,6 @@ window.noname_character_rank={ 'guanping', 'old_guanzhang', 'old_wangyi', - 'guyong', 'zhuran', 'xusheng', 'wuguotai', @@ -1218,9 +1263,11 @@ window.noname_character_rank={ 'daxiaoqiao', 'sp_pangde', 'sp_jiaxu', + 'dc_sp_jiaxu', 'kanze', 'heqi', 'wangyun', + 'dc_wangyun', 'sunqian', 'xujing', 'baosanniang', @@ -1275,6 +1322,14 @@ window.noname_character_rank={ 'panghui', 'leibo', 'dongguiren', + 'tw_daxiaoqiao', + 'tw_fanchou', + 'tw_qiaorui', + 'tw_weixu', + 'tw_xujing', + 'tw_yangyi', + 'tw_zhouchu', + 'tw_zhugeguo', ], c:[ 'xiahoudun', @@ -1312,7 +1367,6 @@ window.noname_character_rank={ 're_dongzhuo', 'old_yuanshu', 're_hanhaoshihuan', - 'mazhong', 'lingju', 'panfeng', 'hanba', @@ -1325,6 +1379,10 @@ window.noname_character_rank={ 'caimaozhangyun', 'ahuinan', 'mushun', + 'tw_dengzhi', + 'tw_furong', + 'tw_niujin', + 'tw_zhangnan', ], d:[ 'lvmeng', @@ -1353,6 +1411,9 @@ window.noname_character_rank={ 'wangjun', 'xin_wuyi', 'xin_zhuzhi', + 'tw_guanqiujian', + 'tw_xiahouen', + 'tw_yl_luzhi', ], rarity:{ legend:[ @@ -1488,6 +1549,10 @@ window.noname_character_rank={ 'liuhui', 'shen_zhangjiao', 'sb_machao', + 'dc_zhouxuān', + 'tw_jiangji', + 'tw_niufudongxie', + 'tw_shen_lvmeng', 'key_tomoya', 'key_masato', 'key_shiorimiyuki', @@ -1700,6 +1765,12 @@ window.noname_character_rank={ 'ol_liuba', 'shiyi', 'yuanji', + 'tw_liuzhang', + 'tw_mateng', + 'dc_wangyun', + 'tw_zhangning', + 'tw_zhugeguo', + 'xuelingyun', 'key_kano', 'key_haruko', 'key_akiko', @@ -1986,6 +2057,7 @@ window.noname_character_rank={ 'duyu', 'zhanghuyuechen', 're_fazheng', + 'tw_re_fazheng', 're_fuhuanghou', 'gongsunkang', 'xin_panzhangmazhong', @@ -2002,6 +2074,7 @@ window.noname_character_rank={ 're_zhangchunhua', 'xin_handang', 'sp_bianfuren', + 'tw_bianfuren', 'luotong', 'feiyi', 'sp_jiben', @@ -2016,6 +2089,7 @@ window.noname_character_rank={ 'huangchengyan', 'liangxing', 'wangling', + 'tw_wangling', 'zhouchu', 'dongcheng', 'tangji', @@ -2029,6 +2103,7 @@ window.noname_character_rank={ 'xin_caifuren', 'sp_yanghu', 'qiaogong', + 'tw_qiaogong', 'liuzhang', 'zhangzhongjing', 'xin_zhonghui', @@ -2133,6 +2208,25 @@ window.noname_character_rank={ 'chengbing', 'gongsundu', 'xin_caoxiu', + 'dc_chenqun', + 'liupi', + 'tw_baoxin', + 'tw_bingyuan', + 'tw_chenzhen', + 'tw_fengxí', + 'tw_haomeng', + 'tw_huchuquan', + 'tw_jiangqing', + 'tw_jianshuo', + 'tw_jiling', + 'tw_liufuren', + 'tw_liwei', + 'tw_xunchen', + 'tw_zhangfei', + 'tw_zhangji', + 'xia_liyàn', + 'xia_tongyuan', + 'xia_wangyue', ], junk:[ 'sunshao', @@ -2164,6 +2258,7 @@ window.noname_character_rank={ 'wangjun', 'xin_wuyi', 'xin_zhuzhi', + 'tw_xiahouen', ], } }; diff --git a/character/refresh.js b/character/refresh.js index f0391578e..8acf92058 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -12,14 +12,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_yijiang1:['xin_wuguotai','xin_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua','dc_xushu','re_chengong'], refresh_yijiang2:['re_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','dc_bulianshi','xin_liubiao','re_xunyou'], refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','xin_yufan','dc_liru','re_manchong','re_fuhuanghou','re_guanping','re_liufeng'], - refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren','re_guyong','re_jushou','re_zhuhuan'], + refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','dc_chenqun','re_caifuren','re_guyong','re_jushou','re_zhuhuan'], refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi','re_liuchen'], refresh_yijiang6:['re_guohuanghou','re_sundeng'], - refresh_xinghuo:['re_duji','dc_gongsunzan','re_sp_taishici','re_caiyong'], + refresh_xinghuo:['re_duji','dc_gongsunzan','re_sp_taishici','re_caiyong','re_mazhong'], }, }, connect:true, character:{ + re_mazhong:['male','shu',4,['refuman']], + dc_chenqun:['male','wei',3,['repindi','refaen']], re_sundeng:['male','wu',4,['rekuangbi']], re_caiyong:['male','qun',3,['rebizhuan','retongbo']], re_chengong:['male','qun',3,['remingce','zhichi']], @@ -46,7 +48,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_caifuren:['female','qun',3,['reqieting','rexianzhou']], re_guanping:['male','shu',4,['relongyin','jiezhong']], re_guotufengji:['male','qun',3,['rejigong','shifei']], - re_chenqun:['male','wei',3,['redingpin','refaen']], re_zhoucang:['male','shu',4,['rezhongyong']], ol_zhurong:['female','shu',4,['juxiang','lieren','changbiao']], re_zhangchunhua:['female','wei',3,['rejueqing','reshangshi']], @@ -154,6 +155,140 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_xushu:['zhaoyun','sp_zhugeliang'], }, skill:{ + //马忠 + refuman:{ + audio:2, + enable:'phaseUse', + filterTarget:function(card,player,target){ + if(target==player) return false; + var stat=player.getStat('skill').refuman_targets; + return !stat||!stat.contains(target); + }, + filter:function(event,player){ + return player.countCards('h')>0&&game.hasPlayer((current)=>lib.skill.refuman.filterTarget(null,player,current)); + }, + filterCard:true, + content:function(){ + var card=get.discardPile(card=>card.name=='sha'); + if(card){ + target.gain(card,'gain2').gaintag.add('refuman'); + target.addTempSkill('refuman2',{player:'phaseAfter'}); + player.addSkill('refuman_draw'); + } + var stat=player.getStat('skill'); + if(!stat.refuman_targets) stat.refuman_targets=[]; + stat.refuman_targets.push(target); + }, + check:function(card){ + return get.discardPile(card=>card.name=='sha')?6-get.value(card):0; + }, + ai:{ + order:2, + result:{ + target:function(player,target){ + if(!target.hasSha()) return 1.2; + return 1; + } + } + }, + subSkill:{ + draw:{ + trigger:{global:['useCard','respond']}, + forced:true, + charlotte:true, + filter:function(event,player){ + return event.player.hasHistory('lose',function(evt){ + if(evt.getParent()!=event) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('refuman')) return true; + } + return false; + }); + }, + logTarget:'player', + content:function(){ + game.asyncDraw([trigger.player,player]); + }, + }, + }, + }, + refuman2:{ + onremove:function(player){ + player.removeGaintag('refuman'); + }, + mod:{ + aiOrder:function(player,card,num){ + if(get.itemtype(card)=='card'&&card.hasGaintag('refuman')) return num+1; + } + }, + }, + //十周年陈群 + repindi:{ + audio:2, + enable:'phaseUse', + filterTarget:function(card,player,target){ + return !player.getStorage('repindi_target').contains(target); + }, + filterCard:function(card,player){ + return !player.getStorage('repindi_type').contains(get.type2(card)); + }, + check:function(card){ + var num=_status.event.player.getStat('skill').repindi||0; + return 6+num-get.value(card); + }, + position:'he', + content:function(){ + 'step 0' + player.addTempSkill('repindi_clear',['phaseUseAfter','phaseAfter']); + player.markAuto('repindi_target',[target]); + player.markAuto('repindi_type',[get.type2(cards[0],cards[0].original=='h'?player:false)]); + event.num=player.getStat('skill').repindi; + player.syncStorage(); + if(target.countCards('he')==0) event._result={index:0}; + else{ + player.chooseControlList([ + '令'+get.translation(target)+'摸'+get.cnNumber(event.num)+'张牌', + '令'+get.translation(target)+'弃置'+get.cnNumber(event.num)+'张牌' + ],function(){ + return _status.event.choice; + }).set('choice',get.attitude(player,target)>0?0:1); + } + 'step 1' + if(result.index==0){ + target.draw(event.num); + } + else{ + target.chooseToDiscard(event.num,'he',true); + } + 'step 2' + if(target.isDamaged()){ + player.link(); + } + }, + subSkill:{ + clear:{ + trigger:{player:'phaseAfter'}, + charlotte:true, + silent:true, + onremove:function(player){ + delete player.storage.repindi_target; + delete player.storage.repindi_type; + } + } + }, + ai:{ + order:8, + threaten:1.9, + result:{ + target:function(player,target){ + var att=get.attitude(player,target); + var num=(player.getStat('skill').repindi||0)+1; + if(att<=0&&target.countCards('he')0; }, frequent:true, prompt2:function(trigger,player){ - var cards=[trigger.card1,trigger.card2].filter(function(card){ + var list=[]; + if(trigger.name=='compareMultiple') list.addArray([trigger.card1,trigger.card2]); + else if(!trigger.compareMultiple) list.addArray(trigger.cards); + var cards=list.filter(function(card){ return card.name=='sha'&&get.position(card,true)=='o'; }); cards.sort(function(a,b){ @@ -6706,7 +6847,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return '获得'+get.translation(cards); }, content:function(){ - var cards=[trigger.card1,trigger.card2].filter(function(card){ + var list=[]; + if(trigger.name=='compareMultiple') list.addArray([trigger.card1,trigger.card2]); + else if(!trigger.compareMultiple) list.addArray(trigger.cards); + var cards=list.filter(function(card){ return card.name=='sha'&&get.position(card,true)=='o'; }); cards.sort(function(a,b){ @@ -9410,7 +9554,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - xinleiji_faq:{}, reqingguo:{ mod:{ aiValue:function(player,card,num){ @@ -10110,7 +10253,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:"damageBegin1", }, filter:function(event){ - return event.source&&event.source==_status.currentPhase&&event.card.name=='sha'&&get.suit(event.card)=='heart'&&event.notLink(); + return event.source&&event.source==_status.currentPhase&&event.card&&event.card.name=='sha'&&get.suit(event.card)=='heart'&&event.notLink(); }, popup:false, forced:true, @@ -12919,7 +13062,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinleiji:'雷击', xinleiji_misa:'雷击', xinguidao:'鬼道', - xinleiji_info:'①当你使用或打出【闪】或【闪电】时,你可以进行判定。②当你的判定的判定牌生效后,若结果为:黑桃,你可对一名其他角色造成2点雷电伤害;梅花:你回复1点体力并可对一名其他其他角色造成1点雷电伤害。', + xinleiji_info:'①当你使用【闪】或【闪电】,或打出【闪】时,你可以进行判定。②当你的判定的判定牌生效后,若结果为:黑桃,你可对一名其他角色造成2点雷电伤害;梅花:你回复1点体力并可对一名其他其他角色造成1点雷电伤害。', xinleiji_append:'不能触发〖雷击〗的判定:〖暴虐〗、〖助祭〗、
〖弘仪〗、〖孤影〗。
', xinleiji_faq:'不能触发〖雷击〗的判定', xinleiji_faq_info:'
董卓/界董卓〖暴虐〗
黄巾雷使〖助祭〗
羊徽瑜〖弘仪〗
鸣濑白羽〖孤影〗', @@ -13198,7 +13341,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_taishici:'界太史慈', hanzhan:'酣战', hanzhan_gain:'酣战', - hanzhan_info:'当你发起拼点时,或成为拼点的目标时,你可以令对方选择拼点牌的方式改为随机选择一张手牌。当你拼点结束后,你可以获得双方拼点牌中点数最大的【杀】。', + hanzhan_info:'①当你发起拼点时,或成为拼点的目标时,你可以令对方选择拼点牌的方式改为随机选择一张手牌。②当你拼点结束后,你可以获得本次拼点的拼点牌中点数最大的【杀】。', re_jianyong:'界简雍', xin_xusheng:'界徐盛', decadepojun:'破军', @@ -13209,9 +13352,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guanzhang:'界关兴张苞', rezishou:'自守', rezishou2:'自守', - rezishou_info:'摸牌阶段,你可以多摸X张牌。若如此做,本回合你对其他角色造成伤害时,防止此伤害。', + rezishou_info:'摸牌阶段,你可以多摸X张牌(X为存活势力数)。若如此做,本回合你对其他角色造成伤害时,防止此伤害。', rezongshi:'宗室', - rezongshi_info:'锁定技,你的手牌上限+X(X为势力数)。准备阶段,若你的手牌数大于体力值,则你本回合内使用【杀】无次数限制。', + rezongshi_info:'锁定技,你的手牌上限+X(X为存活势力数)。准备阶段,若你的手牌数大于体力值,则你本回合内使用【杀】无次数限制。', ol_dongzhuo:'界董卓', olbaonue:'暴虐', olbaonue_info:'主公技,其他群雄角色造成1点伤害后,你可进行判定,若为♠,你回复1点体力并获得判定牌。', @@ -13228,7 +13371,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ decadelihuo:'疠火', decadelihuo2:'疠火', decadelihuo3:'疠火', - decadelihuo_info:'当你声明使用普【杀】时,你可以将此【杀】改为火【杀】。当你使用火【杀】选择目标时,可以选择一个额外目标。你使用的火【杀】结算完成后,若此【杀】的目标数大于1且你因此【杀】造成过伤害,则你失去1点体力。', + decadelihuo_info:'当你声明使用普【杀】后,你可以将此【杀】改为火【杀】。当你使用火【杀】选择目标时,可以选择一个额外目标。你使用的火【杀】结算完成后,若此【杀】的目标数大于1且你因此【杀】造成过伤害,则你失去1点体力。', decadechunlao:'醇醪', decadechunlao2:'醇醪', decadechunlao_info:'你可以对其他角色使用【酒(使用方法②)】。当你需要使用【酒】时,若你的武将牌未横置,则你可以将武将牌横置,然后视为使用【酒】。当你受到或造成伤害后,若伤害值大于1且你的武将牌横置,则你可以重置武将牌。', @@ -13258,9 +13401,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xin_liubiao:'界刘表', decadezishou:'自守', decadezishou_zhiheng:'自守', - decadezishou_info:'摸牌阶段,你可以多摸X张牌,然后本回合你对其他角色造成伤害时,防止此伤害。结束阶段,若你本回合没有使用牌指定其他角色为目标,你可以弃置任意张花色不同的手牌,然后摸等量的牌。', + decadezishou_info:'摸牌阶段,你可以多摸X张牌(X为存活势力数);然后本回合你对其他角色造成伤害时,防止此伤害。结束阶段,若你本回合没有使用牌指定其他角色为目标,你可以弃置任意张花色不同的手牌,然后摸等量的牌。', decadezongshi:'宗室', - decadezongshi_info:'锁定技,你的手牌上限+X(X为现存势力数)。你的回合外,若你的手牌数大于等于手牌上限,则当你成为延时类锦囊牌或无颜色的牌的目标后,你令此牌对你无效。', + decadezongshi_info:'锁定技,你的手牌上限+X(X为存活势力数)。你的回合外,若你的手牌数大于等于手牌上限,则当你成为延时类锦囊牌或无颜色的牌的目标后,你令此牌对你无效。', re_fazheng:'界法正', reenyuan:'恩怨', reenyuan1:'恩怨', @@ -13308,7 +13451,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ollihuo_info:'你使用普通的【杀】可以改为火【杀】,若此【杀】造成过伤害,你失去1点体力;你使用火【杀】可以多选择一个目标。你每回合使用的第一张牌如果是【杀】,则此【杀】结算完毕后可置于你的武将牌上。', xinjiangchi:'将驰', xinjiangchi_info:'出牌阶段开始时,你可选择:①摸一张牌。②摸两张牌,然后本回合内不能使用或打出【杀】。③弃置一张牌,然后本回合内可以多使用一张【杀】,且使用【杀】无距离限制。', - re_chenqun:'界陈群', + re_chenqun:'手杀陈群', redingpin:'定品', redingpin_info:'出牌阶段,你可以弃置一张本回合未使用过/弃置过的类型的牌并选择一名角色。其进行判定,若结果为:黑色,其摸X张牌(X为其体力值且至多为3)且本回合内不能再成为〖定品〗的目标;红桃,你令此次弃置的牌不计入〖定品〗弃置牌合法性的检测;方片,你将武将牌翻面。', refaen:'法恩', @@ -13330,7 +13473,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ decadejingce_info:'结束阶段,若你本回合使用过的牌数不小于你的体力值,则你可执行一个摸牌阶段或出牌阶段;若这些牌包含的花色数也不小于你的体力值,则你将“或”改为“并”。', re_guanping:'界关平', relongyin:'龙吟', - relongyin_info:'当一名角色于其出牌阶段使用【杀】时,你可弃置一张牌令此【杀】不计入出牌阶段使用次数。若此【杀】为红色,则你摸一张牌;若你以此法弃置的牌与此【杀】点数相同,则你重置“竭忠”。', + relongyin_info:'当一名角色于其出牌阶段内使用【杀】时,你可弃置一张牌令此【杀】不计入出牌阶段使用次数。若此【杀】为红色,则你摸一张牌;若你以此法弃置的牌与此【杀】点数相同,则你重置“竭忠”。', jiezhong:'竭忠', jiezhong_info:'限定技,出牌阶段开始时,你可以将手牌补至手牌上限(至多摸五张)。', re_caifuren:'界蔡夫人', @@ -13348,7 +13491,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinpaiyi_info:'出牌阶段每项各限一次,你可移去一张“权”并选择一项:①令一名角色摸X张牌。②对至多X名角色各造成1点伤害。(X为“权”数)', re_guyong:'界顾雍', reshenxing:'慎行', - reshenxing_info:'出牌阶段,你可以弃置X张牌(X为你本阶段内发动过〖慎行〗的次数且至多为2),然后摸一张牌。', + reshenxing_info:'出牌阶段,你可以弃置X张牌(X为你本阶段内发动过〖慎行〗的次数且至少为0,至多为2),然后摸一张牌。', rebingyi:'秉壹', rebingyi_info:'结束阶段,你可展示所有手牌。若这些牌:颜色均相同,则你可以令至多X名角色各摸一张牌(X为你的手牌数);点数均相同,则你摸一张牌。', re_jiaxu:'界贾诩', @@ -13378,7 +13521,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reqiaoshi_info:'其他角色的结束阶段开始时,若你的手牌数与其相等,则你可以与其各摸一张牌。若这两张牌花色相同,则你可以重复此步骤。', reyanyu:'燕语', reyanyu2:'燕语', - reyanyu_info:'①出牌阶段,你可以重铸【杀】。②出牌阶段结束时,你可以令一名男性角色摸X张牌(X为你本阶段内发动过〖燕语①〗的次数且至多为3)。', + reyanyu_info:'①出牌阶段,你可以重铸【杀】。②出牌阶段结束时,你可以令一名其他男性角色摸X张牌(X为你本阶段内发动过〖燕语①〗的次数且至多为3)。', rehujia:'护驾', rehujia_info:'主公技。①当你需要使用或打出一张【闪】时,你可以令其他魏势力角色选择是否打出一张【闪】。若有角色响应,则你视为使用或打出了一张【闪】。②每回合限一次。当有魏势力角色于回合外使用或打出【闪】时,其可以令你摸一张牌。', ol_xuhuang:'界徐晃', @@ -13492,6 +13635,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_sundeng:'界孙登', rekuangbi:'匡弼', rekuangbi_info:'出牌阶段开始时,你可以令一名其他角色将至多三张牌置于你的武将牌上直到此阶段结束。然后当你使用牌时,若你:有与此牌花色相同的“匡弼”牌,你移去其中一张并与其各摸一张牌;没有与此牌花色相同的“匡弼”牌,你随机移去一张“匡弼”牌并摸一张牌。', + dc_chenqun:'界陈群', + repindi:'品第', + repindi_info:'出牌阶段每名角色限一次。你可以弃置一张本阶段未以此法弃置过的类型的牌并选择一名角色,你选择一项:1.其摸X张牌;2.其弃置X张牌(X为你本回合发动〖品第〗的次数)。然后若其已受伤,你横置或重置。', + re_mazhong:'界马忠', + refuman:'抚蛮', + refuman_info:'出牌阶段每名角色限一次。你可以弃置一张牌,令一名其他角色从弃牌堆中获得一张【杀】。然后其于其下个回合结束前使用或打出此牌时,你与其各摸一张牌。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/sb.js b/character/sb.js index 54683ebc5..c00325da3 100644 --- a/character/sb.js +++ b/character/sb.js @@ -15,7 +15,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sb_sunquan:['male','wu',4,['sbzhiheng','sbtongye','sbjiuyuan'],['zhu']], sb_huanggai:['male','wu',4,['sbkurou','sbzhaxiang']], sb_zhouyu:['male','wu',3,['sbyingzi','sbfanjian']], - sb_caoren:['male','wei',4,['sbjushou','sbjiewei']], + sb_caoren:['male','wei','4/4/1',['sbjushou','sbjiewei']], sb_xiahoushi:['female','shu',3,['sbqiaoshi','sbyanyu']], sb_zhangjiao:['male','qun',3,['sbleiji','sbguidao','sbhuangtian'],['zhu']], sb_caocao:['male','wei',4,['sbjianxiong','sbqingzheng','sbhujia'],['zhu']], @@ -23,17 +23,342 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sb_ganning:['male','wu',4,['sbqixi','sbfenwei']], sb_machao:['male','shu',4,['mashu','sbtieji']], sb_xuhuang:['male','wei',4,['sbduanliang','sbshipo']], + sb_zhangfei:['male','shu',4,['sbpaoxiao','sbxieji']], + sb_zhaoyun:['male','shu',4,['sblongdan','sbjizhu']], }, characterSort:{ sb:{ sb_zhi:['sb_sunquan','sb_zhouyu','sb_zhangjiao','sb_caocao','sb_zhenji'], sb_shi:['sb_xuhuang','sb_machao'], - sb_tong:['liucheng','sp_yangwan','sb_xiahoushi'], + sb_tong:['liucheng','sp_yangwan','sb_xiahoushi','sb_zhangfei'], sb_yu:['sb_yujin','sb_lvmeng','sb_huangzhong','sb_huanggai','sb_zhouyu','sb_caoren','sb_ganning'], sb_neng:['sb_huaxiong','sb_sunshangxiang'], } }, skill:{ + //赵云 + sblongdan:{ + audio:2, + enable:['chooseToUse','chooseToRespond'], + chargeSkill:true, + filter:function(event,player){ + if(event.type=='wuxie'||!player.hasMark('charge')) return false; + var marked=player.hasSkill('sblongdan_mark',null,null,false); + for(var name of lib.inpile){ + if(!marked&&name!='sha'&&name!='shan') continue; + if(get.type(name)!='basic') continue; + if(player.hasCard(lib.skill.sblongdan.getFilter(name,player),'hs')){ + if(event.filterCard({name:name},player,event)) return true; + if(marked&&name=='sha'){ + for(var nature of lib.inpile_nature){ + if(event.filterCard({name:name,nature:nature},player,event)) return true; + } + } + } + } + return false; + }, + chooseButton:{ + dialog:function(event,player){ + var list=[]; + var marked=player.hasSkill('sblongdan_mark',null,null,false); + for(var name of lib.inpile){ + if(!marked&&name!='sha'&&name!='shan') continue; + if(get.type(name)!='basic') continue; + if(player.hasCard(lib.skill.sblongdan.getFilter(name,player),'hs')){ + if(event.filterCard({name:name},player,event)) list.push(['基本','',name]); + if(marked&&name=='sha'){ + for(var nature of lib.inpile_nature){ + if(event.filterCard({name:name,nature:nature},player,event)) list.push(['基本','',name,nature]) + } + } + } + } + return ui.create.dialog('龙胆',[list,'vcard'],'hidden'); + }, + check:function(button){ + if(_status.event.getParent().type!='phase') return 1; + var player=_status.event.player,card={name:button.link[2],nature:button.link[3]}; + if(card.name=='jiu'&&Math.min(player.countMark('charge'),player.countCards('h',{type:'basic'}))<2) return 0; + return player.getUseValue(card,null,true); + }, + backup:function(links,player){ + return { + viewAs:{ + name:links[0][2], + nature:links[0][3], + }, + filterCard:lib.skill.sblongdan.getFilter(links[0][2],player), + position:'he', + popname:true, + check:function(card){ + return 6/Math.max(1,get.value(card)); + }, + precontent:function(){ + player.removeMark('charge',1); + player.addTempSkill('sblongdan_draw'); + }, + } + }, + prompt:function(links,player){ + var marked=player.hasSkill('sblongdan_mark',null,null,false); + var card={ + name:links[0][2], + nature:links[0][3], + isCard:true, + }; + if(marked) return '将一张基本牌当做'+get.translation(card)+'使用'; + return '将一张'+(card.name=='sha'?'闪':'杀')+'当做'+get.translation(card)+'使用'; + }, + }, + hiddenCard:function(player,name){ + if(get.type(name)!='basic'||!player.hasSkill('charge')) return false; + if(!marked&&name!='sha'&&name!='shan') return false; + var marked=player.hasSkill('sblongdan_mark',null,null,false); + return player.hasCard(lib.skill.sblongdan.getFilter(name,player),'hs'); + }, + ai:{ + respondSha:true, + respondShan:true, + skillTagFilter:function(player,tag){ + return lib.skill.sblongdan.hiddenCard(player,tag=='respondSha'?'sha':'shan') + }, + order:9, + result:{ + player:function(player){ + if(_status.event.dying) return get.attitude(player,_status.event.dying); + return 1; + }, + }, + }, + getFilter:function(name,player){ + if(!player.hasSkill('sblongdan_mark',null,null,false)){ + if(name=='sha') return {name:'shan'}; + if(name=='shan') return {name:'sha'}; + return (()=>false); + } + return {type:'basic'}; + }, + group:'sblongdan_charge', + onremove:function(player){ + player.removeSkill('sblongdan_mark'); + }, + subSkill:{ + backup:{audio:'sblongdan'}, + mark:{charlotte:true}, + draw:{ + charlotte:true, + trigger:{player:'useCardAfter'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.skill=='sblongdan_backup'; + }, + content:function(){ + player.draw(); + }, + }, + charge:{ + audio:'sblongdan', + trigger:{ + global:['phaseBefore','phaseEnd'], + player:'enterGame', + }, + forced:true, + filter:function(event,player,name){ + if(player.countMark('charge')>2) return false; + return (name!='phaseBefore'||game.phaseNumber==0); + }, + content:function(){ + player.addMark('charge',1); + }, + }, + }, + }, + sbjizhu:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(lib.filter.notMe,get.prompt('sbjizhu'),'和一名其他角色进行“协力”').set('ai',function(target){ + return get.threaten(target)*Math.sqrt(1+target.countCards('h'))*((target.isTurnedOver()||target.hasJudge('lebu'))?0.1:1); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('sbjizhu',target); + player.chooseCooperationFor(target,'sbjizhu').set('ai',function(button){ + var base=0; + switch(button.link){ + case 'cooperation_damage':base=0.1;break; + case 'cooperation_draw':base=0.6;break; + case 'cooperation_discard':base=0.1;break; + case 'cooperation_use':base=0.6;break; + } + return base+Math.random(); + }); + player.addAdditionalSkill('cooperation','sbjizhu_effect'); + } + else event.finish(); + 'step 2' + game.delayx(); + }, + subSkill:{ + effect:{ + audio:'sbjizhu', + charlotte:true, + trigger:{global:'phaseJieshuBegin'}, + forced:true, + logTarget:'player', + filter:function(event,player){ + return player.checkCooperationStatus(event.player,'sbjizhu')&&player.hasSkill('sblongdan',null,null,false); + }, + content:function(){ + game.log(player,'和',trigger.player,'的协力成功'); + player.addTempSkill('sblongdan_mark',{player:'phaseJieshuBegin'}); + game.delayx(); + }, + }, + }, + derivation:'sblongdan_shabi', + }, + //张飞 + sbpaoxiao:{ + audio:2, + mod:{ + cardUsable:function(card){ + if(card.name=='sha') return true; + }, + targetInRange:function(card,player,target){ + if(card.name=='sha'&&player.getEquip(1)) return true; + }, + }, + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + if(event.card.name!='sha') return false; + var evt=event.getParent('phaseUse'); + if(!evt||evt.player!=player) return false; + return player.hasHistory('useCard',function(evtx){ + return evtx!=event&&evtx.card.name=='sha'&&evtx.getParent('phaseUse')==evt; + },event); + }, + content:function(){ + if(!trigger.card.storage) trigger.card.storage={}; + trigger.card.storage.sbpaoxiao=true; + trigger.baseDamage++; + trigger.directHit.addArray(game.players); + player.addTempSkill('sbpaoxiao_effect','phaseUseAfter'); + }, + subSkill:{ + effect:{ + charlotte:true, + trigger:{player:'useCardToPlayered'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.card.storage&&event.card.storage.sbpaoxiao&&event.target.isAlive(); + }, + content:function(){ + trigger.target.addTempSkill('fengyin'); + }, + group:'sbpaoxiao_recoil', + }, + recoil:{ + charlotte:true, + trigger:{source:'damageSource'}, + forced:true, + filter:function(event,player){ + return event.card&&event.card.storage&&event.card.storage.sbpaoxiao&&event.player.isAlive(); + }, + content:function(){ + 'step 0' + player.loseHp(); + 'step 1' + var hs=player.getCards('h',function(card){ + return lib.filter.cardDiscardable(card,player,'sbpaoxiao_recoil'); + }); + if(hs.length>0) player.discard(hs.randomGet()); + }, + }, + }, + }, + sbxieji:{ + audio:3, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(lib.filter.notMe,get.prompt('sbxieji'),'和一名其他角色进行“协力”').set('ai',function(target){ + return get.threaten(target)*Math.sqrt(1+target.countCards('h'))*((target.isTurnedOver()||target.hasJudge('lebu'))?0.1:1); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('sbxieji',target); + //选择对方的协击条件 + player.chooseCooperationFor(target,'sbxieji').set('ai',function(button){ + var base=0; + switch(button.link){ + case 'cooperation_damage':base=0.8;break; + case 'cooperation_draw':base=0.1;break; + case 'cooperation_discard':base=0.1;break; + case 'cooperation_use':base=0.1;break; + } + return base+Math.random(); + }); + //保证技能cooperation被移除之后 失去该技能 + player.addAdditionalSkill('cooperation','sbxieji_effect'); + } + else event.finish(); + 'step 2' + game.delayx(); + }, + subSkill:{ + effect:{ + audio:'sbxieji', + charlotte:true, + trigger:{global:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + //判断自己是否有目标为该角色 且已经完成的协力记录 + return player.checkCooperationStatus(event.player,'sbxieji'); + }, + content:function(){ + 'step 0' + game.log(player,'和',trigger.player,'的协力成功'); + player.chooseTarget('协击:请选择【杀】的目标','你和'+get.translation(trigger.player)+'协力成功,可以视为对至多三名其他角色使用一张【杀】,且此【杀】造成伤害时,你摸等同于伤害值的牌',[1,3],true,function(card,player,target){ + return player.canUse('sha',target,false); + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'sha'},player,player); + }); + 'step 1' + if(result.bool){ + player.addTempSkill('sbxieji_reward','sbxieji_effectAfter'); + player.useCard({ + name:'sha', + isCard:true, + storage:{sbxieji:true}, + },'sbxieji_effect',result.targets); + } + }, + }, + reward:{ + charlotte:true, + trigger:{source:'damageSource'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.card&&event.card.storage&&event.card.storage.sbxieji&&event.getParent().type=='card'; + }, + content:function(){ + player.draw(trigger.num); + }, + }, + }, + }, //徐晃 sbduanliang:{ audio:2, @@ -859,6 +1184,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.recover(trigger.num); trigger.source.draw(2); } + else player.storage.counttrigger.sbqiaoshi--; }, ai:{ effect:{ @@ -2321,6 +2647,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sbkeji:function (player) { return '①出牌阶段' + (player.storage.sbkeji ? '' :'各') + '限一次。你可以选择一项:1.弃置一张手牌,然后获得1点护甲;2.失去1点体力,然后获得2点护甲。②你的手牌上限+X(X为你的护甲数)。③若你不为正在结算濒死流程的角色,你不能使用【桃】。'; }, + sblongdan:function(player){ + if(player.hasSkill('sblongdan_mark',null,null,false)) return '蓄力技(1/3)。①你可以消耗1点蓄力值,将一张基本牌当做任意基本牌使用或打出,然后摸一张牌。②一名角色的回合结束时,你获得1点蓄力值。'; + return '蓄力技(1/3)。①你可以消耗1点蓄力值,将【杀】当做【闪】或将【闪】当做【杀】使用或打出,然后摸一张牌。②一名角色的回合结束时,你获得1点蓄力值。'; + }, }, translate:{ sp_yangwan:'手杀杨婉', @@ -2367,7 +2697,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sbjiuyuan_info:'主公技,锁定技。①其他吴势力角色使用【桃】时,你摸一张牌。②其他吴势力角色对你使用的【桃】的回复量+1。', sb_huanggai:'谋黄盖', sbkurou:'苦肉', - sbkurou_info:'①出牌阶段开始时,你可以交给其他角色一张牌,若此牌为【桃】或【酒】,你失去2点体力,否则你失去1点体力。②当你失去1点体力后,你获得2点护甲。', + sbkurou_info:'①出牌阶段开始时,你可以交给其他角色一张牌,若此牌于对方手牌区内为【桃】或【酒】,你失去2点体力,否则你失去1点体力。②当你失去1点体力后,你获得2点护甲。', sbzhaxiang:'诈降', sbzhaxiang_info:'锁定技。①摸牌阶段,你多摸X张牌。②你每回合使用的前X张牌无距离与次数限制且不能被响应(X为你已损失的体力值)。', sb_zhouyu:'谋周瑜', @@ -2415,6 +2745,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sbduanliang_info:'出牌阶段限一次。你可以与一名其他角色进行谋奕。若你赢,且你选择的选项为:“围城断粮”,若其判定区没有【兵粮寸断】,你将牌堆顶牌当【兵粮寸断】对其使用,否则你获得其一张牌;“擂鼓进军”,你视为对其使用一张【决斗】。', sbshipo:'势迫', sbshipo_info:'结束阶段,你可以令一名体力少于你的角色或所有判定区有【兵粮寸断】的其他角色选择一项:1.交给你一张手牌;2.受到1点伤害。所有目标角色选择完成后,你可以将任意张你以此法获得的牌交给一名其他角色。', + sb_zhangfei:'谋张飞', + sbpaoxiao:'咆哮', + sbpaoxiao_info:'锁定技。①你使用【杀】无距离限制。②若你的装备区内有武器牌,则你使用【杀】无距离限制。③当你于出牌阶段内使用第二张及以后【杀】时,你获得如下效果:{此【杀】不可被响应且伤害值基数+1;此【杀】指定目标后,目标角色的非锁定技于本回合内失效;此【杀】造成伤害后,若目标角色存活,则你失去1点体力并随机弃置一张手牌。}', + sbxieji:'协击', + sbxieji_info:'准备阶段开始时,你可以和一名其他角色进行协力。其的下个结束阶段开始时,若你与其协力成功,则你可以选择至多三名其他角色。你对这些角色视为使用一张【杀】,且当此【杀】因执行牌面效果造成伤害后,你摸X张牌(X为伤害值)。', + sb_zhaoyun:'谋赵云', + sblongdan:'龙胆', + sblongdan_info:'蓄力技(1/3)。①你可以消耗1点蓄力值,将【杀】当做【闪】或将【闪】当做【杀】使用或打出,然后摸一张牌。②一名角色的回合结束时,你获得1点蓄力值。', + sbjizhu:'积著', + sbjizhu_info:'准备阶段开始时,你可以和一名其他角色进行协力。其的下个结束阶段开始时,若你与其协力成功,则你修改〖龙胆〗直到你的下个结束阶段开始。', + sblongdan_shabi:'龙胆', + sblongdan_shabi_info:'蓄力技(1/3)。①你可以消耗1点蓄力值,将一张基本牌当做任意基本牌使用或打出,然后摸一张牌。②一名角色的回合结束时,你获得1点蓄力值。', sb_zhi:'谋攻篇·知', sb_shi:'谋攻篇·识', diff --git a/character/sp.js b/character/sp.js index bf07d7023..51c43d3c0 100755 --- a/character/sp.js +++ b/character/sp.js @@ -17,7 +17,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_wanglang:['wanglang'], sp_tongque:["sp_fuwan","sp_fuhuanghou","sp_jiben"], sp_zhongdan:["cuiyan","huangfusong"], - sp_guozhan2:["mateng","tianfeng","sp_dongzhuo","liqueguosi","zhangren"], + sp_guozhan2:["tianfeng","sp_dongzhuo","liqueguosi","zhangren"], //sp_single:["niujin"], sp_others:["hanba","caiyang"], }, @@ -107,7 +107,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caoang:['male','wei',4,['kaikang']], sp_caoren:['male','wei',4,['weikui','lizhan']], zhangbao:['male','qun',3,['rezhoufu','reyingbing']], - maliang:['male','shu',3,['zishu','xinyingyuan']], + maliang:['male','shu',3,['zishu','yingyuan']], zhugedan:['male','wei',4,['gongao','juyi']], sp_jiangwei:['male','wei',4,['kunfen','fengliang']], sp_machao:['male','qun',4,['olzhuiji','ol_shichou']], @@ -151,11 +151,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mazhong:['male','shu',4,['fuman']], dongyun:['male','shu',3,['bingzheng','sheyan']], kanze:['male','wu',3,['xiashu','kuanshi']], - heqi:['male','wu',4,['qizhou','shanxi']], + heqi:['male','wu',4,['olqizhou','olshanxi']], ganfuren:['female','shu',3,['shushen','shenzhi']], //mifuren:['female','shu',3,['guixiu','cunsi']], - mateng:['male','qun',4,['xiongyi','mashu']], + //mateng:['male','qun',4,['xiongyi','mashu']], tianfeng:['male','qun',3,['sijian','suishi']], yuejin:['male','wei',4,['xiaoguo']], sp_dongzhuo:['male','qun',5,['hengzheng']], @@ -663,6 +663,147 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + olqizhou:{ + audio:'qizhou', + trigger:{ + player:'loseAfter', + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter','phaseBefore'], + }, + forced:true, + onremove:true, + filter:function(event,player){ + if(event.name!='phase'&&(event.name!='equip'||event.player!=player)){ + var evt=event.getl(player); + if(!evt||!evt.es||!evt.es.length) return false; + } + var num=player.countMark('olqizhou'); + return lib.skill.olqizhou.getSuitNum(player)!=num; + }, + content:function(){ + lib.skill.olqizhou.applyChange(player); + }, + getSuitNum:function(player){ + var suits=[],es=player.getCards('e'); + for(var i of es) suits.add(get.suit(i,player)); + return Math.min(4,suits.length); + }, + applyChange:function(player){ + player.removeAdditionalSkill('olqizhou'); + var num=lib.skill.olqizhou.getSuitNum(player); + player.storage.olqizhou=num; + if(num>0) player.addAdditionalSkill('olqizhou',lib.skill.olqizhou.derivation.slice(0,num)); + }, + derivation:['reduanbing','reyingzi','fenwei','lanjiang'], + }, + olshanxi:{ + audio:'shanxi', + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('e')<5&&game.hasPlayer((current)=>lib.skill.olshanxi.filterTarget(null,player,current)); + }, + filterTarget:function(card,player,target){ + return (target!=player&&player.countCards('h')+target.countCards('h')>0&&!player.inRangeOf(target)); + }, + content:function(){ + 'step 0' + var cards1=player.getCards('h'),cards2=target.getCards('h'); + var num=5-player.countCards('e'); + var dialog=['闪袭:选择展示至多'+get.cnNumber(num)+'张牌']; + if(cards1.length>0){ + dialog.push('
你的手牌
'); + dialog.push(cards1); + } + if(cards2.length>0){ + dialog.push('
'+get.translation(target)+'的手牌
'); + if(player.hasSkillTag('viewHandcard',null,target,true)) dialog.push(cards2); + else dialog.push([cards2.randomSort(),'blank']); + } + player.chooseButton(dialog,[1,num],true).set('ai',function(button){ + var player=_status.event.player,target=_status.event.getParent().target; + var card=button.link,cards=ui.selected.buttons.map(button=>button.link); + var hs=player.getCards('h'),discard=false; + for(var i of cards){ + if(hs.contains(i)){ + discard=true; + break; + } + } + if(hs.contains(card)){ + if(discard||get.name(card)!='shan') return 0; + if(target.hasCard(card=>get.value(card,target)>5,'e')) return 2; + return 0; + } + if(discard&&!target.hasCard(function(cardx){ + return cardx!=card&&!cards.contains(cardx)&&get.value(cardx,target)>0; + },'he')) return 0; + return 1+Math.random(); + }); + 'step 1' + if(result.bool){ + event.cards=result.links; + var list1=[],list2=[]; + var hs=player.getCards('h'); + for(var card of result.links){ + if(hs.contains(card)){ + list1.push(card); + } + else{ + list2.push(card); + } + } + event.list1=list1; + event.list2=list2; + event.videoId=lib.status.videoId++; + game.broadcastAll(function(player,target,list1,list2,id){ + var dialog=ui.create.dialog(player+'对'+target+'发动了【闪袭】'); + dialog.videoId=id; + if(list1.length>0){ + dialog.add('
'+player+'展示的牌
'); + dialog.add(list1); + } + if(list2.length>0){ + dialog.add('
'+target+'被展示的牌
'); + dialog.add(list2); + } + },get.translation(player),get.translation(target),list1,list2,event.videoId) + game.delay(4); + } + else event.finish(); + 'step 2' + game.broadcastAll('closeDialog',event.videoId); + var list1=event.list1.filter((card)=>get.name(card,player)=='shan'); + var list2=event.list2.filter((card)=>get.name(card,target)=='shan'); + if(list1.length&&list2.length){ + game.loseAsync({ + lose_list:[ + [player,list1], + [target,list2] + ], + discarder:player, + }).setContent('discardMultiple'); + } + else if(list2.length){ + target.discard(list2); + } + else if(list1.length) player.discard(list1); + else event.finish(); + 'step 3' + if(target.hasCard(function(card){ + return !cards.contains(card)&&lib.filter.canBeGained(card,player,target); + },'he')) player.gainPlayerCard(target,true,'he').set('filterButton',function(button){ + return !_status.event.cards.contains(button.link); + }).set('cards',cards); + }, + ai:{ + order:14, + result:{ + target:function(player,target){ + return -target.countCards('h'); + }, + }, + }, + }, //刘巴 oltongduo:{ audio:2, @@ -765,6 +906,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var cards=get.bottomCards(5); event.cards2=cards; game.cardsGotoOrdering(cards); + var player=trigger.player; var next=player.chooseToMove('铸币:用任意“币”交换牌堆底等量张牌'); var hs=player.getCards('h',card=>card.hasGaintag('olzhubi_tag')); next.set('filterMove',function(from,to){ @@ -788,6 +930,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.forceDie=true; var cards=result.moved[0]; event.cards=cards; + var player=trigger.player; var hs=player.getCards('h'); var lose=[],gain=event.cards2; for(var i of cards){ @@ -20041,7 +20184,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunluyu:['sunluyu','re_sunluyu'], jin_simazhao:['jin_simazhao','simazhao','sp_simazhao'], jin_wangyuanji:['jin_wangyuanji','wangyuanji','sp_wangyuanji'], - wangyun:['re_wangyun','wangyun','old_wangyun'], + wangyun:['re_wangyun','wangyun','dc_wangyun','old_wangyun'], zhangliang:['re_zhangliang','zhangliang'], lingju:['lingju','old_lingju'], guansuo:['guansuo','ol_guansuo'], @@ -20049,11 +20192,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lisu:['ol_lisu','lisu'], fuwan:['fuwan','sp_fuwan','tw_fuwan'], huaxin:['ol_huaxin','huaxin','sp_huaxin'], - xujing:['xujing','sp_xujing'], + xujing:['xujing','tw_sp_xujing','sp_xujing'], zhaoxiang:['zhaoxiang','tw_zhaoxiang'], - dengzhi:['ol_dengzhi','re_dengzhi','dengzhi'], + dengzhi:['ol_dengzhi','re_dengzhi','tw_dengzhi','dengzhi'], wangrong:['wangrong','ol_wangrong'], - zongyu:['sp_zongyu','zongyu'], + zongyu:['tw_sp_zongyu','sp_zongyu','zongyu'], ol_dongzhao:['ol_dongzhao','tw_dongzhao'], mayunlu:['tw_mayunlu','mayunlu'], zhuling:['ol_zhuling','dc_zhuling','zhuling'], @@ -20061,18 +20204,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhangbao:['zhangbao','re_zhangbao'], jianggan:['jianggan','sp_jianggan'], dc_jiben:['dc_jiben','sp_jiben'], - yangyi:['ol_yangyi','yangyi'], + yangyi:['ol_yangyi','tw_yangyi','yangyi'], tianyu:['tw_tianyu','tianyu'], huangchengyan:['huangchengyan','dc_huangchengyan'], puyuan:['puyuan','ol_puyuan'], huangzu:['dc_huangzu','huangzu'], huojun:['huojun','tw_huojun'], zhaoyǎn:['dc_zhaoyǎn','zhaoyǎn'], - furong:['ol_furong','furong'], + furong:['ol_furong','tw_furong','furong'], + daxiaoqiao:['tw_daxiaoqiao','daxiaoqiao'], + zhugeguo:['tw_zhugeguo','zhugeguo'], }, translate:{ "xinfu_lingren":"凌人", - "xinfu_lingren_info":"每回合限一次。当你于出牌阶段使用带有「伤害」这一标签的基本牌或普通锦囊牌指定目标后,你可以猜测其中的一个目标的手牌中是否有基本牌,锦囊牌或装备牌。若你猜中的项目数:≥1,此牌对该角色的伤害+1;≥2,你摸两张牌;≥3,你获得技能〖奸雄〗和〖行殇〗直到下回合开始。", + "xinfu_lingren_info":"每回合限一次。当你于出牌阶段内使用带有「伤害」标签的基本牌或普通锦囊牌指定目标后,你可以猜测其中的一个目标的手牌中是否有基本牌,锦囊牌或装备牌。若你猜中的项目数:≥1,此牌对该角色的伤害+1;≥2,你摸两张牌;≥3,你获得技能〖奸雄〗和〖行殇〗直到下回合开始。", "lingren_adddamage":"凌人", "lingren_adddamage_info":"", "lingren_jianxiong":"奸雄", @@ -20274,8 +20419,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "new_meibu_info":"其他角色的出牌阶段开始时,若你在其攻击范围内,你可以弃置一张牌,令该角色于本回合内获得技能〖止息〗。若你以此法弃置的牌不是【杀】或黑色锦囊牌,则本回合其与你的距离视为1。", "new_mumu":"穆穆", "new_mumu_info":"出牌阶段开始时,你可以选择一项:1.弃置一名其他角色装备区里的一张牌;2.获得一名角色装备区里的一张防具牌,若如此做,你本回合不能使用【杀】。", - "new_zhixi":"止息", - "new_zhixi_info":"锁定技,出牌阶段,你至多可使用X张牌,你使用了锦囊牌后不能再使用牌(X为你的体力值)。", + new_zhixi:"止息", + new_zhixi_info:"锁定技。出牌阶段内,若你使用过锦囊牌或使用过的牌数不小于X,则你不能使用牌(X为你的体力值)。", "new_mumu2":"穆穆", "new_mumu2_info":"锁定技,你不能使用【杀】。", new_xingwu:"星舞", @@ -20567,7 +20712,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ bushi_info:'当你受到1点伤害后,或其他角色受到你造成的1点伤害后,受到伤害的角色可以获得你的一张「米」', midao_info:'一名角色的判定牌生效前,你可以打出一张「米」代替之。', fengpo:'凤魄', - fengpo_info:'每种牌名限一次,当你于出牌阶段内第一次使用【杀】或【决斗】指定目标后,若目标角色数为1,你可以选择一项:1.摸X张牌;2.令此牌的伤害值基数+X。(X为其手牌中♦牌的数量)', + fengpo_info:'每种牌名各限一次。当你于出牌阶段内使用的第一张【杀】或【决斗】指定目标后,若目标角色数为1,你可以选择一项:1.摸X张牌;2.令此牌的伤害值基数+X。(X为其手牌中♦牌的数量)', chenqing:'陈情', chenqing_info:'每轮限一次,当一名角色处于濒死状态时,你可以令另一名其他角色摸四张牌,然后其弃置四张牌。若其以此法弃置的四张牌花色各不相同,则视为该角色对濒死的角色使用一张【桃】。', mozhi:'默识', @@ -20858,7 +21003,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ weiyi_info:'每名角色限一次。当有角色受到伤害后,你可选择:①若其体力值不小于你,则其失去1点体力。②若其体力值不大于你且其已受伤,则其回复1点体力。', jinzhi:'锦织', jinzhi2:'锦织', - jinzhi_info:'当你需要使用或打出一张基本牌时,你可弃置X张牌并摸一张牌。若你以此法弃置的牌均为同一颜色,则视为你使用或打出了此牌。(X为你于本轮内发动此技能的次数)', + jinzhi_info:'当你需要使用或打出一张基本牌时,你可弃置X+1张牌并摸一张牌。若你以此法弃置的牌均为同一颜色,则视为你使用或打出了此牌。(X为你于本轮内发动此技能的次数)', yanxiao_card:'言笑', yanxiao_global:'言笑', yanxiao_card_info:'判定阶段开始时,你获得判定区内的所有牌。', @@ -20980,7 +21125,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liejie_info:'当你受到伤害后,你可以弃置至多三张牌,摸等量的牌,然后可弃置伤害来源的至多X张牌(X为你以此法弃置的红色牌的数量)。', ruiji:'芮姬', qiaoli:'巧力', - qiaoli_info:'①你可以将一张装备牌当做【决斗】使用。若此【决斗】对应的实体牌:为武器牌,当你以此法声明使用【决斗】时,你摸X张牌(X为此牌的攻击范围),且可以将其中任意张牌分配给其他角色;不为武器牌,此牌不可被响应。②结束阶段开始时,若你于本回合内发动过〖巧力①〗,则你从牌堆中获得一张装备牌。', + qiaoli_info:'①你可以将一张装备牌当做【决斗】使用。若此【决斗】对应的实体牌:为武器牌,当你以此法声明使用【决斗】后,你摸X张牌(X为此牌的攻击范围),且可以将其中任意张牌分配给其他角色;不为武器牌,此牌不可被响应。②结束阶段开始时,若你于本回合内发动过〖巧力①〗,则你从牌堆中获得一张装备牌。', qiaoli_given:'已分配', qingliang:'清靓', qingliang_info:'每回合限一次。当你成为其他角色使用牌的目标时,你可展示所有手牌,然后选择一项:⒈你与其各摸一张牌,⒉取消此目标,然后弃置你手牌中一种花色的所有牌。', @@ -21091,6 +21236,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olximo_info:'锁定技。当你发动〖笔心〗后,你移除其描述的前五个字符。若你已发动三次〖笔心〗,交换中括号中的两个数字,失去〖洗墨〗并获得〖飞白〗。', olfeibai:'飞白', olfeibai_info:'转换技,锁定技。阴:当你因执行你使用的非黑色牌的效果而造成伤害时,此伤害值+1;阳:当你因执行你使用的非红色牌的效果而回复体力时,此回复值+1。', + olqizhou:'绮冑', + olqizhou_info:'锁定技。每个回合开始前,或当你装备区内的牌发生变化后,你失去所有因此技能获得过的额外技能,然后根据你装备区内的花色数获得对应的技能。至少一种:〖短兵〗、至少两种:〖英姿〗、至少三种:〖奋威〗、至少四种:〖澜江〗。', + olshanxi:'闪袭', + olshanxi_info:'出牌阶段限一次。你可以选择一名攻击范围内不包含你的其他角色,展示你与其的至多X张手牌(X为你的空装备栏数)。若这些牌中有【闪】,则你弃置这些【闪】,然后获得对方的一张未展示的牌。', sp_tianji:'天极·皇室宗亲', sp_sibi:'四弼·辅国文曲', diff --git a/character/sp2.js b/character/sp2.js index 1538defe4..4022ca41d 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + xuelingyun:['female','wei',3,['dcxialei','dcanzhi']], + liupi:['male','qun',4,['dcjuying']], + dc_wangyun:['male','qun',4,['dclianji','dcmoucheng']], + dc_sp_jiaxu:['male','wei',3,['zhenlue','dcjianshu','dcyongdi']], + dc_zhouxuān:['male','wei',3,['dcwumei','dczhanmeng']], leibo:['male','qun',4,['dcsilve','dcshuaijie']], chengbing:['male','wu',3,['dcjingzao','dcenyu']], dongguiren:['female','qun',3,['dclianzhi','dclingfang','dcfengying']], @@ -194,44 +199,753 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_baigei:['re_panfeng','xingdaorong','caoxing','re_chunyuqiong','xiahoujie','dc_caiyang'], sp_caizijiaren:['re_dongbai','re_sunluyu','heyan','zhaoyan','wangtao','wangyue','zhangxuan','tengyin','zhangyao','xiahoulingnv','dc_sunru'], sp_zhilan:['liuyong','wanniangongzhu','zhanghu','lvlingqi','tenggongzhu','panghui'], - sp_guixin:['re_kanze','re_chendeng','caimaozhangyun','dc_lvkuanglvxiang','dc_gaolan','yinfuren','chengui','chenjiao'], + sp_guixin:['re_kanze','re_chendeng','caimaozhangyun','dc_lvkuanglvxiang','dc_gaolan','yinfuren','chengui','chenjiao','dc_sp_jiaxu'], sp_daihan:['mamidi','dc_jiling','zhangxun','dc_yuejiu','wanglie','leibo'], sp_jianghu:['guanning','huzhao','dc_huangchengyan'], sp_zongheng:['huaxin','luyusheng','re_xunchen','re_miheng','fengxi','re_dengzhi','dc_yanghu','zongyu'], + sp_taiping:['guanhai','liupi'], + sp_yanhan:['dc_liuba','dc_huangquan'], sp_huangjin:['liuhong','zhujun','re_hansui',"xushao"], sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], sp_xuzhou:['re_taoqian','caosong','zhangmiao','qiuliju'], sp_zhongyuan:['re_hucheer','re_zoushi','caoanmin','re_dongcheng'], sp_xiaohu:['haomeng','yanfuren','yanrou','dc_zhuling'], sp2_huben:['wangshuang','wenyang','re_liuzan','dc_huangzu','wulan','leitong'], - sp2_shengun:["puyuan","guanlu","gexuan",'wufan','re_zhangbao','dukui','zhaozhi','zhujianping'], + sp2_shengun:["puyuan","guanlu","gexuan",'wufan','re_zhangbao','dukui','zhaozhi','zhujianping','dc_zhouxuān'], sp2_bizhe:['dc_luotong','dc_wangchang','chengbing'], - sp2_huangjia:['caomao','liubian','dc_liuyu','quanhuijie','dingshangwan'], + sp2_huangjia:['caomao','liubian','dc_liuyu','quanhuijie','dingshangwan','yuanji'], sp2_zhangtai:['guozhao','fanyufeng','ruanyu','yangwan','re_panshu'], sp2_jinse:['caojinyu','re_sunyi','re_fengfangnv','caohua','laiyinger','zhangfen'], - sp_decade:['huaman','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','zhouyi','dc_jiben','zhaoang','dc_liuba','liuhui','guanhai','dc_huangquan','luyi','dc_liuye','gongsundu','dongguiren','yuanji'], + sp2_yinyu:['zhouyi','luyi'], + sp2_doukou:['re_xinxianying','huaman','xuelingyun'], + sp2_jichu:['zhaoang','dc_liuye','dc_wangyun'], + sp_decade:['caobuxing','re_maliang','xin_baosanniang','dongxie','dc_jiben','liuhui','gongsundu','dongguiren'], } }, skill:{ - //周宣 - dcwumei:{ - trigger:{player:'phaseBegin'}, - filter:function(){ - return !player.hasSkill('dcwumei_used'); + //薛灵芸 + dcxialei:{ + audio:2, + trigger:{ + player:'loseAfter', + global:['cardsDiscardAfter','loseAsyncAfter','equipAfter'], + }, + filter:function(event,player){ + if(player.countMark('dcxialei_clear')>=3) return false; + if(event.name!='cardsDiscard'){ + return event.getd(player,'cards2').some(i=>get.color(i,player)=='red'); + } + else{ + if(!event.cards.filterInD('d').some(i=>get.color(i,player)=='red')) return false; + var evt=event.getParent(); + if(evt.name!='orderingDiscard') return false; + var evtx=(evt.relatedEvent||evt.getParent()); + if(evtx.player!=player) return false; + return player.hasHistory('lose',evtxx=>{ + return evtx==(evtxx.relatedEvent||evtxx.getParent()); + }); + } }, content:function(){ 'step 0' - player.chooseTarget(get.prompt2('dcwumei')); + var cards=get.cards(3-player.countMark('dcxialei_clear')); + event.cards=cards; + game.cardsGotoOrdering(cards); + if(cards.length==1) event._result={bool:true,links:cards}; + else player.chooseButton(['霞泪:获得其中的一张牌',cards],true); + 'step 1' + if(result.bool){ + var card=result.links[0]; + player.gain(card,'gain2'); + event.cards.remove(card); + if(event.cards.length){ + player.chooseBool().set('createDialog',['是否将剩余牌置于牌堆底?',event.cards]).set('ai',()=>_status.event.bool).set('bool',function(){ + if(!player.hasSkill('dcanzhi')) return Math.random()<0.5; + if(player.hasSkill('dcanzhi_blocker')){ + var next=_status.currentPhase.getNext(); + var judges=next.getCards('j'); + var val=0; + if(judges.length&&!next.hasWuxie()){ + var att=get.attitude(player,next); + for(var i=0;;i++){ + var judge=get.judge(judges[i]),card=event.cards[i]; + if(!judge||!card) break; + val+=judge(card)*att; + i++; + } + } + if(val>0) return false; + else if(val==0) return Math.random()<0.5; + return true; + } + var card=event.cards[0]; + if(get.color(card,player)=='red'&&player.isPhaseUsing()&&player.countCards('hs',card=>{ + return get.color(card)=='red'&&player.hasValueTarget(card)&&['basic','trick'].contains(get.type(card)); + })>0) return false; + if(get.color(card,player)=='black') return false; + return true; + }()); + } + else event.goto(3); + } else event.finish(); + 'step 2' + if(result.bool){ + player.popup('牌堆底'); + game.log(player,'将'+get.cnNumber(event.cards.length)+'张牌置于了牌堆底'); + } + else player.popup('牌堆顶'); + while(cards.length){ + var card=cards.pop(); + card.fix(); + if(result.bool) ui.cardPile.appendChild(card); + else ui.cardPile.insertBefore(card,ui.cardPile.firstChild); + } + game.updateRoundNumber(); + 'step 3' + player.addMark('dcxialei_clear',1,false); + player.addTempSkill('dcxialei_clear'); + }, + subSkill:{clear:{onremove:true}} + }, + dcanzhi:{ + enable:'phaseUse', + filter:function(event,player){ + return !player.hasSkill('dcanzhi_blocker'); + }, + group:'dcanzhi_damage', + content:function(){ + 'step 0' + player.judge(result=>{ + if(get.color(result)=='red') return _status.event.getParent().player.countMark('dcxialei_clear')/2; + return 2; + }).judge2=result=>result.bool; + 'step 1' + if(result.color=='red'){ + player.removeSkill('dcxialei_clear'); + event.finish(); + } + else if(result.color=='black'){ + player.addTempSkill('dcanzhi_blocker'); + player.chooseTarget('暗织:是否令一名非当前回合角色获得本回合进入弃牌堆的两张牌?',(card,player,target)=>{ + return target!=_status.currentPhase; + }).set('ai',target=>{ + return get.effect(target,{name:'wuzhong'},_status.event.player); + }); + } + else event.finish(); + 'step 2' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.line(target); + var cards=[]; + game.getGlobalHistory('cardMove',evt=>{ + if(evt.name=='lose'&&evt.position==ui.discardPile||evt.name=='cardsDiscard'){ + cards.addArray(evt.cards.filterInD('d')); + } + }); + if(cards.length){ + player.chooseButton(['暗织:选择令'+get.translation(target)+'获得的牌',cards],true,Math.min(cards.length,2)).set('ai',button=>{ + var player=_status.event.player,target=_status.event.getParent().target; + return get.sgnAttitude(player,target)*get.buttonValue(button); + }); + } + }else event.finish(); + 'step 3' + if(result.bool){ + target.gain(result.links,'gain2'); + } + }, + ai:{ + combo:'dcxialei', + order:function(item,player){ + if(player.countMark('dcxialei_clear')>=2) return 10; + if(player.hasHistory('useSkill',evt=>evt.skill=='dcxialei')&&get.color(ui.cardPile.firstChild,player)=='red'&&player.countMark('dcxialei_clear')>0) return 9; + return 1; + }, + result:{ + player:function(player){ + return 1; + } + } + }, + subSkill:{ + damage:{ + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return !player.hasSkill('dcanzhi_blocker'); + }, + check:function(event,player){ + return game.hasPlayer(current=>{ + return get.attitude(player,current)>0&¤t!=_status.currentPhase; + }); + }, + prompt2:'你判定,若结果为红色,你重置〖霞泪〗的观看牌数;若结果为黑色,〖暗织〗于本回合失效,然后你可以令一名非当前回合角色获得本回合进入弃牌堆的两张牌。', + content:function(){ + event.setContent(lib.skill.dcanzhi.content); + event.goto(0); + } + }, + blocker:{charlotte:true} + } + }, + //刘辟 + dcjuying:{ + audio:2, + trigger:{player:'phaseUseEnd'}, + filter:function(event,player){ + return player.getCardUsable('sha')>0; + }, + direct:true, + content:function(){ + 'step 0' + player.chooseButton([ + get.prompt('dcjuying',source), + [[ + ['sha','你于下回合使用【杀】的次数上限+1'], + ['hand','本回合手牌上限+2'], + ['draw','摸三张牌'], + ],'textbutton'] + ]).set('ai',function(button){ + var player=_status.event.player,choice=button.link; + if(choice=='draw') return 10; + if(choice=='sha') return 9; + var del=3-player.hp; + if(choice=='hand'&&player.needsToDiscard()>0&&del<=0) return 8; + return 0; + }).set('selectButton',[1,3]); + 'step 1' + if(result.bool){ + player.logSkill('dcjuying'); + var choices=result.links; + event.choices=choices; + if(choices.contains('sha')){ + player.addMark('dcjuying_sha',1,false); + player.addSkill('dcjuying_sha'); + } + if(choices.contains('hand')){ + player.addMark('dcjuying_hand',1,false); + player.addTempSkill('dcjuying_hand'); + } + if(choices.contains('draw')){ + player.draw(3); + } + } + else event.finish(); + 'step 2' + var num=event.choices.length-Math.max(0,player.hp); + if(num>0){ + player.chooseToDiscard(num,true,'he'); + } + }, + ai:{ + effect:{ + player_use:function(card,player,target){ + if(typeof card=='object'&&player.isPhaseUsing()&&card.name=='sha'&&player.getCardUsable('sha')==1) return 'zeroplayertarget'; + }, + target_use:function(card,player,target){ + if(card.name=='jiu'&&player.getCardUsable('sha')==2) return [1,1]; + } + }, + }, + subSkill:{ + sha:{ + trigger:{player:'phaseBegin'}, + filter:function(event,player){ + return player.countMark('dcjuying_sha')>0; + }, + silent:true, + firstDo:true, + charlotte:true, + onremove:true, + content:function(){ + player.addMark('dcjuying_effect',player.countMark('dcjuying_sha'),false); + player.addTempSkill('dcjuying_effect'); + player.removeSkill('dcjuying_sha'); + }, + intro:{content:'下回合使用【杀】的次数上限+#'} + }, + effect:{ + onremove:true, + charlotte:true, + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.countMark('dcjuying_effect'); + }, + }, + intro:{content:'本回合使用【杀】的次数上限+#'} + }, + hand:{ + onremove:true, + charlotte:true, + mod:{ + maxHandcard:function(player,num){ + return num+2*player.countMark('dcjuying_hand'); + } + } + } + }, + }, + //十周年王允 + dclianji:{ + enable:'phaseUse', + audio:'wylianji', + usable:1, + check:function(card){ + return 5-get.value(card); + }, + filterTarget:function(card,player,target){ + return target!=player; + }, + filterCard:true, + content:function(){ + 'step 0' + var card=get.cardPile2(function(card){ + return get.subtype(card)=='equip1'&&targets[0].hasUseTarget(card); + }); + if(card){ + if(card.name=='qinggang'&&!lib.inpile.contains('qibaodao')){ + card.remove(); + card=game.createCard('qibaodao',card.suit,card.number); + } + targets[0].chooseUseTarget(card,true,'nopopup','nothrow'); + } + else{ + player.chat('没有装备牌了吗'); + game.log('但是牌堆里已经没有装备牌了!'); + } + 'step 1' + game.updateRoundNumber(); + targets[0].chooseToUse(get.translation(player)+'对你发动了【连计】', + {name:'sha'}).set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ + if(target==_status.event.source) return false; + return lib.filter.filterTarget.apply(this,arguments); + }).set('addCount',false).set('source',player).set('prompt2','对除'+get.translation(player)+'外的一名角色使用一张【杀】,并将装备区内的武器牌交给其中一名目标角色;或点击“取消”,令'+get.translation(player)+'视为对你使用一张【杀】,并获得你装备区内的武器牌'); + 'step 2' + var card=targets[0].getEquip(1); + if(result.bool){ + player.addSkill('dclianji_1'); + if(card){ + event.card=card; + targets[0].chooseTarget(true,'将'+get.translation(card)+'交给一名目标角色',(card,player,target)=>{ + return _status.event.targets.contains(target); + }).set('ai',function(target){ + var card=_status.event.getParent().card; + return (target.hasSkillTag('nogain')?0:get.attitude(_status.event.player,target))*Math.max(0.1,target.getUseValue(card)); + }).set('targets',result.targets); + } else event.finish(); + } + else{ + player.addSkill('dclianji_2'); + event.goto(4); + } + 'step 3' + targets[0].give(card,result.targets[0],'give'); + event.finish(); + 'step 4' + player.useCard({name:'sha',isCard:true},targets[0],false); + 'step 5' + var card=targets[0].getEquip(1); + if(card) targets[0].give(card,player,'give'); + }, + ai:{ + order:4, + result:{ + target:function(player,target){ + if(game.countPlayer()==2) return -3; + if(!target.getEquip(1)){ + if(game.hasPlayer(function(current){ + return current!=target&&!current.hasSkillTag('nogain')&&get.attitude(current,target)>0; + })) return 3; + return -3; + } + if(!game.hasPlayer(function(current){ + return current!=target&&!current.hasSkillTag('nogain')&&get.attitude(current,target)>0; + })) return -6; + return 4-get.value(target.getEquip(1)); + }, + }, + }, + subSkill:{ + 1:{charlotte:true,onremove:true}, + 2:{charlotte:true,onremove:true}, + } + }, + dcmoucheng:{ + trigger:{player:'phaseZhunbeiBegin'}, + audio:'moucheng', + forced:true, + juexingji:true, + skillAnimation:true, + animationColor:'gray', + derivation:'xinjingong', + unique:true, + filter:function(event,player){ + return player.hasSkill('dclianji_1')&&player.hasSkill('dclianji_2'); + }, + content:function(){ + player.awakenSkill('dcmoucheng'); + player.removeSkill('dclianji'); + game.log(player,'失去了技能','#g【连计】'); + player.addSkillLog('xinjingong'); + }, + }, + //新服加强魏贾诩 + dcjianshu:{ + audio:'jianshu', + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('h',{color:'black'})>0; + }, + filterTarget:function(card,player,target){ + if(target==player) return false; + if(ui.selected.targets.length){ + return ui.selected.targets[0].canCompare(target); + } + return !target.hasSkillTag('noCompareSource'); + }, + targetprompt:['发起者','拼点目标'], + filterCard:{color:'black'}, + discard:false, + lose:false, + delay:false, + check:function(card){ + if(_status.event.player.hp==1) return 8-get.value(card); + return 6-get.value(card); + }, + selectTarget:2, + multitarget:true, + content:function(){ + 'step 0' + player.give(cards,targets[0],'give'); + 'step 1' + targets[0].chooseToCompare(targets[1]); + 'step 2' + player.addTempSkill('dcjianshu_check','phaseUseAfter'); + if(result.bool){ + var cards=targets[0].getCards('he',function(card){ + return lib.filter.cardDiscardable(card,targets[0],'dcjianshu'); + }); + if(cards.length>0) targets[0].discard(cards.randomGet()); + targets[1].loseHp(); + } + else if(result.tie){ + targets[0].loseHp(); + targets[1].loseHp(); + } + else{ + var cards=targets[1].getCards('he',function(card){ + return lib.filter.cardDiscardable(card,targets[1],'dcjianshu'); + }); + if(cards.length>0) targets[1].discard(cards.randomGet()); + targets[0].loseHp(); + } + }, + subSkill:{ + check:{ + trigger:{global:'dieAfter'}, + charlotte:true, + forced:true, + popup:false, + filter:function(event,player){ + return event.getParent(3).name=='dcjianshu'; + }, + content:function(){ + delete player.getStat('skill').dcjianshu; + } + } + }, + ai:{ + expose:0.4, + order:4, + result:{ + target:function(player,target){ + if(ui.selected.targets.length) return -1; + return -0.5; + } + } + } + }, + dcyongdi:{ + audio:'yongdi', + audioname:['xinping'], + unique:true, + limited:true, + enable:'phaseUse', + filterTarget:function(card,player,target){ + return target.hasSex('male'); + }, + animationColor:'thunder', + skillAnimation:'legend', + mark:true, + intro:{ + content:'limited' + }, + direct:true, + content:function(){ + 'step 0' + player.awakenSkill('dcyongdi'); + player.logSkill('dcyongdi',target); + if(!game.hasPlayer(current=>current.maxHpcurrent.maxHp{ + return get.attitude(_status.event.player,target); + }); 'step 1' if(result.bool){ var target=result.targets[0]; player.logSkill('dcwumei',target); player.addTempSkill('dcwumei_used','roundStart'); - //tbc + target.insertPhase(); + target.addTempSkill('dcwumei_wake'); + var targets=game.filterPlayer(); + if(!player.storage.dcwumei_wake) player.storage.dcwumei_wake=[[],[]]; + for(var targetx of targets){ + target.storage.dcwumei_wake[0].push(targetx); + target.storage.dcwumei_wake[1].push(targetx.hp); + } + target.markSkill('dcwumei_wake'); + if(!trigger._finished){ + trigger.finish(); + trigger._triggered=5; + var evt=player.insertPhase(); + delete evt.skill; + } } }, subSkill:{ - used:{onremove:true,charlotte:true}, + used:{charlotte:true}, + wake:{ + trigger:{player:'phaseJieshuBegin'}, + charlotte:true, + popup:false, + forced:true, + onremove:true, + filter:function(event,player){ + return player.storage.dcwumei_wake&&player.storage.dcwumei_wake.length; + }, + content:function(){ + var storage=player.storage.dcwumei_wake; + for(var i=0;i'; + str+='
  • '+str2; + } + return str; + } + }, + ai:{ + effect:{ + player_use:function(card,player,target){ + if(get.tag(card,'damage')) return 0.5; + }, + target:function(card,player,target){ + if(_status.event.type!='phase') return; + if (get.tag(card,'recover')){ + return [1,1-target.hp]; + } + } + } + } + } + } + }, + dczhanmeng:{ + audio:2, + trigger:{player:'useCard'}, + filter:function(event,player){ + return !player.hasSkill('dczhanmeng_choice1')||!player.hasSkill('dczhanmeng_choice2')|| + !player.hasSkill('dczhanmeng_choice0')&&!game.hasPlayer2(current=>{ + var history=current.actionHistory; + if(history.length<2) return false; + var list=history[history.length-2].useCard.map(evt=>evt.card.name); + if(list.contains(event.card.name)) return true; + return false; + }); + }, + direct:true, + content:function(){ + 'step 0' + var list=[]; + var choiceList=[ + '上回合若没有同名牌被使用过,你获得一张非伤害牌', + '下回合当同名牌首次被使用后,你获得一张伤害牌', + '令一名其他角色弃置两张牌,若点数之和大于10,你对其造成1点火焰伤害' + ]; + var used=game.hasPlayer2(current=>{ + var history=current.actionHistory; + if(history.length<2) return false; + var list=history[history.length-2].useCard.map(evt=>evt.card.name); + if(list.contains(trigger.card.name)) return true; + return false; + }); + if(!player.hasSkill('dczhanmeng_choice0')&&!used) list.push('选项一'); + else choiceList[0]=''+choiceList[0]+(used?'(同名牌被使用过)':'(已选择)')+''; + if(!player.hasSkill('dczhanmeng_choice1')) list.push('选项二'); + else choiceList[1]=''+choiceList[1]+'(已选择)'; + if(!player.hasSkill('dczhanmeng_choice2')) list.push('选项三'); + else choiceList[2]=''+choiceList[2]+'(已选择)'; + list.push('cancel2'); + player.chooseControl(list).set('prompt',get.prompt('dczhanmeng')).set('ai',()=>{ + var choices=_status.event.controls.slice().remove('cancel2'); + var player=_status.event.player,evt=_status.event.getTrigger(); + if(!game.hasPlayer(current=>get.attitude(player,current)<0)) choices.remove('选项三'); + else if(choices.contains('选项三')) return '选项三'; + if(choices.contains('选项二')){ + if(evt.card.name=='sha') return '选项二'; + if(get.type(evt.card,null,false)=='equip') choices.remove('选项二'); + } + if(!choices.length) return 'cancel2'; + return choices.randomGet(); + }).set('choiceList',choiceList); + 'step 1' + if(result.control=='cancel2'){event.finish();return;} + if(result.control=='选项一'){ + player.logSkill('dczhanmeng'); + game.log(player,'选择了','#y'+result.control); + player.addTempSkill('dczhanmeng_choice0'); + var card=get.cardPile2(card=>{ + return !get.tag(card,'damage'); + }); + if(card) player.gain(card,'gain2'); + event.finish(); + } + else if(result.control=='选项二'){ + player.logSkill('dczhanmeng'); + game.log(player,'选择了','#y'+result.control); + player.addTempSkill('dczhanmeng_choice1'); + trigger['dczhanmeng_'+player.playerid]=true; + player.addSkill('dczhanmeng_delay'); + event.finish(); + } + else{ + player.addTempSkill('dczhanmeng_choice2'); + player.chooseTarget('占梦:令一名其他角色弃置两张牌',lib.filter.notMe,true).set('ai',target=>{ + var player=_status.event.player; + var eff1=get.effect(target,{name:'guohe_copy2'},player,player)+0.1; + var eff2=get.damageEffect(target,player,player,'fire')+0.1; + if(eff1<0&&eff2<0) return -eff1*eff2; + return eff1*eff2; + }); + } + 'step 2' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('dczhanmeng',target); + game.log(player,'选择了','#y选项三'); + target.chooseToDiscard(2,'he',true); + } else event.finish(); + 'step 3' + if(result.bool){ + var cards=result.cards; + var num=0; + for(var card of cards){ + num+=get.number(card,false); + } + if(num>10){ + player.line(target,'fire'); + target.damage('fire'); + } + } + }, + ai:{threaten:8}, + subSkill:{ + delay:{ + trigger:{global:['useCardAfter','phaseBeginStart']}, + charlotte:true, + forced:true, + popup:false, + filter:function(event,player,name){ + var history=player.actionHistory; + if(history.length<2) return false; + var list=history[history.length-2].useCard; + if(name=='phaseBeginStart'){ + return !list.some(evt=>evt['dczhanmeng_'+player.playerid]); + } + for(var evt of list){ + if(evt['dczhanmeng_'+player.playerid]&&event.card.name==evt.card.name) return true; + } + return false; + }, + content:function(){ + if(event.triggername!='phaseBeginStart'){ + player.logSkill('dczhanmeng_delay'); + var card=get.cardPile2(card=>{ + return get.tag(card,'damage'); + }); + if(card) player.gain(card,'gain2'); + } + player.removeSkill('dczhanmeng_delay'); + } + }, + choice0:{charlotte:true}, + choice1:{charlotte:true}, + choice2:{charlotte:true}, } }, //雷普 @@ -1248,7 +1962,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ marktext:'刚', intro:{ name:'刚硬', - content:'属性目标:回复体力,或手牌数大于体力值', + content:'属性目标:回复体力,或于获得牌后手牌数大于体力值', }, charlotte:true, silent:true, @@ -1296,8 +2010,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ locked:false, filter:function(event,player){ var target=event.player; - if((target.hasSkill('dctongguan_gangying')&&(target.countCards('h')>target.hp||game.getGlobalHistory('changeHp',function(evt){ - return evt.player==target&&evt.getParent().name=='recover'; + if((target.hasSkill('dctongguan_gangying')&&(target.getHistory('gain',function(evt){ + return target.countCards('h')>target.hp; + })||game.getGlobalHistory('changeHp',function(evt){ + return evt.player==target&&(evt.getParent().name=='recover'||target.countCards('h')>target.hp); }).length>0)) || target.hasSkill('dctongguan_wuyong')&&target.getHistory('sourceDamage').length || target.hasSkill('dctongguan_duomou')&&target.getHistory('gain',evt=>evt.getParent().name=='draw'&&evt.getParent('phaseDraw').name!='phaseDraw').length){ @@ -1320,7 +2036,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, rules:[ (target)=>target.getHistory('sourceDamage').length, - (target)=>game.getGlobalHistory('changeHp',function(evt){ + (target)=>target.getHistory('gain',function(evt){ + return target.countCards('h')>target.hp; + })||game.getGlobalHistory('changeHp',function(evt){ return evt.player==target&&evt.getParent().name=='recover'; }).length>0||target.countCards('h')>target.hp, (target)=>target.getHistory('gain',evt=>evt.getParent().name=='draw'&&evt.getParent('phaseDraw').name!='phaseDraw').length, @@ -1500,7 +2218,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, usable:2, filter:function(event,player){ - return player.countDiscardableCards(player,'he')>0; + return player.countDiscardableCards(player,'he')>0&&player!=event.player; }, check:function(event,player){ return get.attitude(player,event.player)<0&&player.countCards('he',card=>lib.filter.cardDiscardable(card,player,'dcyiyong')&&get.value(card,player)<7)>0; @@ -6714,7 +7432,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return event.skill=='dcjinggong'&&event.targets.length>0; }, content:function(){ - trigger.baseDamage=get.distance(player,trigger.targets[0]); + trigger.baseDamage=Math.min(3,get.distance(player,trigger.targets[0])); }, }, }, @@ -22035,6 +22753,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chengbing:'程秉(生卒年不详),字德枢,汝南南顿(今河南项城西)人。三国时期吴国官员、儒学家。起初跟随郑玄,后来北方荒乱而到交州避难,期间与刘熙考究五经大义,因此通绕五经。后来交趾太守士燮任命程秉为长史。吴大帝孙权听闻程秉的名声,于是以礼征召他,程秉到后,被任命为太子太傅。黄武四年(225年),孙权为太子孙登娶周瑜之女为妃,程秉以太常身份于吴郡迎候,孙权亲身上程秉的船,可见孙权对他的极为礼待。程秉又教诲孙登对婚后相处要尊重儒家礼教。后来因病在任职期间逝世。著有《周易摘》、《尚书驳》、《论语弼》,凡三万余言。', gongsundu:'公孙度 (?-204年),字升济,辽东襄平(今辽宁辽阳)人,东汉末年辽东太守。少随父迁居玄菟郡。初为玄菟小吏,建宁二年(169年),继升尚书郎、冀州刺史,后被免官。初平元年(190年),经同乡徐荣推荐,被董卓任命为辽东太守。公孙度到任后,厉行严刑峻法,打击豪强势力,使令行政通,羽翼渐丰。不久,中原地区董卓乱起,各地军阀无暇东顾。公孙度趁机自立为辽东侯、平州牧。继则东伐高句丽,西击乌桓,南取辽东半岛,越海取胶东半岛北部东莱诸县,开疆扩土;又招贤纳士,设馆开学,广招流民,威行海外,俨然以辽东王自居。建安九年(204年)病逝,子公孙康继承其位由于公孙度的锐意进取和苦心经营,使辽东地区在汉末三国的战乱年代,获得了暂时的安宁,推动了当地生产技术和封建文化的发展。', leibo:'雷薄(生卒年不详),本为东汉末年袁术麾下部将。离开称帝后昏庸奢侈的袁术,与陈兰一起占据嵩山为山贼。后来袭击兵败的袁术,抢夺财宝。同时在《三国演义》中也有出场。', + dc_zhouxuān:'周宣,生卒年不详,字孔和,乐安(治今山东高苑西北)人,擅长解梦,在郡做官时曾为太守解过梦,后又给曹丕解梦,都灵验。官至中郎,死于魏明帝末年。', + sp_jiaxu:'字文和,武威姑臧人。三国时期魏国著名谋士。曾先后担任三国军阀李傕、张绣、曹操的谋士。官至魏国太尉,谥曰肃侯。', + xuelingyun:'薛灵芸,东晋王嘉志怪小说《拾遗记》中的人物,魏文帝曹丕的宫人,妙于针工,虽处于深帷之内,不用灯烛之光,裁制立成。凡不是薛灵芸缝制的衣服,文帝一概不穿,宫中号为针神。薛灵芸的故事在正史中虽无记载,却由于许多野史笔记偶尔提及,如《拾遗记》、《太平广记》、《艳异编》等,渐于后世成为中国古代著名美女形象。,', + liupi:'刘辟[pì],东汉末年黄巾起义军将领。黄巾军将领。黄巾之乱后,与龚都一起率军盘踞在汝南。欲追随刘备,将汝南让给刘备。《三国演义》中,在与曹操的部将高览交战时,为保护刘备而战死。', }, characterTitle:{ wulan:'#b对决限定武将', @@ -22149,7 +22871,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ perfectPair:{}, characterReplace:{ lijue:['lijue','ns_lijue'], - fanchou:['fanchou','ns_fanchou'], + fanchou:['fanchou','tw_fanchou','ns_fanchou'], zhangji:['zhangji','ns_zhangji'], zhangchangpu:['zhangchangpu','sp_zhangchangpu','ol_zhangchangpu'], huangfusong:['huangfusong','sp_huangfusong','old_huangfusong'], @@ -22173,7 +22895,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chendeng:['ol_chendeng','re_chendeng','chendeng'], pangdegong:['re_pangdegong','pangdegong'], zhujun:['sp_zhujun','zhujun'], - sunyi:['re_sunyi','sunyi'], + sunyi:['re_sunyi','tw_sunyi','sunyi'], tw_liuhong:['tw_liuhong','liuhong'], miheng:['miheng','re_miheng'], re_hejin:['re_hejin','tw_hejin'], @@ -22187,6 +22909,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yuejiu:['dc_yuejiu','yuejiu'], hujinding:['dc_hujinding','hujinding'], caosong:['caosong','sp_caosong'], + re_niujin:['re_niujin','tw_niujin'], + haomeng:['haomeng','tw_haomeng'], + dc_jiling:['dc_jiling','tw_jiling'], + zhangning:['zhangning','tw_zhangning'], + sp_jiaxu:['dc_sp_jiaxu','sp_jiaxu'], }, translate:{ lijue:"李傕", @@ -22205,9 +22932,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "xinfu_langxi":"狼袭", "xinfu_langxi_info":"准备阶段,你可以对一名体力小于或等于你的其他角色造成0~2点随机伤害。", "xinfu_yisuan":"亦算", - "xinfu_yisuan_info":"每回合限一次。当你于出牌阶段使用的锦囊牌结算结束后,你可以减1点体力上限并获得此牌对应的所有实体牌。", + "xinfu_yisuan_info":"每回合限一次。当你于出牌阶段内使用的锦囊牌结算结束后,你可以减1点体力上限并获得此牌对应的所有实体牌。", "xinfu_xingluan":"兴乱", - "xinfu_xingluan_info":"每回合限一次。当你于出牌阶段使用的仅指定一个目标的牌结算完成后,你可以从牌堆中随机获得一张点数为6的牌。", + "xinfu_xingluan_info":"每回合限一次。当你于出牌阶段内使用的仅指定一个目标的牌结算完成后,你可以从牌堆中随机获得一张点数为6的牌。", "xinfu_lveming":"掠命", "xinfu_lveming_info":"出牌阶段限一次,你可以选择一名装备区装备比你少的角色,令其选择一个点数,然后你进行判定:
    若点数相同,你对其造成2点伤害;
    若点数不同,则你随机获得其区域内的一张牌。", "xinfu_tunjun":"屯军", @@ -22720,7 +23447,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rexingluan:'兴乱', rexingluan_info:'出牌阶段限一次,当你使用的仅指定一个目标的牌结算完成后,你可以获得场上一张与此牌点数相同的牌,或获得牌堆中随机一张点数与此牌相同的牌。', xinxingluan:'兴乱', - xinxingluan_info:'每回合限一次。当你于出牌阶段使用牌结算结束后,你可选择一项:①观看牌堆中的两张点数为6的牌并获得其中一张(没有则改为摸六张牌);②令一名其他角色弃置一张点数为6的牌或交给你一张牌;③获得场上的一张点数为6的牌。', + xinxingluan_info:'每回合限一次。当你于出牌阶段内使用牌结算结束后,你可选择一项:①观看牌堆中的两张点数为6的牌并获得其中一张(没有则改为摸六张牌);②令一名其他角色弃置一张点数为6的牌或交给你一张牌;③获得场上的一张点数为6的牌。', zhouyi:'周夷', zhukou:'逐寇', zhukou_info:'①当你于一名角色的出牌阶段第一次造成伤害后,你可以摸X张牌(X为本回合你已使用的牌数)。②你的结束阶段,若你本回合没有造成伤害,你可以对两名其他角色各造成1点伤害。', @@ -22817,7 +23544,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mingluan_info:'其他角色的结束阶段开始时,若有角色于本回合内回复过体力,则你可以弃置一张牌,然后摸X张牌(X为当前角色的手牌数,且至多摸至5张)。', re_pangdegong:'庞德公', heqia:'和洽', - heqia_info:'出牌阶段开始时,你可选择一项:①将任意张牌交给一名其他角色。②令一名有手牌的其他角色交给你任意张牌。然后以此法获得牌的角色可以视为使用一张基本牌,且当其声明使用此牌时,可以为此牌增加至至多X个目标(X为以此法移动的牌数)。', + heqia_info:'出牌阶段开始时,你可选择一项:①将任意张牌交给一名其他角色。②令一名有手牌的其他角色交给你任意张牌。然后以此法获得牌的角色可以视为使用一张基本牌,且当其声明使用此牌后,可以为此牌增加至至多X个目标(X为以此法移动的牌数)。', yinyi:'隐逸', yinyi_info:'锁定技。每回合限一次,当你受到非属性伤害时,若你的手牌数和体力值与伤害来源均不相同,则你防止此伤害。', re_sunyi:'孙翊', @@ -22916,7 +23643,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhushi_info:'主公技。每回合限一次,其他魏势力角色于回合内回复体力时,其可令你摸一张牌。', laiyinger:'来莺儿', xiaowu:'绡舞', - xiaowu_info:'出牌阶段限一次,你可以选择任意名座位连续且包含你的上家/下家的角色。这些角色依次选择一项:⒈令你摸一张牌;⒉其摸一张牌。然后若选择选项一的角色数大于选项二的角色数,则你获得一枚“沙”;若选择选项二的角色数大于选项一的角色数,则你对这次角色依次造成1点伤害。', + xiaowu_info:'出牌阶段限一次,你可以选择任意名座位连续且包含你的上家/下家的角色。这些角色依次选择一项:⒈令你摸一张牌;⒉其摸一张牌。然后若选择选项一的角色数大于选项二的角色数,则你获得一枚“沙”;若选择选项二的角色数大于选项一的角色数,则你对这些角色依次造成1点伤害。', huaping:'化萍', huaping_info:'限定技。①一名其他角色死亡时,你可获得其当前拥有的所有不带有「Charlotte」标签的技能,然后你失去〖绡舞〗,移去所有“沙”并摸等量的牌。②当你死亡时,你可令一名其他角色获得〖沙舞〗和你的所有“沙”。', shawu:'沙舞', @@ -22950,7 +23677,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jinglan_info:'锁定技。当你造成伤害后,若你的手牌数:大于体力值,你弃置三张手牌;等于体力值,你弃置一张手牌并回复1点体力;小于体力值,你受到1点无来源火焰伤害并摸四张牌。', dc_huangzu:'黄祖', dcjinggong:'精弓', - dcjinggong_info:'你可以将一张装备牌当做无距离限制的【杀】使用。当你声明使用此【杀】时,你将此杀的伤害值基数改为X(X为你至此【杀】第一个目标角色的距离且至多为3)。', + dcjinggong_info:'你可以将一张装备牌当做无距离限制的【杀】使用。当你声明使用此【杀】后,你将此杀的伤害值基数改为X(X为你至此【杀】第一个目标角色的距离且至多为3)。', dcxiaojuan:'骁隽', dcxiaojuan_info:'当你使用牌指定其他角色为唯一目标后,你可以弃置其一半的手牌(向下取整)。若这些牌中有与你使用牌花色相同的牌,则你弃置一半的手牌(向下取整)。', dc_yanghu:'羊祜', @@ -22960,7 +23687,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcmingfa_info:'①出牌阶段限一次。当你使用【杀】或普通锦囊牌结算结束后,若你的武将牌上没有“明伐”牌,则你可以将此牌作为“明伐”牌置于武将牌上并选择一名其他角色,记录该角色和此牌的名称。②一名角色的回合结束时,若其是你〖明伐①〗记录的角色,则你视为对其依次使用X张〖明伐①〗记录的牌,然后移去“明伐”牌(X为其手牌数且至少为1,至多为5)。③一名角色死亡时,若其是你〖明伐①〗记录的角色,则你移去“明伐”牌。', zhangxuan:'张嫙', tongli:'同礼', - tongli_info:'当你于出牌阶段不因〖同礼〗而使用基本牌或普通锦囊牌指定第一个目标后,若你手牌中的花色数和你于本阶段内不因〖同礼〗而使用过的牌数相等,则你可以于此牌结算结束后依次视为对此牌的所有目标使用X张名称和属性相同的牌(X为你手牌中的花色数)。', + tongli_info:'当你于出牌阶段内不因〖同礼〗而使用基本牌或普通锦囊牌指定第一个目标后,若你手牌中的花色数和你于本阶段内不因〖同礼〗而使用过的牌数相等,则你可以于此牌结算结束后依次视为对此牌的所有目标使用X张名称和属性相同的牌(X为你手牌中的花色数)。', shezang:'奢葬', shezang_info:'每轮限一次。当你或你回合内的其他角色进入濒死状态时,你可以从牌堆中获得每种花色的牌各一张。', qinyilu:'秦宜禄', @@ -23135,7 +23862,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcchongwang:'崇望', dcchongwang_info:'其他角色使用基本牌或普通锦囊牌时,若你是本局游戏内上一张被使用的牌的使用者,则你可以选择一项:⒈令其收回此牌对应的所有实体牌;⒉取消此牌的所有目标。', dchuagui:'化归', - dchuagui_info:'出牌阶段开始时,你可以选择至多X名有牌的其他角色(X为场上每个阵营中最大阵营的人数,且你的选择结果不展示)。这次角色同时选择一项:⒈交给你一张牌,⒉展示一张牌。若这些角色均选择选项二,则你获得所有展示牌。', + dchuagui_info:'出牌阶段开始时,你可以选择至多X名有牌的其他角色(X为场上每个阵营中最大阵营的人数,且你的选择结果不展示)。这些角色同时选择一项:⒈交给你一张牌,⒉展示一张牌。若这些角色均选择选项二,则你获得所有展示牌。', gongsundu:'公孙度', dczhenze:'震泽', dczhenze_info:'弃牌阶段开始时,你可以选择一项:1.令所有手牌数与体力值大小关系与你不同的角色失去1点体力;2.令所有手牌数和体力值关系与你相同的角色回复1点体力。', @@ -23158,7 +23885,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcqizi:'弃子', dcqizi_info:'锁定技。你不能对至其的距离大于2且正在进行濒死流程的角色使用【桃】。', dc_hujinding:'胡金定', - dcdeshi:'仁释', + dcdeshi:'德释', dcdeshi_info:'锁定技。当你受到【杀】的伤害时,若你已受伤,则你防止此伤害并令系统从弃牌堆/牌堆中检索一张【杀】,你获得此【杀】,然后减1点体力上限。', dcwuyuan:'武缘', dcwuyuan_info:'出牌阶段限一次。你可将一张【杀】交给一名其他角色,然后你回复1点体力,你与其各摸一张牌。若此【杀】为:红色【杀】,其回复1点体力;属性【杀】,其改为摸两张牌。', @@ -23166,11 +23893,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dctongguan:'统观', dctongguan_info:'一名角色的第一个回合开始时,你为其选择一项属性(每个属性至多选两次,且仅对你可见)。', dcmengjie:'梦解', - dcmengjie_info:'一名角色的结束阶段开始时,若其本回合完成了其〖统观〗属性,你执行对应效果:
  • 「武勇」造成伤害:对一名其他角色造成1点伤害;
  • 「刚硬」回复体力,或手牌数大于体力值:令一名其他角色回复1点体力;
  • 「多谋」于摸牌阶段外摸牌:摸两张牌;
  • 「果决」弃置或获得其他角色的牌:弃置一名角色区域内至多两张牌;
  • 「仁智」交给其他角色牌:令一名其他角色将手牌补至体力上限(至多摸五张)。', + dcmengjie_info:'一名角色的结束阶段开始时,若其本回合完成了其〖统观〗属性,你执行对应效果:
  • 「武勇」造成伤害:对一名其他角色造成1点伤害;
  • 「刚硬」回复体力,或于获得牌后手牌数大于体力值:令一名其他角色回复1点体力;
  • 「多谋」于摸牌阶段外摸牌:摸两张牌;
  • 「果决」弃置或获得其他角色的牌:弃置一名角色区域内至多两张牌;
  • 「仁智」交给其他角色牌:令一名其他角色将手牌补至体力上限(至多摸五张)。', dctongguan_wuyong:'武勇', dctongguan_wuyong_info:'任务目标:造成伤害。', dctongguan_gangying:'刚硬', - dctongguan_gangying_info:'任务目标:回复体力,或手牌数大于体力值。', + dctongguan_gangying_info:'任务目标:回复体力,或于获得牌后手牌数大于体力值。', dctongguan_duomou:'多谋', dctongguan_duomou_info:'任务目标:于摸牌阶段外摸牌。', dctongguan_guojue:'果决', @@ -23218,7 +23945,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcsilve_info:'游戏开始时,你选择一名其他角色(对其他角色不可见),称为“私掠”角色。然后你获得以下效果:①当“私掠”角色造成伤害后,若你本回合未因此效果得到过受伤角色的牌,你可以获得受伤角色一张牌;②当“私掠”角色受到其他角色造成的伤害后,若伤害来源存活,你须对伤害来源使用一张【杀】(无距离限制),否则你随机弃置一张手牌。', dcshuaijie:'衰劫', dcshuaijie_info:'限定技。出牌阶段,若你的体力值与装备区里的牌数均大于“私掠”角色,或没有角色有“私掠”,你可以减1点体力上限。然后若存活角色中:有“私掠”角色,你获得“私掠”角色至多三张牌;没有“私掠”角色,你从牌堆/弃牌堆随机获得三张类型各不同的牌。最后将你的“私掠”角色改为你。', - + dc_zhouxuān:'周宣', + dcwumei:'寤寐', + dcwumei_info:'每轮限一次。回合开始时,你可以令一名角色记录场上所有角色的体力值并进行一个额外的回合,并将你的回合移至该回合后进行。该角色以此法进行的回合的结束阶段,将场上所有角色的体力值改为记录内的对应数值。', + dczhanmeng:'占梦', + dczhanmeng_info:'当你使用牌时,你可以选择本回合未选择过的一项:1.上一回合内,若没有同名牌被使用过,你获得一张非伤害牌;2.下一回合内,当同名牌首次被使用后,你获得一张伤害牌;3.令一名其他角色弃置两张牌,若点数之和大于10,你对其造成1点火焰伤害。', + dc_sp_jiaxu:'魏贾诩', + dcjianshu:'间书', + dcjianshu_info:'出牌阶段限一次。你可以将一张黑色手牌交给一名其他角色,并选择另一名其他角色,你令前者与后者拼点。赢的角色随机弃置一张牌,没赢的角色失去1点体力。若有角色因此死亡,你令你〖间书〗于此阶段发动的次数上限+1。', + dcyongdi:'拥嫡', + dcyongdi_info:'限定技。出牌阶段,你可以选择一名男性角色,若其:体力上限最少,其加1点体力上限;体力值最少,其回复1点体力;手牌数最少,其摸X张牌(X为其体力上限且至多为5)。', + dc_wangyun:'十周年王允', + dc_wangyun_ab:'王允', + dclianji:'连计', + dclianji_info:'出牌阶段限一次。你可以弃置一张手牌并选择一名其他角色,其随机使用牌堆中的一张武器牌,然后其选择一项:1.对另一名其他角色使用一张【杀】,并将武器牌交给其中一个目标;2.令你视为对其使用一张【杀】,并将武器牌交给你。', + dcmoucheng:'谋逞', + dcmoucheng_info:'觉醒技。准备阶段,若你发动过〖连计〗且两个选项均被选择过,你失去〖连计〗,然后获得〖矜功〗。', + liupi:'刘辟', + dcjuying:'距营', + dcjuying_info:'出牌阶段结束时,若你于此阶段内使用【杀】的次数未达到上限,你可以选择任意项:1.下回合使用【杀】的次数上限+1;2.本回合手牌上限+2;3.摸三张牌。若你选择的项数超过了你的体力值,你弃置X张牌(X为你选择的项数减你的体力值)。', + xuelingyun:'薛灵芸', + dcxialei:'霞泪', + dcxialei_info:'当你的红色牌进入弃牌堆后,或当你使用或打出的牌经由处理区进入弃牌堆后,你可以观看牌堆顶的三张牌,获得其中的一张牌,且可以将其余牌置于牌堆底。然后你本回合以此法观看的牌数-1。', + dcanzhi:'暗织', + dcanzhi_info:'出牌阶段或当你受到伤害后,你可以判定,若结果为红色,你重置〖霞泪〗的观看牌数;若结果为黑色,〖暗织〗于本回合失效,然后你可以令一名非当前回合角色获得本回合进入弃牌堆的两张牌。', + sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", sp_longzhou:"同舟共济", @@ -23235,7 +23986,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_zhongyuan:'列传·中原狼烟', sp_binglin:'兵临城下', sp_xiaohu:'列传·虓虎悲歌', - sp_yinyu:'隐玉包', + sp2_yinyu:'限定·隐山之玉', sp_zhilan:'荟萃·芝兰玉树', sp_zongheng:'荟萃·纵横捭阖', sp_fenghuo:'烽火连天', @@ -23249,6 +24000,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_jianghu:'荟萃·江湖之远', sp2_bizhe:'限定·笔者如椽', sp_daihan:'荟萃·代汉涂高', + sp2_doukou:'限定·豆蔻梢头', + sp2_jichu:'限定·计将安出', + sp_taiping:'荟萃·太平甲子', + sp_yanhan:'荟萃·匡鼎炎汉', sp_decade:'其他新服武将', }, }; diff --git a/character/standard.js b/character/standard.js index 2de3a83fc..bf052ca6f 100755 --- a/character/standard.js +++ b/character/standard.js @@ -2462,7 +2462,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xiahoudun:['re_xiahoudun','xin_xiahoudun','xiahoudun'], liubei:['re_liubei','liubei'], guanyu:['re_guanyu','guanyu'], - zhangfei:['re_zhangfei','xin_zhangfei','old_zhangfei','zhangfei'], + zhangfei:['re_zhangfei','tw_zhangfei','xin_zhangfei','old_zhangfei','zhangfei'], zhaoyun:['re_zhaoyun','old_zhaoyun','zhaoyun'], sp_zhaoyun:['sp_zhaoyun','jsp_zhaoyun'], machao:['re_machao','machao'], diff --git a/character/tw.js b/character/tw.js index 6aaac9f8e..21e25984d 100644 --- a/character/tw.js +++ b/character/tw.js @@ -5,13 +5,74 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ tw:{ - tw_mobile:['nashime','tw_dongzhao','jiachong','duosidawang','wuban','yuejiu','tw_huojun','tw_caocao','tw_zhangmancheng','tw_caozhao','tw_wangchang','tw_puyangxing'], - tw_mobile2:['tw_beimihu','tw_gexuan','tw_fuwan','tw_yujin','tw_zhaoxiang','tw_hucheer','tw_hejin','tw_mayunlu','tw_re_caohong','tw_zangba','tw_liuhong','tw_chengpu','tw_guohuai','tw_wujing','tw_wangcan','old_quancong','tw_tianyu'], + tw_sp:['tw_fuwan','tw_yujin','tw_zhaoxiang','tw_hucheer','tw_hejin','tw_mayunlu','tw_re_caohong','tw_zangba','tw_liuhong','tw_tianyu','jiachong','duosidawang','wuban','yuejiu','tw_caocao','tw_zhangmancheng','tw_caozhao','tw_wangchang','tw_puyangxing','tw_jiangji','tw_niujin','tw_xiahouen','tw_xiahoushang','tw_zhangji','tw_zhangnan','tw_fengxí','tw_furong','tw_liwei','tw_yangyi','tw_daxiaoqiao','tw_dengzhi','tw_baoxin','tw_bingyuan','tw_fanchou','tw_haomeng','tw_huchuquan','tw_jianshuo','tw_jiling','tw_liufuren','tw_liuzhang','tw_mateng','tw_niufudongxie','tw_qiaorui','tw_weixu','tw_yanxiang','tw_yufuluo','tw_zhangning','tw_dengzhi','tw_yangyi'], + tw_yunchouzhi:['tw_wangcan','tw_dongzhao','tw_bianfuren','tw_feiyi','tw_chenzhen','tw_xunchen'], + tw_yunchouxin:['tw_wangling','tw_huojun','tw_wujing','tw_zhouchu'], + tw_yunchouren:['tw_xujing','tw_qiaogong'], + tw_yunchouyong:['tw_zongyu','tw_chendong','tw_sunyi'], + tw_yunchouyan:['tw_jiangqing'], + tw_swordsman:['xia_xushu','xia_wangyue','xia_liyàn','xia_tongyuan'], + tw_mobile:['nashime','tw_beimihu','tw_gexuan','tw_zhugeguo'], + tw_mobile2:['tw_chengpu','tw_guohuai','old_quancong','tw_caoxiu','tw_guanqiujian','tw_re_fazheng','tw_madai','tw_zhangfei','tw_guyong','tw_handang','tw_xuezong','tw_yl_luzhi'], tw_yijiang:['tw_caoang','tw_caohong','tw_zumao','tw_dingfeng','tw_maliang','tw_xiahouba'], tw_english:['kaisa'], }, }, character:{ + tw_bingyuan:['male','qun',3,['twbingde','twqingtao'],[]], + tw_niufudongxie:['double','qun',4,['twjuntun','twxiongxi','twxiafeng'],[]], + tw_jianshuo:['male','qun',6,['twkunsi'],[]], + tw_jiangji:['male','wei',3,['twjichou','twjilun'],[]], + tw_mateng:['male','qun',4,['mashu','twxiongzheng','twluannian'],['zhu',]], + tw_baoxin:['male','qun',4,['twmutao','twyimou'],[]], + tw_liufuren:['female','qun',3,['twzhuidu','twshigong'],[]], + tw_yufuluo:['male','qun',6,['twjiekuang','twneirao'],[]], + tw_fengxí:['male','shu',4,['twqingkou'],[]], + tw_zhangji:['male','wei',3,['twdingzhen','twyouye'],[]], + tw_zhangnan:['male','shu',4,['twfenwu'],[]], + tw_huchuquan:['male','qun',4,['twfupan'],[]], + tw_liwei:['male','shu',4,['twjiaohua'],[]], + tw_yanxiang:['male','qun',3,['twkujian','twruilian'],[]], + tw_xiahouen:['male','wei',5,['twfujian','twjianwei'],[]], + tw_xiahoushang:['male','wei',4,['twtanfeng'],[]], + tw_qiaorui:['male','qun',5,['twxiawei','twqiongji'],[]], + tw_haomeng:['male','qun',4,['twgongge'],[]], + tw_weixu:['male','qun',4,['twsuizheng','twtuidao'],[]], + xia_xushu:['male','qun',4,['twjiange','twxiawang'],[]], + xia_wangyue:['male','qun',4,['twyulong','twjianming'],[]], + xia_liyàn:['male','qun',4,['twzhenhu','twlvren'],[]], + xia_tongyuan:['male','qun',4,['twchaofeng','twchuanshu'],[]], + tw_zhangning:['female','qun',3,['twxingzhui','twjuchen'],[]], + tw_yangyi:['male','shu',3,['duoduan','twgongsun'],[]], + tw_dengzhi:['male','shu',3,['twjimeng','shuaiyan'],[]], + tw_wangling:['male','wei',4,['twmibei','twxingqi'],[]], + tw_zhugeguo:['female','shu',3,['twqirang','twyuhua'],[]], + tw_fanchou:['male','qun',4,['twxingluan'],[]], + tw_xujing:['male','shu',3,['twboming','twejian'],[]], + tw_zhangfei:['male','shu',4,['new_repaoxiao','twxuhe'],[]], + tw_xuezong:['male','wu',3,['funan','twjiexun'],[]], + tw_xunchen:['male','qun',3,['twweipo','mjchenshi','twmouzhi'],[]], + tw_jiangqing:['male','wu',4,['twshangyi','twxiangyu'],[]], + tw_guyong:['male','wu',3,['twgyshenxing','twbingyi'],[]], + tw_chendong:['male','wu',4,['twyilie','twfenming'],[]], + tw_handang:['male','wu',4,['twgongji','twjiefan'],[]], + tw_jiling:['male','qun',4,['twshuangren'],[]], + tw_re_fazheng:['male','shu',3,['twxuanhuo','twenyuan'],[]], + tw_madai:['male','shu',4,['mashu','twqianxi'],[]], + tw_niujin:['male','wei',4,['twcuorui','twliewei'],[]], + tw_guanqiujian:['male','wei',3,['twzhengrong','twhongju'],[]], + tw_daxiaoqiao:['female','wu',3,['twxingwu','twpingting'],[]], + tw_furong:['male','shu',4,['twxuewei','twliechi'],[]], + tw_yl_luzhi:['male','qun',3,['twmingren','twzhenliang'],[]], + tw_liuzhang:['male','qun',3,['jutu','twyaohu','rehuaibi'],[]], + tw_zongyu:['male','shu',3,['twzhibian','twyuyan'],[]], + tw_zhouchu:['male','wu',4,['twguoyi','twchuhai'],[]], + tw_qiaogong:['male','wu',3,['twyizhu','twluanchou'],[]], + tw_feiyi:['male','shu',3,['twshengxi','twkuanji'],[]], + tw_bianfuren:['female','wei',3,['twwanwei','twyuejian'],[]], + tw_chenzhen:['male','shu',3,['twmuyue','twchayi'],[]], + tw_caoxiu:['male','wei',4,['twqianju','twqingxi'],[]], + tw_sunyi:['male','wu',4,['twzaoli'],[]], tw_puyangxing:['male','wu',4,['twzhengjian','twzhongchi']], tw_tianyu:['male','wei',4,['twzhenxi','twyangshi']], old_quancong:['male','wu',4,['zhenshan']], @@ -60,6 +121,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caozhao:'曹肇(?-244年),字长思,沛国谯县(今安徽亳州)人。三国时期魏国大臣,大司马曹休之子。容貌俊美,有当世才度,深得魏明帝宠信,官至散骑常侍、屯骑校尉。魏明帝临死,与燕王曹宇等托付后事。不果,以长平侯归第。正始五年(244年)卒,追赠为卫将军。', wangchang:'王昶(2世纪-259年),字文舒,太原郡晋阳县(今山西太原)人。三国时期曹魏将领,东汉代郡太守王泽之子。出身太原王氏,少有名气,进入曹丕幕府,授太子文学。曹丕即位后,拜散骑侍郎,迁兖州刺史,撰写《治论》、《兵书》,作为朝廷提供施政参考。魏明帝曹叡即位后,升任扬烈将军,封关内侯。齐王曹芳即位,迁徐州刺史,拜征南将军。太傅司马懿掌权后,深得器重,奏请伐吴,在江陵取得重大胜利,升任征南大将军、开府仪同三司,晋爵京陵侯。正元年间(255年),参与平定“淮南三乱”有功,迁骠骑大将军,守司空。甘露四年(259年),去世,赠司徒,谥号为穆。', puyangxing:'濮阳兴(?-264年),字子元,陈留(治今河南开封)人,三国时期东吴大臣,吴景帝孙休末年至末帝孙皓初年任丞相。孙权时为上虞县令,后升任尚书左曹、五官中郎将、会稽太守。孙休即位,征召为太常卫将军、平军国事,封外黄侯。永安三年(260年),力主建丹杨湖田,事倍功半,百姓大怨。后升任丞相。永安七年(264年),孙休去世,濮阳兴与张布迎立孙皓。担任侍郎,兼任青州牧。同年被万彧谮毁,流放广州,途中被孙皓派人追杀,并夷三族。', + re_caohong:'字子廉,沛国谯(今安徽亳县)人,曹操从弟,曾献马并救护曹操。后多随军征伐,平兖州、征刘表、讨祝臂。曹丕即位时封曹洪为骠骑将军。曹叡即位,拜曹洪为后将军,更封乐城侯,后复拜为骠骑将军。曹洪逝世,追谥曰恭侯。', + jiangji:'蒋济(?—249年5月18日),字子通,楚国平阿(今安徽省怀远县常坟镇孔岗)人。三国后期曹魏名臣,历仕曹操、曹丕、曹睿、曹芳四朝。蒋济在汉末出任九江郡吏、扬州别驾。后被曹操聘为丹杨太守,不久升任丞相府主薄,西曹属,成为曹操的心腹谋士。魏文帝时期,蒋济出任东中郎将,代替曹仁统率大军,后升任尚书。魏明帝时期,蒋济出任中护军,封侯关内,功勋颇多。景初年间担任护军将军、散骑常侍等职。曹芳继位之后,转任领军将军,封昌陵亭侯,又代司马懿为太尉。正始十年(249年),蒋济随司马懿推翻曹爽势力之后,晋封都乡侯,同年卒(一说为蒋济觉得失信于曹爽,不久后自责忧愤而死),谥曰景侯。', + huchuquan:'呼厨泉(生卒年不详),东汉末年、三国时期匈奴单于。南匈奴羌渠单于之子,于夫罗之弟。于夫罗死后继任成为单于,曾数次依附,又反叛东汉。建安七年(公元202年),呼厨泉统领南匈奴诸部作乱平阳,钟繇率诸军围之。河北袁氏将领高干、郭援等前来增援呼厨泉,与钟繇及关中诸将大战于平阳。最终,呼厨泉惨败,从此归降曹操。建安二十一年(216年),呼厨泉被留在了邺城,南匈奴遂被分为五部。', + xiahouen:'夏侯恩是古典小说《三国演义》中的人物,为曹操随身之背剑心腹。曹操有宝剑二口:一名“倚天剑”,一名“青釭剑”。倚天剑镇威,青釭剑杀人。倚天剑曹操自佩之,青釭剑令夏侯恩佩之。那青釭剑削铁如泥,锋利无比。《三国演义》第四十一回《刘玄德携民渡江 赵子龙单骑救主》中描写:当时夏侯恩自恃勇力,背着曹操,只顾引人抢夺掳掠。不想撞着赵云,被他一枪刺死。青釭剑自此归赵云所有。', + xiahoushang:'夏侯尚(?~226年),字伯仁,沛国谯郡(今安徽省亳州市)人。三国时期曹魏将领,征西将军夏侯渊的堂侄。曹操平定冀州,以为军司马、五官将文学,迁黄门侍郎,随曹彰远征乌桓,得胜归来。与魏文帝曹丕亲近友好,以为征南将军,领荆州刺史,假节、都督南方诸军事,攻拔蜀国上庸,平定三郡九县,升为征南大将军;江陵击败吴将诸葛瑾,升为荆州牧,封昌陵乡侯。黄初七年(226年),去世,谥号为悼,其子夏侯玄继嗣。正始四年,配享魏武帝曹操庙庭。', + zhangnan:'张南(?-公元222年),字文进。三国时期蜀汉将领。刘备攻伐吴国时,张南担任前部。后刘备被陆逊击败,张南兵败战死。', + fengxí:'冯习(?—222年),字休元,南郡(治今湖北省荆州市公安县)人。三国时期蜀汉将领。随刘备入川,并于刘备攻伐孙吴时担任领军,后在猇亭被吴将陆逊击败,兵败战死。', + liwei:'李遗[wèi],生卒年不详,三国时期蜀汉名臣李恢之子,关羽女儿关银屏之夫。正史鲜有其生平记载,多见于关银屏的民间传说,其名在民间传说中被传为“李蔚”,因为遗为多音字且民间传说为口头相传并不知道具体字形之故,当以史书《三国志》作李遗为正。死后夫妇二人合葬于俞元县(今云南澄江)关三小姐墓。其父去世后,继承了汉兴亭候的爵位。', + baoxin:'鲍信(151年-192年),泰山平阳(今山东新泰)人。东汉末年济北相,讨伐董卓的诸路人马之一。鲍信受何进征召在外募兵,回到洛阳时适逢董卓进京,鲍信劝袁绍除掉董卓,袁绍不同意。后袁绍、曹操等人起兵对抗董卓,鲍信也起兵响应。后联盟破裂,鲍信劝戒曹操静观其变。青州黄巾军进攻兖州,刺史刘岱不听鲍信所劝贸然出战,兵败战死。鲍信便把曹操迎立为兖州牧。在与黄巾军交战期间,鲍信为救曹操不幸战死,曹操后来追记功绩,赐封其子。', + bingyuan:'邴原(生卒年不详),字根矩,北海朱虚(今山东临朐东)人。东汉末年名士、大臣。邴原家贫、早孤。初为北海相孔融所举。曹操为司空时,任邴原为东阁祭酒。建安十五年(210年),邴原担任丞相征事,后又代凉茂为五官将长史,闭门自守,非公事不出。随曹操征吴,于途中去世。', + jianshuo:'蹇硕(?—189年),东汉末宦官。中平五年(188年),蹇硕为上军校尉,汉灵帝以蹇硕壮健而有武略,对其特别信任,并以其为西园军元帅,领导袁绍、曹操等八校尉,以监督司隶校尉以下诸官。蹇硕虽然握有兵权,但对何进非常畏忌,曾和宦官们一起说服灵帝派遣何进西击边章、韩遂。中平六年(189年),灵帝在病重时将刘协托给蹇硕。灵帝去世后,蹇硕想先杀何进再立刘协为天子,但因手下司马潘隐与何进有旧对何进使眼色而失败。刘辩继承帝位后,蹇硕与中常侍赵忠、郭胜等写信欲合谋除去何进兄弟,因郭胜与何进为同郡且何进及何皇后发迹亦有其功劳于是亲信何氏便怂恿赵忠等人不听蹇硕之计,且将蹇硕的书信告知何进,何进于是便派黄门将之诛杀,其部下士兵亦被何进所领。', + liufuren:'刘夫人,东汉末年军阀袁绍的后妻,袁谭与袁尚的母亲。袁绍的二子中,袁谭年长而贤惠,袁尚年幼相貌美好。袁绍的后妻刘夫人有宠,她偏爱少子袁尚而讨厌长子袁谭,多次称赞袁尚的才能,袁绍也为三子的容貌感到惊奇,想要作为继承人,于是让袁谭做哥哥的后代,出外任青州刺史,后导致二子相争。。', + niufudongxie:'牛辅,东汉末年武将,东汉相国董卓的女婿。董翓,牛辅之妻,董卓之女。牛辅曾任中郎将,征讨白波军,不能取胜。董卓被杀时,牛辅别屯于陕地。吕布派李肃前去征讨牛辅,被牛辅击败。后来,牛辅营中有士兵半夜背叛出逃,造成内乱,牛辅以为整营皆叛,于是带着金银珠宝,独与亲信胡赤儿等五六人逾城北渡河。赤儿等人以绳索系在牛辅腰间将其从城头放下,但赤儿等因为谋财而在离地面数丈高的地方就松开了绳子使得牛辅重重摔在地上腰部受伤,而后赤儿与诸胡人将牛辅斩首,将其首级送去长安。', + tw_zhangji:'张既(?—223年),字德容,冯翊高陵(今陕西西安市高陵区)人。汉末三国时期曹魏名臣。举秀才出身,授新丰县令,治绩为三辅第一。河东之战时,劝说马腾参与讨伐高干、张晟叛乱。迁京兆尹,抚民兴政,联合夏侯渊平宋建,定临洮,取狄道,安郡民,迁徙氐人。张鲁投降后,建议曹操迁徙汉中百姓充实三辅,辅助曹洪击败吴兰。魏国建立后,拜尚书。黄初二年(221年),临危受命,拜雍州刺史,平定诸胡叛乱。迁凉州刺史,封西乡侯。在任期间,降苏衡,邻戴众,修工事,安抚百姓,平定西平郡麹光叛乱。一生以惠政闻名,征辟杨阜、胡遵等人,皆有名位。黄初四年(223年)去世。魏明帝曹叡即位后,追谥肃侯,其子张缉为关内侯。', + qiaorui:'桥蕤[ruí](?—197年),东汉末年袁术部下将领,为袁术开拓地盘立下了一定战功。曹操进攻袁术时,担任迎击军的先锋。在寿春与曹操军大战,被夏侯惇杀死。据正史记载,他曾经被袁术任命为大将军。', + weixu:'魏续,东汉末年吕布帐下名将。与吕布有亲,吕布将高顺兵归续管。汉献帝建安三年(198年),曹操率军攻吕布,围之三月。魏续与侯成、宋宪缚陈宫,降曹。吕布被迫降,被缢杀在白门楼。', + yanxiang:'阎象,东汉末期人物,袁术的主簿。献帝兴平二年(195),手执玉玺的袁术要称帝时,问于部下,只有阎象引用周文王虽拥有三分之二的天下还向殷称臣的故事进行劝谏。却未被采纳。', + yufuluo:'东汉时匈奴单于。亦称於夫罗、栾提于夫罗、于扶罗。羌渠单于子,右贤王。前赵刘渊之祖。于东汉中平年间带兵来到中原协助东汉政府镇压起义,赶上本国叛乱,其父被杀,于是留在中原,与白波军联合,在太原、河东等地劫掠。汉末军阀混战之际,于夫罗先后与袁绍、张杨、袁术等人联合,两次与曹操交战,均被击败。后来,于夫罗去世,其弟呼厨泉继任成为单于,其子刘豹被立为左贤王。', + sp_xunchen:'荀谌,字友若,荀彧之兄(一说荀彧之弟),荀绲之子,颍川人。曾任军阀袁绍的幕僚。帮助袁绍游说韩馥,夺取了冀州。', + sp_xujing:'许靖(?—222年),字文休。汝南郡平舆县(今河南省平舆县)人。汉末至三国蜀汉时期重臣、名士、评论家。许靖因与从弟许邵俱以品评人物而闻名于世。后被刘翊推举为孝廉,任尚书郎。曾先后投奔孔伷、陈祎、许贡、王朗等人,于孙策攻王朗前与家属俱避难交州,受到交趾太守士燮礼待。其后受益州牧刘璋邀请,相继为巴郡、广汉、蜀郡太守。于刘备包围成都时欲越墙叛逃,为刘璋所获。刘备定蜀后欲将其弃用,在法正的建议下方以其为左将军长史。建安二十三年(218年),刘备称汉中王,任命许靖为汉中王傅。章武元年(221年),刘备称帝,任命许靖为司徒,位列三公。章武二年(222年),去世。有文集二卷。', + sp_zongyu:'宗预(?-264年),字德艳 ,荆州南阳郡安众县(今河南省南阳市)人。三国时期蜀汉官员、将领。曾随张飞入蜀助平益州,又受辟为丞相诸葛亮手下主簿,升任参军、右中郎将。诸葛亮逝世后,宗预受命出使孙吴,得到孙权的赞赏。迁后将军,出督永安,又升任征西大将军,并受封关内侯。公元258年(景耀元年),因病回成都,受任镇军大将军。蜀汉灭亡后,宗预随后主刘禅徙往洛阳,在中途病逝。宗预为人坦率耿直,多次出使孙吴并深得孙权的敬重,为吴、汉两国同盟的巩固作出了一定的贡献。', + sp_chendong:'陈武,东吴将领,孙策攻打刘繇,陈武前来相助,孙策非常喜爱陈武,拜为校尉,使作先锋。陈武以十数骑兵力杀敌五十余人。后于赤壁等战役屡立功勋。董袭献上严虎的人头来降孙策。赤壁之战,董袭受周瑜命,分兵去汉阳,合肥会战时接应太史慈,逍遥津支援孙权。濡须口之战时,董袭在船上督战,船覆董袭坚守殉职。', + xia_wangyue:'王越,东汉末年游侠(生卒年不详),乃辽东燕山人士,擅使剑术, 三国时期史阿的师父,曹丕的师公,官职虎贲将军。在史书《典论》中略有记载。', + liyàn:'李彦,号称"并州第一戟",是童渊的师兄。早年间两人在玉真子门下一起习武,后成年出师开枝散叶。同为并州人的吕布在得知李彦的名声后,投入其门下学习武艺。', + re_fazheng:'字孝直,本为刘璋部下,刘备围成都时劝说刘璋投降,而后又与刘备进取汉中,献计将曹操大将夏侯渊斩首。法正善奇谋,深受刘备信任和敬重。', + xin_guyong:'为蔡邕之徒。其为人少言语,不饮酒,严厉正大,被张纮推荐仕于孙权。孙权任命他为会稽郡丞,行太守事,后不断升迁,官至吴国丞相。顾雍为官,多进良言,有功于吴。', }, card:{ dz_mantianguohai:{ @@ -173,6 +260,7597 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //邴原 + twbingde:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he')&&player.getStorage('twbingde_clear').length<4; + }, + onChooseToUse:function(event){ + if(event.type=='phase'&&!game.online){ + var map={}; + event.player.getHistory('useCard',evt=>{ + var evtx=evt.getParent('phaseUse'),suit=get.suit(evt.card); + if(!lib.suit.contains(suit)) return; + if(evtx!=event.getParent('phaseUse')) return; + if(typeof map[suit]!='number') map[suit]=0; + map[suit]++; + }); + event.set('twbingde_map',map); + } + }, + chooseButton:{ + dialog:function(event,player){ + var str=get.translation('twbingde_info'),str2=''; + if(event.twbingde_map){ + str2='
    本回合使用牌对应花色数:
    '; + str2+='
    '; + for(var suit of lib.suit){ + str2+=get.translation(suit)+':'+get.cnNumber(event.twbingde_map[suit]||0)+'张;'; + } + str2=str2.slice(0,str2.length-1)+'
    '; + } + return ui.create.dialog('###秉德###'+str,str2); + }, + chooseControl:function(event,player){ + var list=lib.suit.slice(); + list.removeArray(player.getStorage('twbingde_clear')); + list.push('cancel2'); + return list; + }, + check:function(event,player){ + var map=event.twbingde_map; + var suit=lib.suit.filter(i=>!player.getStorage('twbingde_clear').contains(i)).sort((a,b)=>{ + return map[b]-map[a]; + })[0]; + if(map[suit]==0) return 'cancel2'; + return suit; + }, + backup:function(result,player){ + return { + audio:'twbingde', + filterCard:true, + selectCard:1, + position:'he', + suit:result.control, + check:function(card){ + var suit=lib.skill.twbingde.suit; + if(get.suit(card)==suit) return 10-get.value(card); + return 6-get.value(card); + }, + content:function(){ + 'step 0' + var suit=lib.skill.twbingde_backup.suit,num=0; + player.popup(suit+2); + game.log(player,'选择了','#y'+suit+2); + player.addTempSkill('twbingde_clear','phaseUseAfter'); + player.markAuto('twbingde_clear',[suit]); + player.getHistory('useCard',evt=>{ + var evtx=evt.getParent('phaseUse'),suitx=get.suit(evt.card); + if(!evtx||evtx!=event.getParent('phaseUse')||suit!=suitx) return false; + num++; + }); + if(num>0) player.draw(num); + 'step 1' + if(get.suit(cards[0],player)==lib.skill.twbingde_backup.suit){ + delete player.getStat('skill').twbingde; + } + }, + ai:{ + result:{ + player:1, + }, + }, + } + }, + prompt:()=>'秉德:弃置一张牌', + }, + ai:{ + order:2, + result:{player:1} + }, + subSkill:{ + backup:{}, + clear:{ + charlotte:true, + onremove:true, + } + }, + }, + twqingtao:{ + audio:2, + trigger:{player:'phaseDrawEnd'}, + filter:function(event,player){ + return player.countCards('he'); + }, + direct:true, + group:'twqingtao_jieshu', + content:function(){ + 'step 0' + player.chooseCard(get.prompt2('twqingtao'),'he').set('ai',function(card){ + if(card.name=='jiu'||get.type(card)!='basic') return 10-get.value(card); + return 6-get.value(card); + }); + 'step 1' + if(result.bool){ + player.logSkill('twqingtao'); + player.loseToDiscardpile(result.cards); + player.draw(); + if(result.cards[0].name=='jiu'||get.type(result.cards[0],false,player)!='basic') player.draw(); + } + }, + subSkill:{ + jieshu:{ + audio:'twqingtao', + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.countCards('he')>0&&!player.hasHistory('useSkill',evt=>evt.skill=='twqingtao'); + }, + direct:true, + content:function(){ + var next=game.createEvent('twqingtao'); + next.player=player; + next.setContent(lib.skill.twqingtao.content); + }, + } + } + }, + //牛董 + twjuntun:{ + audio:2, + trigger:{ + global:['phaseBefore','dieAfter'], + player:'enterGame', + }, + init:function(player){lib.skill.baonvezhi.change(player,0)}, + direct:true, + derivation:['twxiongjun','baonvezhi_faq'], + group:'twjuntun_extra', + filter:function(event,player){ + return (event.name!='phase'||game.phaseNumber==0)&&game.hasPlayer(current=>{ + return !current.hasSkill('twxiongjun'); + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('twjuntun'),'令一名角色获得〖凶军〗',(card,player,target)=>{ + return !target.hasSkill('twxiongjun'); + }).set('ai',target=>get.attitude(player,target)-2); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('twjuntun',target); + target.addSkillLog('twxiongjun'); + if(target!=player) player.addExpose(0.25); + } + }, + subSkill:{ + extra:{ + audio:2, + trigger:{global:'damageSource'}, + forced:true, + locked:false, + filter:function(event,player){ + return event.source&&event.source.hasSkill('twxiongjun')&&event.source!=player; + }, + logTarget:'source', + content:function(){ + lib.skill.baonvezhi.change(player,trigger.num); + } + }, + }, + }, + baonvezhi:{ + audio:2, + trigger:{ + player:'damageEnd', + source:'damageSource', + }, + silent:true, + forced:true, + charlotte:true, + baonvezhi_max:5, + change:function(player,num){ + var baonvezhi_max=lib.skill.baonvezhi.baonvezhi_max; + player.addSkill('baonvezhi'); + var tmp=player.countMark('baonvezhi'); + if(tmp+num>baonvezhi_max) num=baonvezhi_max-tmp; + else if(tmp+num<0) num=-tmp; + if(num===0) return; + player[num>0?'addMark':'removeMark']('baonvezhi',Math.abs(num),false); + game.log(player,num>=0?'获得了':'失去了',get.cnNumber(Math.abs(num))+'点暴虐值'); + player[player.countMark('baonvezhi')>0?'markSkill':'unmarkSkill']('baonvezhi'); + }, + filter:function(event,player){ + return player.countMark('baonvezhi')current.hasSkill('twxiongjun')).sortBySeat(); + player.line(targets,'green'); + game.asyncDraw(targets); + }, + }, + twxiongxi:{ + audio:2, + enable:'phaseUse', + usable:1, + init:function(player){lib.skill.baonvezhi.change(player,0)}, + filterCard:()=>true, + selectCard:function(){ + return (lib.skill.baonvezhi.baonvezhi_max||5)-_status.event.player.countMark('baonvezhi'); + }, + check:function(card){ + return 6-get.value(card); + }, + position:'he', + filterTarget:function(card,player,target){ + return target!=player; + }, + content:function(){ + target.damage(); + }, + ai:{ + expose:0.25, + order:8, + result:{ + target:function(player,target){ + return get.damageEffect(target,player,player); + } + } + } + }, + twxiafeng:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + filter:function(event,player){ + return player.countMark('baonvezhi')>0; + }, + init:function(player){lib.skill.baonvezhi.change(player,0)}, + direct:true, + content:function(){ + 'step 0' + player.chooseButton(['黠凤:选择要消耗的暴虐值',[['tw_bn_1','tw_bn_2','tw_bn_3'],'vcard']],(button)=>{ + var num=player.countCards('hs',card=>get.tag(card,'damage')&&game.hasPlayer(current=>get.effect(current,card,player,player)>0)); + if(num<=0) return 0; + if(num>=3) num=3; + if(button.link[2]=='hw_bn_'+num) return 10; + return 1; + }).set('filterButton',(button)=>{ + var player=_status.event.player; + var link=button.link[2]; + if(link[link.length-1]*1>player.storage.baonvezhi) return false; + return true; + }); + 'step 1' + if(result.bool){ + player.logSkill('twxiafeng'); + var link=result.links[0][2],num=link[link.length-1]*1; + player.addTempSkill('twxiafeng_effect'); + player.storage.twxiafeng_effect=num; + lib.skill.baonvezhi.change(player,-num); + } + }, + subSkill:{ + effect:{ + trigger:{player:'useCard'}, + filter:function(event,player){ + return !player.storage.twxiafeng_effect2; + }, + forced:true, + content:function(){ + var count=player.getHistory('useCard',evt=>evt.getParent('phaseUse').player==player).length; + if(count==player.storage.twxiafeng_effect){ + player.storage.twxiafeng_effect2=true; + } + if(count<=player.storage.twxiafeng_effect){ + trigger.directHit.addArray(game.players); + if(trigger.addCount!==false){ + trigger.addCount=false; + var stat=player.getStat().card,name=trigger.card.name; + if(typeof stat[name]=='number') stat[name]--; + } + } + }, + onremove:function(player){ + delete player.storage.twxiafeng_effect; + delete player.storage.twxiafeng_effect2; + }, + mod:{ + targetInRange:function(card,player,target,now){ + if(!player.storage.twxiafeng_effect2) return true; + }, + cardUsableTarget:function(card,player,target){ + if(!player.storage.twxiafeng_effect2) return true; + }, + maxHandcard:function(player,num){ + return num+(player.storage.twxiafeng_effect||0); + } + }, + } + } + }, + //蒋济 + twjichou:{ + audio:2, + enable:'chooseToUse', + group:['twjichou_ban','twjichou_give'], + filter:function(event,player){ + if(player.hasSkill('twjichou_used')&&player.hasSkill('twjichou_given')) return false; + if(!player.hasSkill('twjichou_used')){ + var record=player.getStorage('twjichou'); + for(var i of lib.inpile){ + var type=get.type(i); + if(type=='trick'&&!record.contains(i)&&event.filterCard({name:i,isCard:true},player,event)) return true; + } + } + return false; + }, + chooseButton:{ + dialog:function(event,player){ + var dialog=ui.create.dialog('急筹'); + if(!player.hasSkill('twjichou_used')&&!player.hasSkill('twjichou_given')&&event.type=='phase'&&player.countCards('h',card=>{ + return player.getStorage('twjichou').contains(get.name(card)); + })){ + dialog._chosenOpt=[]; + var table=document.createElement('div'); + table.classList.add('add-setting'); + table.style.margin='0'; + table.style.width='100%'; + table.style.position='relative'; + var list=['视为使用牌','交出锦囊牌']; + for(var i of list){ + var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode'); + td.innerHTML=''+i+''; + td.link=i; + if(i==list[0]){ + td.classList.add('bluebg'); + dialog._chosenOpt.add(td); + } + td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){ + if(_status.dragged) return; + if(_status.clicked) return; + if(_status.justdragged) return; + _status.tempNoButton=true; + _status.clicked=true; + setTimeout(function(){ + _status.tempNoButton=false; + },500); + var link=this.link; + if(link=='交出锦囊牌') game.uncheck(); + var current=this.parentNode.querySelector('.bluebg'); + if(current){ + current.classList.remove('bluebg'); + dialog._chosenOpt.remove(current); + } + dialog._chosenOpt.add(this); + this.classList.add('bluebg'); + game.check(); + }); + table.appendChild(td); + dialog.buttons.add(td); + } + dialog.content.appendChild(table); + } + var list=[],record=player.getStorage('twjichou'); + for(var name of lib.inpile){ + if(get.type(name)=='trick'&&!record.contains(name)&&event.filterCard({name:name,isCard:true},player,event)) list.push(['锦囊','',name]); + } + dialog.add([list,'vcard']); + return dialog; + }, + filter:function(button){ + var opts=_status.event.dialog._chosenOpt; + if(opts&&opts.length&&opts[0].link=='交出锦囊牌'&&typeof button.link!=typeof opts[0].link){ + return false; + } + return true; + }, + select:function(){ + var opts=_status.event.dialog._chosenOpt; + return opts&&opts.length&&opts[0].link=='交出锦囊牌'?0:1; + }, + check:function(button){ + if(_status.event.getParent().type!='phase') return 1; + var player=_status.event.player; + if(['wugu','zhulu_card','yiyi','lulitongxin','lianjunshengyan','diaohulishan'].contains(button.link[2])) return 0.1; + return player.getUseValue({name:button.link[2]}); + }, + backup:function(links,player){ + var isUse=links.length==1; + var backup=get.copy(lib.skill['twjichou_'+(isUse?'use':'give')]); + if(isUse) backup.viewAs={name:links[0][2],isCard:true}; + return backup; + }, + prompt:function(links,player){ + var isUse=links.length==1; + return '急筹:'+(isUse?('视为使用'+get.translation(links[0][2])+''):'选择要交出的牌和要交给的目标'); + } + }, + hiddenCard:function(player,name){ + if(player.hasSkill('twjichou_used')) return false; + var type=get.type(name); + return type=='trick'&&!player.getStorage('twjichou').contains(name); + }, + marktext:'筹', + intro:{ + markcount:function(storage,player){ + if(storage&&storage.length) return storage.length; + return 0; + }, + content:'已记录牌名:$', + }, + ai:{ + order:1, + result:{ + player:function(player){ + if(_status.event.dying) return get.attitude(player,_status.event.dying); + return 1; + }, + }, + }, + subSkill:{ + backup:{}, + used:{charlotte:true}, + given:{charlotte:true}, + ban:{ + trigger:{global:'useCard1'}, + filter:function(event,player){ + return player.getStorage('twjichou').contains(event.card.name); + }, + forced:true, + locked:false, + silent:true, + content:function(){ + trigger.directHit.add(player); + }, + mod:{ + cardEnabled:function(card,player){ + if(player.getStorage('twjichou').contains(card.name)&&(get.position(card)=='h'||card.cards&&card.cards.some(i=>get.position(i)=='h'))) return false; + }, + cardSavable:function(card,player){ + if(player.getStorage('twjichou').contains(card.name)&&(get.position(card)=='h'||card.cards&&card.cards.some(i=>get.position(i)=='h'))) return false; + }, + aiValue:function(player,card){ + if(get.type(card)!='trick'||_status.twjichou_give_aiCheck) return; + if(!player.getFriends().length&&player.getStorage('twjichou').contains(get.name(card))) return 0; + }, + aiUseful:function(){ + return lib.skill.twjichou_ban.mod.aiValue.apply(this,arguments); + }, + }, + }, + use:{ + filterCard:()=>false, + selectCard:-1, + audio:'twjichou', + popname:true, + onuse:function(links,player){ + player.markAuto('twjichou',[links.card.name]); + player.syncStorage('twjichou'); + player.addTempSkill('twjichou_used'); + }, + }, + give:{ + audio:'twjichou', + enable:'phaseUse', + filter:function(event,player){ + return player.hasSkill('twjichou_used')&&!player.hasSkill('twjichou_given')&&player.countCards('h',i=>player.getStorage('twjichou').contains(get.name(i))); + }, + filterTarget:function(card,player,target){ + return target!=player; + }, + filterCard:function(card,player){ + return player.getStorage('twjichou').contains(get.name(card)); + }, + check:function(card){ + _status.twjichou_give_aiCheck=true; + var val=get.value(card); + delete _status.twjichou_give_aiCheck; + return val; + }, + prompt:()=>'选择要交出的牌和要交给的目标', + selectCard:1, + discard:false, + lose:false, + delay:false, + content:function(){ + player.give(cards,target); + player.addTempSkill('twjichou_given','phaseUseAfter'); + }, + ai:{ + order:0.9, + result:{ + target:function(player,target){ + if(target.hasSkillTag('nogain')) return 0; + if(target.hasJudge('lebu')) return 0; + return target.getCards('h',card=>player.getStorage('twjichou').contains(get.name(card))).reduce((p,c)=>p+(target.getUseValue(c)||1),0); + } + }, + } + }, + } + }, + twjilun:{ + audio:2, + trigger:{player:'damageEnd'}, + direct:true, + content:function(){ + 'step 0' + var num=Math.min(Math.max(1,player.getStorage('twjichou').length),5); + event.num=num; + var choices=['选项一']; + var choiceList=['摸'+get.cnNumber(num)+'张牌','视为使用一张在〖急筹〗记录内且不在〖机论〗记录内的普通锦囊牌']; + if((!player.getStorage('twjichou').length)||player.getStorage('twjichou').filter(name=>{ + return !player.getStorage('twjilun').contains(name)&&player.hasUseTarget({name:name}); + }).length==0) + choiceList[1]=''+choiceList[1]+''; + else choices.push('选项二'); + player.chooseControl(choices,'cancel2').set('choiceList',choiceList).set('prompt',get.prompt('twjilun')).set('ai',()=>{ + if(_status.event.choiceList.length==1||!player.getStorage('twjichou').length) return 0; + var val=_status.event.num>3?Math.min(1.5,1+(_status.event.num-3)*0.1):1; + for(var name of player.getStorage('twjichou')){ + if(player.getStorage('twjilun').contains(name)) continue; + if(player.getUseValue({name:name})>4*val) return 1; + } + return 0; + }).set('num',num); + 'step 1' + if(result.control!='cancel2'){ + if(result.control=='选项一'){ + player.logSkill('twjilun'); + player.draw(num); + event.finish(); + } + else{ + var list=[]; + for(var name of player.getStorage('twjichou')){ + if(!player.getStorage('twjilun').contains(name)){ + list.push(['锦囊','',name]); + } + } + player.chooseButton(['###机论###
    是否视为使用一张〖急筹〗已记录的普通锦囊牌?
    ',[list,'vcard']]).set('filterButton',button=>{ + return _status.event.player.hasUseTarget({name:button.link[2]}); + }).set('ai',button=>{ + return _status.event.getParent().player.getUseValue({name:button.link[2]},null,true); + }); + } + } else event.finish(); + 'step 2' + if(result.bool){ + var card={name:result.links[0][2],isCard:true}; + player.chooseUseTarget(card,true).set('logSkill','twjilun'); + player.markAuto('twjilun',[card.name]); + player.syncStorage('twjilun'); + } else event.goto(0); + }, + marktext:'论', + intro:{ + markcount:function(storage,player){ + if(storage&&storage.length) return storage.length; + return 0; + }, + content:'已记录牌名:$', + }, + ai:{ + maixie:true, + maixie_defend:true, + threaten:0.7, + } + }, + //蹇硕 + twkunsi:{ + audio:2, + enable:'phaseUse', + onremove:true, + derivation:'twlinglu', + filter:function(event,player){ + return game.hasPlayer(function(current){ + return player.canUse({name:'sha',isCard:true},current,false)&¤t!=player&&!player.getStorage('twkunsi').contains(current); + }); + }, + filterTarget:function(card,player,target){ + return player.canUse({name:'sha',isCard:true},target,false)&&target!=player&&!player.getStorage('twkunsi').contains(target); + }, + content:function(){ + 'step 0' + player.markAuto('twkunsi',[target]); + player.storage.twkunsi.sortBySeat(); + player.markSkill('twkunsi'); + player.useCard({name:'sha',isCard:true},target,false).animate=false; + 'step 1' + if(!player.hasHistory('sourceDamage',function(evt){ + var card=evt.card; + if(!card||card.name!='sha') return false; + var evtx=evt.getParent('useCard'); + return evtx.card==card&&evtx.getParent()==event; + })){ + player.line(target); + target.markAuto('twlinglu',[player]); + target.addAdditionalSkill('twkunsi_temp','twlinglu'); + player.markAuto('twkunsi_clear',[target]); + player.addTempSkill('twkunsi_clear',{player:'phaseBegin'}); + } + }, + intro:{content:'已对$发动过〖困兕〗'}, + ai:{ + order:function(){ + return get.order({name:'sha'})-0.1; + }, + expose:0.2, + result:{ + target:function(player,target){ + if(target.countCards('h')<=target.hp&&!target.mayHaveShan()&&get.effect(target,{name:'sha',isCard:true},player,player)>0) return -1; + else if(target.countCards('h')>target.hp&&target.hp>2&&target.hasShan()) return 1; + return 0; + }, + }, + }, + subSkill:{ + clear:{ + forced:true, + onremove:function(player,skill){ + var targets=player.getStorage(skill); + for(var target of targets){ + if(target.isIn()){ + target.removeAdditionalSkill('twkunsi_temp'); + } + } + }, + }, + }, + }, + twlinglu:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player; + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('twlinglu'),function(card,player,target){ + return target!=player; + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(target.countCards('hs')>4&&target.hp>=3) return att; + if(player.getStorage('twlinglu').contains(target)) return -2*att; + return -att; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twlinglu',target); + target.addTempSkill('twlinglu_order',{player:'phaseAfter'}); + if(!target.storage.twlinglu_settle) target.storage.twlinglu_settle=[]; + target.storage.twlinglu_settle.unshift([player,1]); + if(player.getStorage('twlinglu').contains(target)) player.chooseBool('是否令'+get.translation(target)+'于〖令戮〗失败时进行两次结算?').set('ai',function(){return true}); + else event.finish(); + } + else event.finish(); + 'step 2' + if(result.bool){ + target.storage.twlinglu_settle[0][1]++; + game.log(target,'于本次强令失败时进行两次结算'); + } + }, + ai:{expose:0.2}, + subSkill:{ + order:{ + audio:2, + trigger:{source:'damageSource'}, + group:'twlinglu_settle', + silent:true, + charlotte:true, + onremove:true, + mark:true, + marktext:'令', + intro:{ + content:function(storage,player){ + return '
  • 任务目标:于你下回合结束前造成的伤害不小于2点
  • 已造成'+player.countMark('twlinglu_order')+'点伤害'; + } + }, + content:function(){ + player.addMark('twlinglu_order',trigger.num,false); + }, + }, + settle:{ + audio:'twlinglu_order', + trigger:{player:'phaseEnd'}, + charlotte:true, + silent:true, + onremove:true, + filter:function(event,player){ + return player.getStorage('twlinglu_settle').length>0; + }, + content:function(){ + 'step 0' + var list=player.getStorage('twlinglu_settle').shift(); + var target=list[0],count=list[1]||1; + event.target=target; event.count=count; + 'step 1' + if(player.countMark('twqiangling')>=2){ + game.log(player,'成功完成了',target,'发布的','#g【令戮】','强令'); + player.popup('强令成功','wood'); + player.draw(2); + event.finish(); + } + else{ + game.log(player,'未完成',target,'发布的','#g【令戮】','强令'); + player.popup('强令失败','fire'); + } + 'step 2' + if(player.countMark('twqiangling')>=2){ + game.delayx(); + } + else{ + event.count--; + player.loseHp(); + } + 'step 3' + if(event.count>0) event.goto(2); + 'step 4' + if(player.getStorage('twlinglu_settle').length>0){ + event.goto(0); + game.delayx(); + } + }, + } + }, + }, + //马腾 + twxiongzheng:{ + audio:2, + onremove:true, + trigger:{global:'roundStart'}, + direct:true, + content:function(){ + 'step 0' + var target=player.storage.twxiongzheng_target; + delete player.storage.twxiongzheng_target; + if(!target){event.goto(4);return;} + event.target=target; + var list=[],list2=[]; + var history=target.actionHistory; + if(history.length<2){event.goto(4);return;} + for(var i=history.length-2;i>=0;i--){ + for(var evt of history[i].damage){ + if(evt.source) list.add(evt.source); + } + if(history[i].isRound) break; + } + var list2=game.filterPlayer(i=>i!=player).removeArray(list); + event.list=list; event.list2=list2; + var choiceList=[ + '视为对任意名上一轮未对'+get.translation(target)+'造成过伤害的角色使用一张【杀】', + '令任意名上一轮对'+get.translation(target)+'造成过伤害的角色摸两张牌' + ]; + var choices=[]; + if(list2.length){ + choices.push('选项一'); + choiceList[0]+='('+get.translation(list2)+')'; + } + else choiceList[0]=''+choiceList[0]+''; + if(list.length){ + choices.push('选项二'); + choiceList[1]+='('+get.translation(list)+')'; + } + else choiceList[1]=''+choiceList[1]+''; + choices.push('cancel2'); + player.chooseControl(choices).set('prompt','雄争:是否选择一项?').set('choiceList',choiceList).set('ai',function(){ + var player=_status.event.player; + var list=_status.event.getParent().list,list2=_status.event.getParent().list2; + var eff=list.map(target=>{ + if(target==player) return 0; + return get.effect(target,{name:'sha'},player,player); + }).reduce((p,c)=>p+c,0),eff2=list2.map(target=>get.effect(target,{name:'wuzhong'},player,player)).reduce((p,c)=>p+c,0); + if(_status.event.control.contains('选项二')&&eff2>eff) return '选项二'; + if(eff>0) return 0; + return 'cancel2'; + }); + 'step 1' + if(result.control=='选项一'){ + event.bool=true; + if(event.list2.length) player.chooseTarget('雄争:请选择任意名满足条件的角色,你视为依次对这些角色使用一张杀',[1,Infinity],true,function(card,player,target){ + return player.canUse('sha',target,false,false)&&_status.event.getParent().list2.contains(target); + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'sha'},player,player); + }); + else event.finish(); + } + else if(result.control=='选项二'){ + event.bool=false; + if(event.list.length) player.chooseTarget('雄争:请选择任意名满足条件的角色,这些角色摸两张牌',[1,Infinity],true,function(card,player,target){ + return _status.event.getParent().list.contains(target); + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'wuzhong'},player,player); + }); + else event.finish(); + } + else event.goto(3); + 'step 2' + result.targets.sortBySeat(); + player.logSkill('twxiongzheng',result.targets); + if(event.bool){ + for(var i of result.targets) player.useCard({name:'sha',isCard:true},i,false); + } + else game.asyncDraw(result.targets,2); + 'step 3' + if(!game.hasPlayer(function(current){ + return !player.getStorage('twxiongzheng').contains(current); + })) event.finish(); + else game.delayx(); + 'step 4' + player.chooseTarget(get.prompt('twxiongzheng'),'选择一名未选择过的角色,称为“雄争”角色',function(card,player,target){ + return !player.getStorage('twxiongzheng').contains(target); + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(game.roundNumber<=1&&player.hasUnknown()) return 0; + return -att; + }); + 'step 5' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('twxiongzheng',target); + player.markAuto('twxiongzheng',[target]); + player.storage.twxiongzheng_target=target; + player.addTempSkill('twxiongzheng_mark','roundStart'); + target.addTempSkill('twxiongzheng_threaten','roundStart'); + game.delayx(); + } + }, + subSkill:{ + mark:{ + intro:{ + content:'$参与了〖雄争〗的争斗', + onunmark:true, + }, + charlotte:true, + onremove:true, + trigger:{global:'damage'}, + firstDo:true, + direct:true, + filter:function(event,player){ + return event.player==player.storage.twxiongzheng_target&&get.itemtype(event.source)=='player'; + }, + content:function(){ + player.markAuto('twxiongzheng_mark',[trigger.source]); + }, + }, + threaten:{ + mark:true, + intro:{content:'本轮〖雄争〗目标'}, + ai:{threaten:10}, + }, + }, + }, + twluannian:{ + audio:2, + global:'twluannian_global', + unique:true, + zhuSkill:true, + subSkill:{ + global:{ + audio:'twluannian', + enable:'phaseUse', + usable:1, + forceaudio:true, + filter:function(event,player){ + var num=1; + game.countPlayer2(current=>{ + var history=current.actionHistory; + for(var i=history.length-1;i>=0;i--){ + for(var evt of history[i].useSkill){ + if(evt.skill=='twluannian_global') num++; + } + } + }); + return player.group=='qun'&&player.countCards('he')>=num&&game.hasPlayer(function(current){ + var target=current.storage.twxiongzheng_target; + return target&&target.isIn()&¤t!=player&¤t.hasZhuSkill('twluannian',player) + }) + }, + filterCard:true, + position:'he', + prompt:function(){ + var player=_status.event.player; + var num=1; + game.countPlayer2(current=>{ + var history=current.actionHistory; + for(var i=history.length-1;i>=0;i--){ + for(var evt of history[i].useSkill){ + if(evt.skill=='twluannian_global') num++; + } + } + }); + var list=game.filterPlayer(function(current){ + return current.hasZhuSkill('twluannian',player); + }).map(i=>i.storage.twxiongzheng_target).sortBySeat(); + return '弃置'+get.cnNumber(num)+'张牌,对'+get.translation(list)+(list.length>1?'中的一人':'')+'造成1点伤害'; + }, + selectCard:function(){ + var num=1; + game.countPlayer2(current=>{ + var history=current.actionHistory; + for(var i=history.length-1;i>=0;i--){ + for(var evt of history[i].useSkill){ + if(evt.skill=='twluannian_global') num++; + } + } + }); + return num; + }, + complexSelect:true, + complexCard:true, + filterTarget:function(card,player,target){ + return game.filterPlayer(function(current){ + return current.hasZhuSkill('twluannian',player); + }).map(i=>i.storage.twxiongzheng_target).contains(target); + }, + selectTarget:function(){ + return game.filterPlayer(function(current){ + return current.hasZhuSkill('twluannian',_status.event.player); + }).map(i=>i.storage.twxiongzheng_target).filter(i=>i&&i.isIn()).length>1?1:-1; + }, + check:function(card){ + return 6-get.value(card); + }, + content:function(){ + target.damage(); + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + return get.damageEffect(target,player,target); + } + }, + expose:0.25, + }, + }, + }, + }, + //鲍信 + twmutao:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target.countCards('h'); + }, + content:function(){ + 'step 0' + event.togive=target.getNext(); + var cards=target.getCards('h',{name:'sha'}); + if(!cards.length){ + game.log('但',target,'没有','#y杀','!'); + event.finish(); + } + 'step 1' + var cards=target.getCards('h',{name:'sha'}),card=cards.randomRemove(1)[0]; + target.give(card,event.togive); + if(cards.length){ + event.togive=event.togive.getNext(); + event.redo(); + } + 'step 2' + target.line(event.togive); + event.togive.damage(Math.min(3,event.togive.countCards('h',{name:'sha'})),target); + }, + ai:{ + order:10, + result:{ + target:function(player,target){ + var num=0,numx=target.countCards('h',{name:'sha'}),targetx=target; + for(var i=0; i0&&att2<0) num=0.25; + if(att1<0&&att2<0) num=4; + return att1*num*numx*(targetx.countCards('h',{name:'sha'})+1); + }, + }, + }, + }, + twyimou:{ + audio:2, + trigger:{global:'damageEnd'}, + filter:function(event,player){ + return event.player.isAlive()&&get.distance(player,event.player)<=1; + }, + logTarget:'player', + check:function(event,player){ + return get.attitude(player,event.player)>0; + }, + content:function(){ + 'step 0' + var target=get.translation(trigger.player); + var choiceList=[ + '令'+target+'获得牌堆里的一张【杀】', + '令'+target+'将一张牌交给另一名角色,然后'+target+'摸两张牌', + '背水!依次执行以上所有选项,并将所有手牌交给'+target, + ]; + var list=['选项一']; + if(trigger.player.countCards('h')) list.push('选项二'); + else choiceList[1]=''+choiceList[1]+''; + if(player.countCards('h')&&trigger.player!=player) list.push('背水!'); + else choiceList[2]=''+choiceList[2]+''; + player.chooseControl(list).set('prompt','毅谋:请选择一项').set('choiceList',choiceList).set('ai',function(){ + var evt=_status.event.getTrigger(),list=_status.event.list; + var player=_status.event.player; + var target=evt.player; + if((target.hp>=target.countCards('h')+2||target==player)&&list.contains('背水!')) return '背水!'; + if(target.countCards('h')&&list.contains('选项二')) return '选项二'; + return '选项一'; + }).set('list',list); + 'step 1' + if(result.control=='背水!'&&player!=trigger.player) player.gain(player.getCards('h'),trigger.player); + if(result.control!='选项二'){ + var card=get.cardPile2(function(card){ + return card.name=='sha'; + }); + if(card) trigger.player.gain(card,'gain2'); + else game.log('但牌堆里已经没有','#y杀','了!'); + if(result.control=='选项一') event.finish(); + } + if(result.control!='选项一'){ + if(trigger.player.countCards('h')) trigger.player.chooseCardTarget({ + prompt:'将一张手牌交给另一名其他角色并摸两张牌', + filterCard:true, + forced:true, + filterTarget:lib.filter.notMe, + ai1:function(card){ + return 1/Math.max(0.1,get.value(card)); + }, + ai2:function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(target.hasSkillTag('nogain')) att/=9; + return 4+att; + }, + }); + else event.finish(); + } + 'step 2' + var target=result.targets[0]; + trigger.player.line(target); + trigger.player.give(result.cards,target); + trigger.player.draw(2); + }, + ai:{expose:0.3}, + }, + //刘夫人 + twzhuidu:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&¤t.isDamaged(); + }); + }, + filterTarget:function(card,player,target){ + if(player==target) return false; + return target.isDamaged(); + }, + chooseButton:{ + dialog:function(event,player){ + var name=get.translation(event.result.targets[0]); + var dialog=ui.create.dialog('追妒:选择一项','hidden'); + dialog.add([[ + ['damage','对'+name+'造成1点伤害'], + ['discard','弃置'+name+'装备区里的一张牌'], + ['both','背水!若该角色为女性,弃置一张牌,然后依次执行以上所有选项'], + ],'textbutton']); + return dialog; + }, + filter:function(button,player){ + var target=_status.event.getParent().result.targets[0]; + var link=button.link; + if(link=='damage') return true; + if(link=='discard') return target.countCards('e'); + return target.hasSex('female')&&player.countDiscardableCards(player,'he')>0; + }, + check:function(button){ + switch (button.link){ + case 'damage': + return 10; + case 'discard': + return 1; + case 'both': + return 15; + } + }, + backup:function(links){ + var backup={ + target:_status.event.result.targets[0], + choice:links[0], + filterTarget:function(card,player,target){ + return target==lib.skill.twzhuidu_backup.target; + }, + selectTarget:-1, + content:function(){ + var target=lib.skill.twzhuidu_backup.target; + var choice=lib.skill.twzhuidu_backup.choice; + if(choice!='discard') target.damage(); + if(choice!='damage') player.discardPlayerCard(target,'e',true); + } + } + if(links[0]=='both'){ + backup.filterCard=true; + backup.position='he'; + } + return backup; + }, + prompt:function(links){ + var name=get.translation(_status.event.result.targets[0]); + switch (links[0]){ + case 'damage': + return '对'+name+'造成1点伤害'; + case 'discard': + return '弃置'+name+'装备区里的一张牌'; + case 'both': + return '背水!弃置一张牌,然后对'+name+'造成1点伤害并弃置其装备区里的一张牌'; + } + }, + }, + subSkill:{ + backup:{}, + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + if(target.hasSex('female')&&target.countCards('e')&&player.countCards('he')) return -2; + return -1; + }, + }, + }, + }, + twshigong:{ + audio:2, + trigger:{player:'dying'}, + filter:function(event,player){ + var target=_status.currentPhase; + return player.hp<=0&&target&&target.isIn()&&target!=player; + }, + skillAnimation:true, + animationColor:'gray', + limited:true, + logTarget:function(event,player){ + return _status.currentPhase; + }, + content:function(){ + 'step 0' + player.awakenSkill('twshigong'); + var target=_status.currentPhase; + if(target.hp<=0) event._result={bool:false}; + else target.chooseToDiscard('h',target.hp,get.translation(player)+'对你发动了【示恭】,是否弃置'+get.cnNumber(target.hp)+'张手牌?','若如此做,其将体力回复至1点;或者点击“取消”加1点体力上限并回复1点体力,摸一张牌,然后其将体力回复至体力上限').set('ai',card=>{ + if(!_status.event.goon) return 0; + return 7-get.value(card); + }).set('goon',get.attitude(target,player)>=0); + 'step 1' + var target=_status.currentPhase; + if(result.bool){ + target.gainMaxHp(); + target.recover(); + target.draw(); + var num=player.maxHp-player.hp; + if(num>0) player.recover(num); + } + else{ + var num=1-player.hp; + if(num>0) player.recover(num); + } + }, + }, + //王凌 + twmibei:{ + audio:'mibei', + trigger:{player:'useCardAfter'}, + group:['twmibei_mark','twmibei_fail'], + forced:true, + direct:true, + dutySkill:true, + derivation:'twmouli', + filter:function(event,player){ + var map={basic:0,trick:0,equip:0}; + for(var name of player.getStorage('twmibei')){ + var type=get.type2(name); + if(typeof map[type]=='number') map[type]++; + } + for(var i in map){ + if(map[i]<2) return false; + } + return true; + }, + content:function(){ + player.awakenSkill('twmibei'); + player.logSkill('twmibei_achieve'); + game.log(player,'成功完成使命'); + player.addSkillLog('twmouli'); + }, + intro:{content:'已使用牌名:$'}, + subSkill:{ + achieve:{ + audio:'mibei1', + skillAnimation:true, + animationColor:'water', + }, + mark:{ + trigger:{player:'useCard1'}, + filter:function(event,player){ + return !player.getStorage('twmibei').contains(event.card.name); + }, + charlotte:true, + forced:true, + silent:true, + dutySkill:true, + content:function(){ + player.markAuto('twmibei',[trigger.card.name]); + }, + }, + fail:{ + audio:'mibei2', + trigger:{player:'phaseUseEnd'}, + forced:true, + filter:function(event,player){ + return !player.getHistory('useCard').length; + }, + content:function(){ + game.log(player,'使命失败'); + delete player.storage.twmibei; + player.addTempSkill('twmibei_less'); + player.addMark('twmibei_less',1,false); + }, + }, + less:{ + charlotte:true, + marktext:'缚', + intro:{content:'本回合手牌上限-#'}, + mod:{ + maxHandcard:function(player,num){ + return num-player.countMark('twmibei_less'); + }, + }, + }, + }, + }, + twxingqi:{ + audio:'xingqi', + trigger:{player:'phaseZhunbeiBegin'}, + filter:function(event,player){ + var num=0; + game.countPlayer(function(current){ + num+=current.countCards('ej'); + }); + return num>player.hp; + }, + forced:true, + juexingji:true, + skillAnimation:true, + animationColor:'thunder', + content:function(){ + player.awakenSkill('twxingqi'); + player.recover(); + if(!player.awakenedSkills.contains('twmibei')){ + var list=['basic','equip','trick'],cards=[]; + for(var i of list){ + var card=get.cardPile2(function(card){ + return get.type(card)==i; + }); + if(card) cards.push(card); + } + if(cards.length) player.gain(cards,'gain2'); + } + else player.addSkill('twxingqi_range'); + }, + subSkill:{ + range:{ + charlotte:true, + mark:true, + marktext:'启', + mod:{ + targetInRange:()=>true, + }, + intro:{content:'使用牌无距离限制'}, + }, + }, + }, + twmouli:{ + audio:'mouli', + enable:'chooseToUse', + filter:function(event,player){ + if(event.type=='wuxie') return false; + if(player.hasSkill('tw_mouli_used')) return false; + if(!Array.isArray(event.twmouli)) return false; + for(var card of event.twmouli){ + if(event.filterCard(card,player,event)) return true; + } + return false; + }, + onChooseToUse:function(event){ + if(game.online||!event.player.hasSkill('twmouli')) return; + var cards=[]; + for(var i of ui.cardPile.childNodes){ + if(get.type(i)=='basic') cards.push(i); + } + event.set('twmouli',cards); + }, + chooseButton:{ + dialog:function(event,player){ + var dialog=ui.create.dialog('谋立','hidden'); + if(event.twmouli&&event.twmouli.length) dialog.add(event.twmouli); + else dialog.addText('牌堆里没有基本牌'); + return dialog; + }, + filter:function(button,player){ + var evt=_status.event.getParent(),card=button.link; + if(evt&&evt.filterCard) return evt.filterCard(card,player,evt); + return false; + }, + check:function(button){ + var player=_status.event.player,card=button.link; + if(_status.event.type!='phase') return 1; + if(_status.event.dying) return get.attitude(player,_status.event.dying); + if(card.name=='jiu') return player.getUseValue(card); + return player.getUseValue(card)/4; + }, + backup:function(links,player){ + return { + audio:'mouli', + filterCard:()=>false, + selectCard:-1, + viewAs:{name:links[0].name,isCard:true,cards:[links[0]]}, + popname:true, + precontent:function(){ + player.logSkill('twmouli'); + player.addTempSkill('twmouli_used'); + delete event.result.skill; + var name=event.result.card.name; + event.result.cards=event.result.card.cards; + event.result.card=get.autoViewAs(event.result.cards[0]); + event.result.card.name=name; + var next=game.createEvent('twmouli_update'); + event.next.remove(next); + event.getParent().after.push(next); + next.setContent(function(){game.updateRoundNumber()}); + }, + } + }, + prompt:function(links,player){ + return '使用牌堆中的'+get.translation(links); + }, + }, + hiddenCard:function(player,name){ + return get.type(name)=='basic'&&!player.getStat('skill').twmouli; + }, + subSkill:{ + used:{charlotte:true}, + }, + ai:{ + effect:{ + target:function(card,player,target,effect){ + if(get.tag(card,'respondShan')) return 0.7; + if(get.tag(card,'respondSha')) return 0.7; + }, + }, + order:11, + respondSha:true, + respondShan:true, + fireAttack:true, + skillTagFilter:function(player,tag,arg){ + if(arg=='respond') return false; + var list=[]; + for(var i of ui.cardPile.childNodes){ + if(get.type(i,player)=='basic'&&!list.contains(i.name)) list.push(i.name); + } + if(tag=='respondSha') return list.contains('sha'); + if(tag=='respondShan') return list.contains('shan'); + return !player.getStat('skill').twmouli; + }, + result:{ + player:function(player){ + if(_status.event.dying) return get.attitude(player,_status.event.dying); + return 1; + }, + }, + } + }, + //诸葛果 + twqirang:{ + audio:'qirang', + trigger:{player:'equipEnd'}, + frequent:true, + content:function(){ + var card=get.cardPile(function(card){ + return get.type2(card)=='trick'; + }); + if(card) { + player.gain(card,'gain2').gaintag.add('twqirang'); + player.addTempSkill('twqirang_use'); + player.addTempSkill('twqirang_clear',['phaseZhunbeiAfter','phaseDrawAfter','phaseUseAfter','phaseDiscardAfter','phaseJieshuAfter','phaseAfter']); + } + + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3]; + } + }, + }, + subSkill:{ + clear:{ + charlotte:true, + onremove:function(player){ + player.removeGaintag('twqirang'); + }, + }, + use:{ + audio:'qirang', + trigger:{player:'useCard2'}, + forced:true, + filter:function(event,player){ + if(get.type2(event.card)!='trick') return false; + if(!player.hasHistory('lose',function(evt){ + if(evt.getParent()!=event) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('twqirang')) return true; + } + return false; + })) return false; + return true; + }, + content:function(){ + 'step 0' + game.log(trigger.card,'不可被响应'); + trigger.directHit.addArray(game.players); + var info=get.info(trigger.card); + if(info.allowMultiple==false) event.finish(); + else if(trigger.targets&&!info.multitarget){ + if(!game.hasPlayer(function(current){ + return !trigger.targets.contains(current)&&lib.filter.targetEnabled2(trigger.card,player,current); + })) event.finish(); + } + else event.finish(); + 'step 1' + var prompt2='为'+get.translation(trigger.card)+'增加或减少一个目标' + player.chooseTarget(get.prompt('twqirang'),function(card,player,target){ + var player=_status.event.player; + if(_status.event.targets.contains(target)) return true; + return lib.filter.targetEnabled2(_status.event.card,player,target); + }).set('prompt2',prompt2).set('ai',function(target){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + return get.effect(target,trigger.card,player,player)*(_status.event.targets.contains(target)?-1:1); + }).set('targets',trigger.targets).set('card',trigger.card); + 'step 2' + if(result.bool){ + if(!event.isMine()&&!event.isOnline()) game.delayx(); + event.targets=result.targets; + } + else event.finish(); + 'step 3' + if(event.targets){ + player.line(event.targets); + if(trigger.targets.contains(event.targets[0])) trigger.targets.removeArray(event.targets); + else trigger.targets.addArray(event.targets); + } + }, + mod:{ + targetInRange:function(card,player,target){ + if(!card.cards) return; + for(var i of card.cards){ + if(i.hasGaintag('twqirang')) return true; + } + }, + }, + }, + }, + }, + twyuhua:{ + audio:'yuhua', + frequent:true, + trigger:{ + player:'loseAfter', + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], + }, + filter:function(event,player){ + if(player==_status.currentPhase) return false; + if(event.name=='gain'&&player==event.player) return false; + var evt=event.getl(player); + if(!evt||!evt.cards2||!evt.cards2.length) return false; + for(var i of evt.cards2){ + if(get.type(i,player)!='basic') return true; + } + return false; + }, + content:function(){ + 'step 0' + var num=0,evt=trigger.getl(player); + for(var i of evt.cards2){ + if(get.type(i,player)!='basic'&&num<5) num++; + } + player.chooseToGuanxing(num); + player.chooseBool('羽化:是否摸'+get.cnNumber(num)+'张牌?').set('frequentSkill','twyuhua'); + event.num=num; + 'step 1' + if(result.bool) player.draw(num); + }, + mod:{ + ignoredHandcard:function(card,player){ + if(get.type(card)!='basic') return true; + }, + cardDiscardable:function(card,player,name){ + if(name=='phaseDiscard'&&get.type(card)!='basic') return false; + }, + }, + }, + //樊稠 + twxingluan:{ + audio:'xinfu_xingluan', + trigger:{player:'phaseJieshuBegin'}, + frequent:true, + content:function(){ + 'step 0' + event.cards=game.cardsGotoOrdering(get.cards(6)).cards; + event.list=[]; + event.videoId=lib.status.videoId++; + game.broadcastAll(function(player,id,cards){ + var str; + if(player==game.me&&!_status.auto) str='兴乱:选择分配一种类别的牌'; + else str='兴乱'; + var dialog=ui.create.dialog(str,cards); + dialog.videoId=id; + },player,event.videoId,event.cards); + event.time=get.utc(); + game.addVideo('showCards',player,['兴乱',get.cardsInfo(event.cards)]); + game.addVideo('delay',null,2); + 'step 1' + var list=['basic','trick','equip'].filter(type=>cards.some(card=>get.type2(card)==type)); + player.chooseControl(list).set('ai',function(){ + var listy=['basic','trick','equip'],listz=[0,0,0]; + var num=0,numx=0,num2=0,numx2=0; + for(var i of _status.event.getParent().cards){ + for(var j=0;j<2;j++){ + if(get.type2(i)==listy[j]) listz[j]++; + } + } + for(var k=0;k<2;k++){ + if(listz[k]>num){ + num=listz[k]; + numx=k; + } + if(listz[k]2) return listy[numx2]; + return listy[numx]; + }); + 'step 2' + game.broadcastAll('closeDialog',event.videoId); + event.cardsx=[]; + var type=result.control; + for(var j of cards){ + if(type==get.type2(j)) event.cardsx.push(j); + } + var time=1000-(get.utc()-event.time); + if(time>0) game.delay(0,time); + player.$gain2(event.cardsx,false); + game.delayx(); + if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true}); + event.given_map={}; + event.num=0; + 'step 3' + if(event.cardsx.length>1){ + player.chooseCardButton('兴乱:请选择要分配的牌',true,event.cardsx,[1,Math.min(3,event.cardsx.length)]).set('ai',function(button){ + if(ui.selected.buttons.length==0) return 1; + return 0; + }); + } + else if(event.cardsx.length==1){ + event._result={links:event.cardsx.slice(0),bool:true}; + } + else{ + event.goto(6); + } + 'step 4' + if(result.bool){ + var cards=result.links; + event.togive=cards.slice(0); + player.chooseTarget('选择获得'+get.translation(cards)+'的角色',event.cardsx.length==1,(card,player,target)=>{ + var map=_status.event.getParent().given_map; + var togive=_status.event.getParent().togive; + return (map[target.playerid]||[]).length+togive.length<=3; + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + var map=_status.event.getParent().given_map; + var togive=_status.event.getParent().togive; + var num=(map[player.playerid]||[]).length,num2=(map[target.playerid]||[]).length; + var value=_status.event.value,eff=num2?0:get.effect(target,{name:'losehp'},player,player); + if(num2+togive.length>=num&&player!=target) return value*Math.sign(att)+eff+1000; + else{ + if(value<0) return -att+1000; + else if(att>0) return 1.5*att/(1+target.countCards('h'))+(player==target?eff/3:0)+1000; + else return att/100+1000; + } + }).set('value',cards.reduce((p,c)=>p+get.value(c,player,'raw'),0)); + } + 'step 5' + if(result.bool){ + event.cardsx.removeArray(event.togive); + if(result.targets.length){ + var id=result.targets[0].playerid,map=event.given_map; + if(!map[id]) map[id]=[]; + map[id].addArray(event.togive); + } + if(event.cardsx.length>0) event.goto(3); + } + else event.goto(3); + 'step 6' + if(_status.connectMode){ + game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()}); + } + var list=[]; + for(var i in event.given_map){ + var source=(_status.connectMode?lib.playerOL:game.playerMap)[i]; + if(player==source) event.num+=event.given_map[i].length; + player.line(source,'green'); + game.log(source,'获得了',event.given_map[i]); + list.push([source,event.given_map[i]]); + } + game.loseAsync({ + gain_list:list, + giver:player, + animate:'gain2', + }).setContent('gaincardMultiple'); + 'step 7' + var list=[]; + for(var i in event.given_map){ + var source=(_status.connectMode?lib.playerOL:game.playerMap)[i]; + if(event.given_map[i].length>=num) list.push(source); + } + list.sortBySeat(); + player.line(list); + for(var i of list){ + i.loseHp(); + } + }, + }, + //许靖 + twboming:{ + audio:'boming', + enable:'phaseUse', + usable:2, + filter:function(event,player){ + return player.countCards('he'); + }, + filterCard:true, + position:'he', + filterTarget:lib.filter.notMe, + discard:false, + lose:false, + delay:false, + content:function(){ + player.give(cards,target); + }, + check:function(card){ + return 5-get.value(card); + }, + ai:{ + order:10, + result:{ + target:function(player,target){ + if(!ui.selected.cards.length) return 0; + var card=ui.selected.cards[0]; + if(get.attitude(player,target)<0&&player.hasSkill('twejian')){ + var dam=get.damageEffect(target,player,target); + if(dam>0) return dam; + var type=get.type(card,target),ts=target.getCards('he',function(card){ + return get.type(card)==type; + }); + if(ts.length){ + var val=get.value(ts,target); + if(val>get.value(card)) return -Math.max(1,val); + return 0; + } + } + return get.value(card,target)/1.5; + }, + }, + }, + group:'twboming_draw', + subSkill:{ + draw:{ + audio:'boming', + trigger:{player:'phaseJieshuBegin'}, + forced:true, + locked:false, + filter:function(event,player){ + return player.getHistory('lose',function(evt){ + return evt.getParent(2).name=='twboming'; + }).length>1; + }, + content:function(){ + player.draw(2); + }, + }, + }, + }, + twejian:{ + audio:'ejian', + trigger:{ + global:['gainAfter','loseAsyncAfter'] + }, + filter:function(event,player){ + if(event.name=='gain'){ + var cards=event.getg(event.player); + if(!cards.length) return false; + var cards2=event.getl(player).cards2; + for(var i of cards2){ + if(cards.contains(i)&&event.player.countCards('he',card=>{ + return card!=i&&get.type2(card)==get.type2(i); + })) return true; + } + return false; + } + else{ + if(event.type!='gain') return false; + var cards=event.getl(player).cards2; + if(!cards.length) return false; + return game.hasPlayer(current=>{ + if(current==player) return false; + var cardsx=event.getg(current); + for(var i of cardsx){ + if(cards.contains(i)&¤t.countCards('he',card=>{ + return card!=i&&get.type2(card)==get.type2(i); + })) return true; + } + return false; + }); + } + }, + check:function(event,player){ + return get.attitude(player,event.player)<0; + }, + logTarget:function(event,player){ + if(event.name=='gain') return event.player; + else{ + var cards=event.getl(player).cards2; + return game.filterPlayer(current=>{ + if(current==player) return false; + var cardsx=event.getg(current); + for(var i of cardsx){ + if(cards.contains(i)&¤t.countCards('he',card=>{ + return card!=i&&get.type2(card)==get.type2(i); + })) return true; + } + return false; + }); + } + }, + direct:true, + content:function(){ + 'step 0' + if(trigger.name=='gain') event.targets=[trigger.player]; + else{ + var cards=trigger.getl(player).cards2; + event.targets=game.filterPlayer(current=>{ + if(current==player) return false; + var cardsx=trigger.getg(current); + for(var i of cardsx){ + if(cards.contains(i)&¤t.countCards('he',card=>{ + return card!=i&&get.type2(card)==get.type2(i); + })) return true; + } + return false; + }); + } + 'step 1' + var target=event.targets.shift(); + event.target=target; + player.chooseBool(get.prompt('twejian',target),'当其他角色获得你的牌后,若其有其他与此牌类型相同的牌,你可以令其选择一项:1.受到你造成的1点伤害;2.弃置这些牌').set('ai',()=>{ + return get.attitude(player,_status.event.getParent().target)<0; + }); + 'step 2' + if(result.bool){ + player.logSkill('twejian',target); + var cards=trigger.getg(target); + event.cards=cards; + event.cardType=[]; + for(var card of cards){ + event.cardType.add(get.type(card,'trick',target)); + } + var list=['选项一','选项二']; + target.chooseControl(list).set('prompt','恶荐:请选择一项').set('choiceList',[ + '受到1点伤害', + '弃置所有除'+get.translation(cards)+'外的'+get.translation(event.cardType)+'牌', + ]).set('ai',function(){ + var player=_status.event.player; + var types=_status.event.cardType,cards=player.getCards('he',function(card){ + return types.contains(get.type2(card)); + }); + if(cards.length==1) return '选项二'; + if(cards.length>=2){ + for(var i=0; i=8) return '选项一'; + } + if(cards.length>2&&player.hp>2) return '选项一'; + if(cards.length>3) return '选项一'; + return '选项二'; + }).set('cardType',event.cardType); + } + else event.goto(4); + 'step 3' + if(result.control=='选项一') target.damage(); + else target.discard(target.getCards('he',card=>{ + return event.cardType.contains(get.type2(card))&&!cards.contains(card); + })); + 'step 4' + if(event.targets.length>0) event.goto(1); + else event.finish(); + }, + ai:{ + expose:0.3, + }, + }, + //张飞 + twxuhe:{ + audio:'retishen', + trigger:{player:'shaMiss'}, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + direct:true, + content:function(){ + 'step 0' + player.chooseToDiscard('he',get.prompt2('twxuhe',trigger.target)).set('ai',card=>{ + return 5.5-get.value(card); + }).set('logSkill',['twxuhe',trigger.target]); + 'step 1' + if(result.bool){ + trigger.target.chooseControl().set('choiceList',[ + '受到'+get.translation(player)+'对你造成的1点伤害', + '令'+get.translation(player)+'使用的下一张牌对你造成的伤害+2' + ]).set('ai',function(){ + var target=_status.event.player,player=_status.event.getParent().player; + if(target.hp<=3&&target.hp>1&&player.countCards('hs',function(card){ + return get.tag(card,'damage')&&player.canUse(card,target); + })>0) return 0; + return 1; + }); + }else event.finish(); + 'step 2' + var target=trigger.target; + switch (result.index){ + case 0: + player.line(target,'fire'); + target.damage(); + break; + case 1: + target.line(player,'fire'); + player.storage.twxuhe_damage=target; + trigger.getParent().twxuhe=true; + player.addTempSkill('twxuhe_damage'); + break; + } + }, + subSkill:{ + damage:{ + charlotte:true, + onremove:true, + mark:true, + intro:{content:'本回合使用的下一张牌对$造成伤害时,此伤害+2'}, + trigger:{ + source:'damageBegin1', + player:'useCardAfter', + }, + direct:true, + filter:function(event,player){ + if(event.name=='useCard') return !event.twxuhe; + if(!event.card) return false; + var evt=event.getParent(2); + var history=player.getHistory('useCard'); + return evt.name=='useCard'&&history[history.indexOf(evt)-1].twxuhe; + }, + content:function(){ + if(trigger.name!='useCard') trigger.num+=2; + player.removeSkill('twxuhe_damage'); + }, + } + }, + }, + //薛综 + twjiexun:{ + intro:{content:'已发动#次'}, + audio:'jiexun', + trigger:{player:'phaseJieshuBegin'}, + onremove:true, + direct:true, + derivation:['twfunanx','twjiexunx'], + content:function(){ + 'step 0' + var suits={}; + game.countPlayer(current=>{ + for(var card of current.getCards('ej')) { + if(typeof suits[get.suit(card)]!='number') suits[get.suit(card)]=0; + suits[get.suit(card)]++; + } + }); + var choices=lib.suit.slice(); + choices.push('cancel2'); + var str=lib.suit.map(suit=>{ + return get.translation(suit)+':'+get.cnNumber(suits[suit]||0)+'张' + }).join(';'); + player.chooseControl(choices).set('prompt',get.prompt('twjiexun')+'(已发动过'+get.cnNumber(player.countMark('twjiexun'))+'次)').set('ai',function(){ + var player=_status.event.player; + var map={}; + game.countPlayer(current=>{ + for(var card of current.getCards('ej')) { + if(typeof map[get.suit(card)]!='number') map[get.suit(card)]=0; + map[get.suit(card)]++; + } + }); + for(var suit in map) map[suit]=Math.abs(map[suit]); + var bool=game.hasPlayer(current=>get.attitude(player,current)>0&&player!=current); + var list=lib.suit.slice().sort((a,b)=>(bool?1:-1)*((map[b]||0)-(map[a]||0))); + debugger; + if(bool&&list[0]>0||!bool||player.hasMark('twjiexun')) return list[0]; + return 'cancel2'; + }).set('prompt2',get.skillInfoTranslation('twjiexun',player)+'
    '+str); + 'step 1' + if(result.control!='cancel2'){ + var suit=result.control; + event.suit=suit; + var num1=game.countPlayer(function(current){ + return current.countCards('ej',{suit:suit}); + }); + var num2=player.countMark('twjiexun'); + event.num1=num1; + event.num2=num2; + var str='令一名其他角色摸'+get.cnNumber(num1)+'张牌'; + if(num2) str+=',然后弃置'+get.cnNumber(num2)+'张牌'; + player.chooseTarget('请选择【诫训】的目标',str,lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + return _status.event.eff*get.sgn(att)+att/114514; + }).set('eff',num1>=num2&&num1>0?1:-1); + } + else event.finish(); + 'step 2' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twjiexun',target); + if(player.hasMark('twjiexun')||event.num1) player.addExpose(0.2); + player.popup(event.suit); + game.log(player,'选择了','#g'+get.translation(event.suit),'花色'); + player.addMark('twjiexun',1,false); + if(event.num1) target.draw(event.num1); + } + else event.finish(); + 'step 3' + if(event.num2) target.chooseToDiscard(event.num2,true,'he'); + else event.finish(); + 'step 4' + if(result.bool&&result.autochoose&&result.cards.length==result.rawcards.length&&!player.hasSkill('funan_jiexun')){ + player.chooseControl().set('choiceList',[ + '摸'+get.cnNumber(event.num2)+'张牌,将【诫训】的发动次数归零', + '修改【复难】和【诫训】' + ]).set('ai',()=>_status.event.choice).set('prompt','诫训:选择一项').set('choice',event.num2>=4?0:(event.num2<=1?1:[0,1].randomGet())); + } + else event.finish(); + 'step 5' + if(result.index==0){ + player.draw(event.num2); + player.removeMark('twjiexun',player.countMark('twjiexun'),false); + game.log(player,'归零了','#g【诫训】','的发动次数'); + } + else { + game.log(player,'修改了','#g【复难】','和','#g【诫训】'); + player.addSkill('funan_jiexun'); + } + }, + }, + //张宁 + twxingzhui:{ + audio:2, + enable:'phaseUse', + usable:1, + mahouSkill:true, + filter:function(event,player){ + return !player.hasSkill('twxingzhui_mahou'); + }, + content:function(){ + 'step 0' + player.loseHp(); + player.chooseControl('1回合','2回合','3回合').set('prompt','请选择施法时长').set('ai',function(){ + return 2; + }); + 'step 1' + player.storage.twxingzhui_mahou=[result.index+1,result.index+1]; + player.addTempSkill('twxingzhui_mahou',{player:'die'}); + }, + ai:{ + order:2, + result:{ + player:function(player,target){ + if(!player.hasFriend()) return 0; + if(player.hp>1) return 1; + return 0; + }, + }, + }, + subSkill:{ + mahou:{ + trigger:{global:'phaseEnd'}, + forced:true, + popup:false, + charlotte:true, + content:function(){ + 'step 0' + var list=player.storage.twxingzhui_mahou; + list[1]--; + if(list[1]==0){ + game.log(player,'的','#g星坠','魔法生效'); + player.logSkill('twxingzhui'); + var num=list[0]; + event.num=num; + var cards=game.cardsGotoOrdering(get.cards(num*2)).cards; + event.cards=cards; + player.showCards(cards,get.translation(player)+'发动了【星坠】'); + player.removeSkill('twxingzhui_mahou'); + } + else{ + game.log(player,'的','#g星坠','魔法剩余','#g'+(list[1])+'回合'); + player.markSkill('twxingzhui_mahou'); + event.finish(); + } + 'step 1' + var cards2=[]; + for(var card of event.cards){ + if(get.color(card,false)=='black') cards2.push(card); + } + if(!cards2.length) event.finish(); + else{ + event.cards2=cards2; + var str='令一名其他角色获得其中的黑色牌('+get.translation(cards2)+')'; + if(cards2.length>=event.num) str+=',然后对其造成'+get.cnNumber(event.num)+'点伤害'; + player.chooseTarget('请选择〖星坠〗的目标',str,lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player; + if(_status.event.getParent().cards2.length>=_status.event.getParent().num) return get.damageEffect(target,player,player,'thunder'); + return get.attitude(player,target); + }); + } + 'step 2' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + target.gain(event.cards2,'gain2'); + if(event.cards2.length>=num) target.damage(event.num,'thunder'); + } + }, + mark:true, + onremove:true, + marktext:'♗', + intro:{ + name:'施法:星坠', + markcount:function(storage){ + if(storage) return storage[1]; + return 0; + }, + content:function(storage){ + if(storage) return '经过'+storage[1]+'个“回合结束时”后,亮出牌堆顶的'+get.cnNumber(storage[0]*2)+'张牌并执行后续效果'; + return '未指定施法效果'; + }, + }, + }, + }, + }, + twjuchen:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&¤t.countCards('h')>player.countCards('h'); + })&&game.hasPlayer(function(current){ + return current!=player&¤t.hp>player.hp; + }); + }, + logTarget:function(event,player){ + return game.players.sortBySeat(player); + }, + content:function(){ + 'step 0' + event.num=0; + event.cards=[]; + event.targets=game.players.sortBySeat(player); + 'step 1' + var target=targets[num]; + if(target.countCards('he')) target.chooseToDiscard('he',true); + else event._result={bool:false}; + 'step 2' + if(result.bool&&Array.isArray(result.cards)) event.cards.addArray(result.cards); + event.num++; + if(event.num1) return false; + if(_status.dying.length) return false; + if(player==event.player) return false; + if(event.target.hp>=player.hp) return false; + if(!['basic','trick'].contains(get.type(event.card))) return false; + return true; + }, + usable:1, + direct:true, + content:function(){ + 'step 0' + player.chooseControl('失去体力','减体力上限','cancel2').set('prompt',get.prompt2('twjiekuang',trigger.target)).set('ai',function(card){ + if(_status.event.aisave){ + if(player.isDamaged()) return '减体力上限'; + return '失去体力'; + } + return 'cancel2'; + }).set('aisave',function(){ + var save=false; + if(get.attitude(player,trigger.target)>2){ + if(trigger.card.name=='sha'){ + if(player.countCards('h','shan')||player.getEquip(2) || + trigger.target.hp==1||player.hp>trigger.target.hp+1){ + if(!trigger.target.countCards('h','shan')||trigger.target.countCards('h'){ + return current.hasHistory('damage',evt=>evt.card==trigger.card); + })&&player.canUse(card,trigger.player,false)){ + player.useCard(card,trigger.player,false); + } + }, + }, + }, + }, + twneirao:{ + audio:2, + derivation:'twluanlve', + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + juexingji:true, + skillAnimation:true, + animationColor:'gray', + filter:function(event,player){ + return Math.max(0,player.hp)+player.maxHp<=9; + }, + content:function(){ + 'step 0' + player.awakenSkill('twneirao'); + player.removeSkill('twjiekuang'); + game.log(player,'失去了技能','#g【竭匡】'); + 'step 1' + var num=player.countCards('he'),cards=[]; + player.discard(player.getCards('he')); + for(var i=0;i=player.countMark('twluanlve'); + }, + filterCard:function(card,player){ + if(player.countMark('twluanlve')==0) return false; + return card.name=='sha'; + }, + selectCard:function(){ + var player=_status.event.player; + if(player.countMark('twluanlve')==0) return -1; + return player.countMark('twluanlve'); + }, + onChooseToUse:function(event){ + if(!game.online&&event.type=='phase'){ + var targets=[]; + game.countPlayer2(current=>{ + var history=current.getHistory('useCard'); + if(!history.length) return false; + for(var evt of history){ + if(evt.card&&evt.card.name=='shunshou'){ + targets.addArray(evt.targets); + } + } + }); + event.set('twluanlve_ban',targets); + } + }, + position:'hs', + log:false, + group:['twluanlve_directHit'], + precontent:function(){ + player.logSkill('twluanlve'); + player.addMark('twluanlve',1,false); + }, + ai:{ + order:function(){ + return get.order({name:'shunshou'})+1; + }, + }, + mod:{ + playerEnabled:function(card,player,target){ + if(!_status.event.twluanlve_ban||!Array.isArray(_status.event.twluanlve_ban)) return; + if(player.isPhaseUsing()&&card.name=='shunshou'&&card.storage&&card.storage.twluanlve&&_status.event.twluanlve_ban.contains(target)) return false; + }, + }, + subSkill:{ + directHit:{ + trigger:{player:'useCard'}, + filter:function(event,player){ + return event.card.name=='shunshou'; + }, + direct:true, + content:function(){ + trigger.directHit.addArray(game.players); + game.log(trigger.card,'不可被响应'); + }, + ai:{ + directHit_ai:true, + skillTagFilter:function(player,tag,arg){ + return arg&&arg.card&&arg.card.name=='shunshou'; + }, + }, + } + }, + }, + //冯习 + twqingkou:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return player.canUse('juedou',current,false); + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('twqingkou'),'视为对一名其他角色使用一张【决斗】',function(card,player,target){ + return player.canUse('juedou',target,false); + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'juedou'},player,player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twqingkou',target); + player.useCard({name:'juedou',isCard:true,storage:{twqingkou:true}},target,false); + player.addTempSkill('twqingkou_after'); + } + }, + subSkill:{ + after:{ + trigger:{player:'useCardAfter'}, + filter:function(event,player){ + return event.card.storage&&event.card.storage.twqingkou; + }, + charlotte:true, + direct:true, + content:function(){ + var target=trigger.targets[0]; + if(player.hasHistory('sourceDamage',function(evt){ + return evt.card==trigger.card; + })){ + player.draw(); + player.skip('phaseJudge'); + game.log(player,'跳过了','#y判定阶段'); + player.skip('phaseDiscard'); + game.log(player,'跳过了','#y弃牌阶段'); + } + if(target.hasHistory('sourceDamage',function(evt){ + return evt.card==trigger.card; + })) target.draw(); + }, + }, + }, + }, + //张既 + twdingzhen:{ + audio:2, + trigger:{global:'roundStart'}, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return get.distance(player,current)<=Math.max(0,player.hp); + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('twdingzhen'),[1,Infinity],function(card,player,target){ + return get.distance(player,target)<=player.hp; + }).set('ai',function(target){ + var player=_status.event.player; + if(target==player) return 0; + return Math.max(-get.attitude(player,target),1); + }); + 'step 1' + if(result.bool){ + result.targets.sortBySeat(); + var targets=result.targets; + event.targets=targets; + player.logSkill('twdingzhen',targets); + event.num=0; + } + else event.finish(); + 'step 2' + var target=targets[num]; + event.target=target; + target.chooseToDiscard('h',{name:'sha'},'定镇:弃置一张【杀】,或本轮你于回合内使用的第一张牌不能指定'+get.translation(player)+'为目标').set('ai',function(card){ + if(_status.event.goon) return 1; + return 0; + }).set('goon',get.attitude(target,player)<0&&player.countCards('hs')<=3&&target.countCards('hs',card=>{ + return target.hasValueTarget(card); + })>1); + 'step 3' + if(result.bool) target.addExpose(0.1); + else{ + var next=game.createEvent('twdingzhen_addSkill'); + event.next.remove(next); + trigger.after.push(next); + next.target=target; + next.player=player; + next.setContent(function(){ + target.addSkill('twdingzhen_target'); + target.markAuto('twdingzhen_target',[player]); + }) + } + 'step 4' + if(event.num0, + content:'回合内使用的第一张牌不能指定$为目标', + }, + mod:{ + playerEnabled:function(card,player,target){ + if(_status.currentPhase==player&&!player.countUsed()&&player.getStorage('twdingzhen_target').contains(target)) return false; + }, + }, + }, + }, + }, + twyouye:{ + audio:2, + trigger:{global:'phaseJieshuBegin'}, + filter:function(event,player){ + return event.player!=player&&!event.player.getHistory('sourceDamage',function(evt){ + return evt.player==player; + }).length&&player.getExpansions('twyouye').length<5; + }, + forced:true, + group:'twyouye_give', + content:function(){ + player.addToExpansion(get.cards(),'gain2').gaintag.add('twyouye'); + }, + marktext:'蓄', + intro:{ + name:'蓄(攸业)', + content:'expansion', + markcount:'expansion', + }, + onremove:function(player,skill){ + var cards=player.getExpansions(skill); + if(cards.length) player.loseToDiscardpile(cards); + }, + subSkill:{ + give:{ + audio:'twyouye', + trigger:{source:'damageSource',player:'damageEnd'}, + filter:function(event,player){ + return player.getExpansions('twyouye').length; + }, + forced:true, + content:function(){ + 'step 0' + event.boolx=_status.currentPhase&&_status.currentPhase.isIn(); + event.cards=player.getExpansions('twyouye'); + if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true}); + event.given_map={}; + 'step 1' + if(event.cards.length>1){ + player.chooseCardButton('攸业:请选择要分配的牌',true,event.cards,[1,event.cards.length]).set('ai',function(button){ + return get.value(button.link,_status.event.player); + }); + } + else if(event.cards.length==1) event._result={links:event.cards.slice(0),bool:true}; + else event.finish(); + 'step 2' + if(result.bool){ + var cards=result.links; + event.cards2=cards; + player.chooseTarget('选择一名角色获得'+get.translation(cards),function(card,player,target){ + var evt=_status.event.getParent(); + var cards=evt.cards,cards2=evt.cards2.slice(); + if(cards.removeArray(cards2).length>0||!evt.boolx) return true; + return target==_status.currentPhase; + },event.cards.length==1).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(_status.event.enemy) return Math.max(0.01,100-att); + else if(att>0) return Math.max(0.1,att/(1+target.countCards('h'))); + else return Math.max(0.01,(100-att)/10); + }).set('enemy',get.value(cards[0],player,'raw')<0); + } + 'step 3' + if(result.bool){ + var cards=event.cards2; + event.cards.removeArray(cards); + event.togive=cards.slice(0); + if(result.targets.length){ + if(result.targets[0]==_status.currentPhase) event.boolx=false; + var id=result.targets[0].playerid,map=event.given_map; + if(!map[id]) map[id]=[]; + map[id].addArray(event.togive); + } + if(event.cards.length>0) event.goto(1); + } + else event.goto(1); + 'step 4' + if(_status.connectMode) game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()}); + var list=[]; + for(var i in event.given_map){ + var source=(_status.connectMode?lib.playerOL:game.playerMap)[i]; + player.line(source,'green'); + list.push([source,event.given_map[i]]); + } + game.loseAsync({ + gain_list:list, + giver:player, + animate:'gain2', + }).setContent('gaincardMultiple'); + }, + }, + }, + }, + //荀谌 + twweipo:{ + audio:'mjweipo', + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.countCards('he'); + }); + }, + filterTarget:function(card,player,target){ + return target.countCards('he'); + }, + content:function(){ + 'step 0' + target.chooseToDiscard('he',true); + 'step 1' + var list=['binglinchengxiax']; + list.addArray(get.zhinangs()); + player.chooseButton(['危迫:令其获得一张智囊牌或【兵临城下】',[list,'vcard']],true).set('ai',function(button){ + return _status.event.getParent().target.getUseValue({name:button.link[2]}); + }); + 'step 2' + if(result.bool){ + var name=result.links[0][2],card=false; + game.log(player,'选择了','#y'+get.translation(name)); + if(name=='binglinchengxiax'){ + if(!_status.binglinchengxiax){ + _status.binglinchengxiax=[ + ['spade',7], + ['club',7], + ['club',13], + ]; + game.broadcastAll(function(){lib.inpile.add('binglinchengxiax')}); + } + if(_status.binglinchengxiax.length){ + var info=_status.binglinchengxiax.randomRemove(); + card=game.createCard2('binglinchengxiax',info[0],info[1]); + } + } + if(!card) card=get.cardPile(name); + if(card) target.gain(card,'gain2'); + } + }, + ai:{ + order:7.1, + result:{ + target:function(player,target){ + if(target==player) return player.countCards('he')?10:0.01; + return (target.countCards('he')+0.5)*Math.sqrt(Math.max(1,target.hp)); + }, + }, + }, + }, + twmouzhi:{ + audio:'mjmouzhi', + intro:{content:'上次受到伤害的颜色:$'}, + trigger:{player:'damageBegin4'}, + forced:true, + group:'twmouzhi_mark', + filter:function(event,player){ + if(!event.card||get.color(event.card)=='none') return false; + var all=player.getAllHistory('damage'); + if(!all.length) return false; + return all[all.length-1].card&&get.color(all[all.length-1].card)==get.color(event.card); + }, + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + var color=get.color(card); + if(color=='none') return; + var all=target.getAllHistory('damage'); + if(!all.length||!all[all.length-1].card) return; + if(get.color(all[all.length-1].card)==color) return 'zerotarget'; + } + }, + }, + }, + subSkill:{ + mark:{ + trigger:{player:'damage'}, + silent:true, + firstDo:true, + content:function(){ + if(!trigger.card||get.color(trigger.card)=='none') player.unmarkSkill('twmouzhi'); + else { + player.markSkill('twmouzhi'); + player.storage.twmouzhi=get.color(trigger.card); + game.broadcastAll(function(player,color){ + if(player.marks.twmouzhi){ + player.marks.twmouzhi.firstChild.innerHTML=''; + } + player.storage.twmouzhi=color; + },player,player.storage.twmouzhi) + } + }, + }, + }, + }, + //蒋钦 + twshangyi:{ + audio:'shangyi', + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he')&&game.hasPlayer(function(current){ + return current!=player&¤t.countCards('h'); + }); + }, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h'); + }, + filterCard:true, + position:'he', + content:function(){ + 'step 0' + target.viewHandcards(player); + var chooseButton; + if(player.countCards('h')) chooseButton=player.chooseButton([1,2],['###尚义###
    选择'+get.translation(target)+'的一张手牌以弃置,或选择你与其的各一张牌以交换
    ','
    '+get.translation(target)+'的手牌
    ',target.getCards('h'),'
    你的手牌
    ',player.getCards('h')],true); + else chooseButton=player.chooseButton(['###尚义###
    弃置'+get.translation(target)+'的一张手牌
    ','
    '+get.translation(target)+'的手牌
    ',target.getCards('h')],true); + chooseButton.set('target',target); + chooseButton.set('ai',function(button){ + var player=_status.event.player,owner=get.owner(button.link),color=get.color(button.link,owner),value=get.value(button.link,owner); + if(player.countCards('h')){ + if(!ui.selected.buttons.length){ + if(player.countCards('h',function(card){ + return get.color(card,player)=='red'&&get.value(card)<6; + })&&color=='red'&&value>7) return value*3; + return value; + } + else { + if(get.value(ui.selected.buttons[0].link)<4) return 0; + return 4+(get.color(ui.selected.buttons[0].link,get.owner(ui.selected.buttons[0].link))=='red'?3:1)-value; + } + } + else { + if(color=='black') return value*1.5; + return value; + } + }); + chooseButton.set('filterButton',function(button){ + if(get.itemtype(button.link)!='card') return false; + if(!ui.selected.buttons.length&&get.owner(button.link)!=_status.event.target) return false; + if(ui.selected.buttons.length&&get.owner(ui.selected.buttons[0].link)==get.owner(button.link)) return false; + return true; + }); + 'step 1' + if(result.bool){ + if(result.links.length==1){ + target.discard(result.links[0]).discarder=player; + if(get.color(result.links[0],target)!='black') event.finish(); + } + else { + var links=result.links.slice(); + if(get.owner(links[0])!=player) links.reverse(); + var card1=links[0],card2=links[1]; + player.swapHandcards(target,[card1],[card2]); + if(get.color(card1,player)!='red'||get.color(card2,target)!='red') event.finish(); + } + } + else event.finish(); + 'step 2' + player.draw(); + }, + ai:{ + order:10, + result:{target:-1}, + }, + }, + twxiangyu:{ + group:'twxiangyu_lose', + shaRelated:true, + audio:'zniaoxiang', + trigger:{player:'useCardToPlayered'}, + filter:function(event,player){ + return event.card.name=='sha'&&get.distance(player,event.player){ + return current.getHistory('lose').length; + }); + if(targets.length){ + player.addTempSkill('twxiangyu_range'); + player.markAuto('twxiangyu_range',targets); + } + } + }, + content:function(){ + var id=trigger.target.playerid; + var map=trigger.getParent().customArgs; + if(!map[id]) map[id]={}; + if(typeof map[id].shanRequired=='number'){ + map[id].shanRequired++; + } + else map[id].shanRequired=2; + }, + subSkill:{ + lose:{ + trigger:{ + global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], + }, + filter:function(event,player){ + return game.hasPlayer(function(current){ + if(player.getStorage('twxiangyu_range').contains(current)) return false; + var evt=event.getl(current); + return evt&&evt.cards2&&evt.cards2.length>0; + }); + }, + silent:true, + charlotte:true, + content:function(){ + player.addTempSkill('twxiangyu_range'); + player.markAuto('twxiangyu_range',game.filterPlayer(function(current){ + if(player.getStorage('twxiangyu_range').contains(current)) return false; + var evt=trigger.getl(current); + return evt&&evt.cards2&&evt.cards2.length>0; + })); + player.syncStorage('twxiangyu_range'); + }, + }, + range:{ + marktext:'羽', + intro:{ + content:function(storage,player){ + var num=storage?storage.length:0; + return '攻击范围+'+num; + }, + }, + mod:{ + attackRange:function(player,num){ + return num+player.getStorage('twxiangyu_range').length; + }, + }, + onremove:true, + }, + }, + }, + //顾雍 + twgyshenxing:{ + audio:'xinshenxing', + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('he')>=Math.min(2,player.countMark('twgyshenxing')); + }, + selectCard:function(){ + return Math.min(2,_status.event.player.countMark('twgyshenxing')); + }, + prompt:function(){ + return '弃置'+get.cnNumber(Math.min(2,_status.event.player.countMark('twgyshenxing')))+'张牌并摸一张牌'; + }, + check:function(card){ + var num=_status.event.player.countCards('h',{color:get.color(card)}); + if(get.position(card)=='e') num++; + return (Math.max(4,7.1-num)-get.value(card))/num; + }, + filterCard:true, + position:'he', + content:function(){ + player.draw(); + player.addMark('twgyshenxing',1); + }, + marktext:'慎', + intro:{content:'已发动过#次'}, + ai:{ + order:function(item,player){ + if(!player.hasMark('twgyshenxing')) return 10; + return 1; + }, + result:{player:1}, + }, + }, + twbingyi:{ + audio:'bingyi_xin_guyong', + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.countCards('h'); + }, + filterx:function(event,player){ + var cards=player.getCards('h'); + if(cards.length==1) return true; + var color=get.color(cards[0],player),type=get.type2(cards[0],player); + for(var i=1; iplayer.getCardUsable({name:'sha'})){ + return player.hp>2?2:0; + } + return 1; + }).set('prompt',get.prompt('twyilie')); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('twyilie'); + game.log(player,'选择了','#g【毅烈】','的','#y'+result.control); + if(result.index%2==0) player.addTempSkill('twyilie_add','phaseUseEnd'); + if(result.index>0) player.addTempSkill('twyilie_miss'); + if(result.index==2) player.loseHp(); + } + }, + subSkill:{ + add:{ + charlotte:true, + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+1; + }, + }, + mark:true, + intro:{content:'本阶段使用【杀】的次数上限+1'}, + }, + miss:{ + charlotte:true, + audio:'spyilie', + trigger:{player:['useCardToTargeted','shaMiss']}, + filter:function(event,player,name){ + if(name=='useCardToTargeted') return event.card.name=='sha'&&event.target.isLinked(); + return true; + }, + forced:true, + content:function(){ + player.draw(); + }, + }, + }, + }, + twfenming:{ + audio:'spfenming', + trigger:{player:'phaseZhunbeiBegin'}, + filter:function(event,player){ + return game.hasPlayer(function(target){ + return target!=player&&(target.countCards('he')||!target.isLinked()); + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('twfenming'),function(card,player,target){ + return target!=player&&(target.countCards('he')||!target.isLinked()); + }).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twfenming',target); + var list=[],choiceList=[ + '令'+get.translation(target)+'弃置一张牌', + '令'+get.translation(target)+'横置', + '背水!横置并依次令'+get.translation(target)+'执行上述所有选项', + ]; + if(target.countCards('he')) list.push('选项一'); + else choiceList[0]=''+choiceList[0]+''; + if(!target.isLinked()) list.push('选项二'); + else choiceList[1]=''+choiceList[1]+''; + if(target.countCards('he')&&!target.isLinked()&&!player.isLinked()) list.push('背水!'); + else choiceList[2]=''+choiceList[2]+''; + if(list.length==1) event._result={control:list[0]}; + else player.chooseControl(list).set('choiceList',choiceList).set('ai',function(){ + var list=_status.event.controls; + if(list.contains('背水!')) return '背水!'; + if(list.contains('选项一')) return '选项一'; + return '选项二'; + }).set('prompt','奋命:请选择一项'); + } + else event.finish(); + 'step 2' + game.log(player,'选择了','#y'+result.control); + if(result.control=='背水!'&&!player.isLinked()) player.link(true); + if(result.control!='选项二') target.chooseToDiscard('he',true); + if(result.control!='选项一'&&!target.isLinked()) target.link(true); + }, + }, + //韩当 + twgongji:{ + audio:'regongji', + enable:'phaseUse', + usable:1, + position:'he', + filterCard:true, + filter:function(event,player){ + return player.countCards('he'); + }, + check:function(card){ + var base=0,player=_status.event.player,suit=get.suit(card,player),added=false,added2=false,added3; + if(get.type(card)=='equip'&&game.hasPlayer(function(target){ + var att=get.attitude(player,target); + if(att>=0) return 0; + if(target.countCards('he',function(card){ + return get.value(card)>5; + })) return -att; + })) base+=6; + var hs=player.getCards('h'); + var muniu=player.getEquip('muniu'); + if(muniu&&card!=muniu&&muniu.cards) hs=hs.concat(muniu.cards); + for(var i of hs){ + if(i!=card&&get.name(i)=='sha'){ + if(get.suit(i,player)==suit){ + if(player.hasValueTarget(i,false)){ + added3=true; + base+=5.5; + } + } + else { + if(player.hasValueTarget(i,false)) added2=true; + if(!added&&!player.hasValueTarget(i,null,true)&&player.hasValueTarget(i,false,true)){ + base+=4; + added=true; + } + } + } + } + if(added3&&!added2) base-=4.5; + return base-get.value(card); + }, + content:function(){ + 'step 0' + player.addTempSkill('twgongji2'); + player.markAuto('twgongji2',[get.suit(cards[0],player)]); + 'step 1' + if(get.type(cards[0],null,cards[0].original=='h'?player:false)=='equip'){ + player.chooseTarget('是否弃置一名角色的一张牌?',function(card,player,target){ + return player!=target&&target.countCards('he'); + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'guohe_copy2'},player,player); + }); + } + else event.finish(); + 'step 2' + if(result.bool){ + player.line(result.targets,'green'); + player.discardPlayerCard(result.targets[0],'he',true); + } + }, + mod:{ + attackRangeBase:function(){ + return Infinity; + }, + }, + ai:{ + order:4.5, + result:{player:1}, + }, + }, + twgongji2:{ + charlotte:true, + onremove:true, + mark:true, + intro:{content:'使用$花色的杀无任何次数限制'}, + trigger:{player:'useCard1'}, + filter:function(event,player){ + if(_status.currentPhase==player&&event.card.name=='sha'&& + player.getStorage('twgongji2').contains(get.suit(event.card))&&event.addCount!==false) return true; + return false; + }, + forced:true, + popup:false, + firstDo:true, + content:function(){ + trigger.addCount=false; + if(player.stat[player.stat.length-1].card.sha>0){ + player.stat[player.stat.length-1].card.sha--; + } + }, + mod:{ + cardUsable:function(card,player){ + if(card.name=='sha'&&player.getStorage('twgongji2').contains(get.suit(card))) return Infinity; + }, + aiOrder:function(player,card,num){ + if(get.name(card)=='sha'&&!player.getStorage('twgongji2').contains(get.suit(card))) return num+1; + }, + }, + }, + twjiefan:{ + skillAnimation:true, + animationColor:'wood', + audio:'jiefan_re_handang', + limited:true, + enable:'phaseUse', + filterTarget:true, + content:function(){ + 'step 0' + player.awakenSkill('twjiefan'); + event.players=game.filterPlayer(function(current){ + return current!=target&¤t.inRange(target); + }); + event.players.sortBySeat(); + 'step 1' + if(event.players.length){ + event.current=event.players.shift(); + event.current.animate('target'); + player.line(event.current,'green'); + if(!event.current.countCards('he')||!target.isIn()) event._result={bool:false}; + else{ + event.current.chooseToDiscard({subtype:'equip1'},'he','解烦:弃置一张武器牌,或令'+get.translation(target)+'摸一张牌').set('ai',function(card){ + if(!_status.event.target.isIn()) return 0; + if(get.attitude(_status.event.player,_status.event.target)<0) return 7-get.value(card); + return -1; + }).set('target',target); + } + } + else { + player.addSkill('twjiefan2'); + player.markAuto('twjiefan2',[target]); + event.finish(); + } + 'step 2' + if(!result.bool&&target.isIn()) target.draw(); + event.goto(1); + }, + ai:{ + order:5, + result:{ + target:function(player,target){ + if(player.hp>2&&game.phaseNumber{ + return player.canCompare(target); + }).set('ai',target=>{ + if(_status.event.goon) return get.effect(target,{name:'sha'},_status.event.player); + return 0; + }).set('goon',event.triggername!='phaseUseBegin'||(player.countCards('hs','sha')>0&&player.hasValueTarget({name:'sha'}))); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twshuangren',target); + if(player.canCompare(target)) player.chooseToCompare(target); + else event.finish(); + } + else event.finish(); + 'step 2' + if(result.bool){ + event.sha=true; + player.chooseTarget([1,2],'请选择【杀】的目标',true,function(card,player,target){ + if(!player.canUse('sha',target,false,false)) return false; + return get.distance(target,_status.event.targetx)<=1; + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'sha'},player,player); + }).set('targetx',target); + } + else target.chooseBool('双刃:是否视为对'+get.translation(player)+'使用一张杀?').set('choice',get.effect(player,{name:'sha'},target,target)>0); + 'step 3' + if(result.bool){ + if(event.sha==true) { + result.targets.sortBySeat(); + for(var i of result.targets){ + player.useCard({name:'sha',isCard:true},i,false); + } + } + else target.useCard({name:'sha',isCard:true},player,false); + } + }, + subSkill:{ + end:{ + audio:'shuangren', + trigger:{player:'phaseUseEnd'}, + filter:function(event,player,name){ + if(!player.countCards('h')) return false; + return !player.hasHistory('useSkill',function(evt){ + return evt.skill=='twshuangren'; + })&&!player.hasHistory('sourceDamage',function(evt){ + return evt.card.name=='sha'; + }); + }, + direct:true, + preHidden:true, + content:function(){ + 'step 0' + player.chooseToDiscard(get.prompt('twshuangren'),'弃置一张牌发动〖双刃〗','he').set('ai',function(card){ + if(_status.event.goon) return 5-get.value(card); + return 0; + }).set('goon',function(){ + return player.hasCard(function(card){ + if(player.needsToDiscard()>1) return card.number>10&&get.value(card)<=5; + return (card.number>=9&&get.value(card)<=5)||get.value(card)<=3; + }); + }()).setHiddenSkill('twshuangren').set('logSkill','twshuangren'); + 'step 1' + if(result.bool){ + player.useSkill('twshuangren'); + } + } + } + } + }, + //法正 + twxuanhuo:{ + audio:'rexuanhuo', + trigger:{player:'phaseDrawEnd'}, + filter:function(event,player){ + return player.countCards('he')>1&&game.countPlayer()>2; + }, + direct:true, + content:function(){ + 'step 0' + var ai2=function(target){ + var player=_status.event.player; + if(get.attitude(player,target)<=0) return 0; + var list=['sha','juedou']; + var num=Math.max.apply(Math,list.map(function(i){ + return target.getUseValue({name:i,isCard:true},false); + })); + if(target.hasSkillTag('nogain')) num/=4; + return num; + }; + player.chooseCardTarget({ + prompt:get.prompt2('twxuanhuo'), + filterCard:true, + selectCard:2, + position:'he', + filterTarget:lib.filter.notMe, + goon:game.hasPlayer(function(current){ + return current!=player&&ai2(player,current)>0; + }), + ai1:function(card){ + if(!_status.event.goon) return 0; + return 7-get.value(card); + }, + ai2:ai2, + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twxuanhuo',target); + player.give(result.cards,target); + } + else event.finish(); + 'step 2' + if(game.hasPlayer(function(current){ + return current!=player&¤t!=target; + })) player.chooseTarget(function(card,player,target){ + return target!=player&&target!=_status.event.target; + },'选择'+get.translation(target)+'使用【杀】或【决斗】的目标',true).set('target',target).set('ai',function(target){ + var evt=_status.event; + var list=['sha','juedou']; + return Math.max.apply(Math,list.map(function(i){ + var card={name:i,isCard:true}; + if(!evt.target.canUse(card,target,false)) return 0; + return get.effect(target,card,evt.target,evt.player); + })); + }); + else event.finish(); + 'step 3' + var target2=result.targets[0]; + event.target2=target2; + player.line(target2); + if(target.canUse({name:'sha',isCard:true},target2,false)) vcards.push(['基本','','sha']); + if(target.canUse({name:'juedou',isCard:true},target2,false)) vcards.push(['锦囊','','juedou']); + if(!vcards.length){ + if(!target.countCards('h')) event.finish(); + else event._result={index:1}; + } + else if(!target.countCards('h')){ + event.vcards=vcards; + event._result={index:0}; + } + else { + event.vcards=vcards; + target.chooseControl().set('choiceList',[ + '视为对'+get.translation(target2)+'使用一张【杀】或【决斗】', + '令'+get.translation(player)+'获得你的两张牌', + ]); + } + 'step 4' + if(result.index==0){ + if(event.vcards.length==1) event._result={links:event.vcards,bool:true}; + else target.chooseButton(['请选择要对'+get.translation(event.target2)+'使用的牌',[event.vcards,'vcard']],true).set('ai',function(button){ + var player=_status.event.player; + return get.effect(_status.event.getParent().target2,{name:button.link[2],isCard:true},player,player); + }); + } + else { + player.gainPlayerCard(target,2,'he',true); + event.finish(); + } + 'step 5' + if(result.bool) target.useCard({name:result.links[0][2],isCard:true},false,event.target2); + }, + ai:{ + expose:0.15, + }, + }, + twenyuan:{ + audio:'reenyuan', + group:['twenyuan1','twenyuan2'], + }, + twenyuan1:{ + audio:'reenyuan', + trigger:{ + global:['gainAfter','loseAsyncAfter'] + }, + direct:true, + filter:function(event,player){ + var cards=event.getg(player); + if(!cards.length||cards.length<2) return false; + return game.countPlayer(current=>{ + if(current==player) return false; + var evt=event.getl(current); + if(evt&&evt.cards&&evt.cards.filter(card=>cards.contains(card)).length>=2) return true; + return false; + }); + }, + check:function(event,player){ + var cards=event.getg(player); + var target=game.filterPlayer(current=>{ + if(current==player) return false; + var evt=event.getl(current); + if(evt&&evt.cards&&evt.cards.filter(card=>cards.contains(card)).length>=2) return true; + return false; + })[0]; + return get.attitude(player,target)>0; + }, + logTarget:function(event,player){ + var cards=event.getg(player); + return game.filterPlayer(current=>{ + if(current==player) return false; + var evt=event.getl(current); + if(evt&&evt.cards&&evt.cards.filter(card=>cards.contains(card)).length>=2) return true; + return false; + }); + }, + direct:true, + content:function(){ + 'step 0' + var target=lib.skill.twenyuan1.logTarget(trigger,player)[0]; + event.target=target; + var list=['摸一张牌']; + var prompt2='令'+get.translation(target)+'摸一张牌'; + if((!target.countCards('h')||!target.countCards('e'))&&target.isDamaged()){ + list.push('回复1点体力'); + prompt2+='或回复1点体力'; + } + list.push('cancel2'); + player.chooseControl(list).set('prompt',get.prompt('twenyuan',target)).set('prompt2',prompt2).set('ai',()=>_status.event.choice).set('choice',function(){ + if(get.attitude(player,target)>0){ + if(target.hp<=2&&list.contains('回复1点体力')) return '回复1点体力'; + return 0; + } + return 'cancel2'; + }()); + 'step 1' + if(result.control=='cancel2'){ + event.finish(); return; + } + player.logSkill('twenyuan1',target); + if(result.control=='回复1点体力') target.recover(); + else target.draw(); + }, + }, + twenyuan2:{ + audio:'reenyuan', + trigger:{player:'damageEnd'}, + logTarget:'source', + filter:function(event,player){ + return event.source&&event.source.isAlive(); + }, + check:function(event,player){ + var att=get.attitude(player,event.source); + var num=event.source.countCards('h'); + if(att<=0) return true; + if(get.effect(event.source,{name:'losehp'},player,event.source)>0) return true; + if(num>2) return true; + if(num) return att<4; + return false; + }, + prompt2:'令其选择一项:1.失去1点体力;2.交给你一张手牌,若此牌的花色不为♥,你摸一张牌。', + content:function(){ + 'step 0' + event.count=trigger.num; + 'step 1' + var target=trigger.source; + event.count--; + if(!target.countCards('h')) event._result={bool:false}; + else target.chooseCard('h','恩怨:将一张手牌交给'+get.translation(player)+',或失去1点体力').set('ai',function(card){ + if(get.attitude(_status.event.player,_status.event.getParent().player)>0){ + if(get.suit(card)!='heart') return 15-get.value(card); + return 11-get.value(card); + } + else { + var num=12-_status.event.player.hp*2; + if(get.suit(card)!='heart') num-=2; + return num-get.value(card); + } + }); + 'step 2' + var target=trigger.source; + if(result.bool){ + var card=result.cards[0]; + event.card=card; + target.give(card,player); + } + else{ + target.loseHp(); + event.goto(4); + } + 'step 3' + if(get.suit(card)!='heart') player.draw(); + 'step 4' + var target=trigger.source; + if(target.isAlive()&&event.count>0) player.chooseBool(get.prompt('twenyuan',target),lib.skill.twenyuan2.prompt2).set('ai',function(){ + var evt=_status.event.getTrigger(); + return lib.skill.twenyuan2.check(evt,evt.player); + }); + else event.finish(); + 'step 5' + if(result.bool){ + player.logSkill('twenyuan2',trigger.source); + event.goto(1); + } + }, + }, + //马岱 + twqianxi:{ + audio:'qianxi', + trigger:{player:'phaseZhunbeiBegin'}, + preHidden:true, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + if(player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'tweqianxi'),'he')) player.chooseToDiscard('he',true); + else event.finish(); + 'step 2' + if(!result.bool){ + event.finish(); + return; + } + event.color=get.color(result.cards[0],player); + player.chooseTarget(function(card,player,target){ + return player!=target&&get.distance(player,target)<=1; + },true).set('ai',function(target){ + return get.effect(target,{name:'sha'},_status.event.player,_status.event.player)+5; + }); + 'step 3' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + target.storage.twqianxi2=event.color; + target.addTempSkill('twqianxi2'); + player.addTempSkill('twqianxi_self'); + player.markAuto('twqianxi_self',[target]); + } + }, + subSkill:{ + self:{ + audio:'qianxi', + charlotte:true, + onremove:true, + forced:true, + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.hasHistory('sourceDamage',evt=>{ + if(!evt.card||evt.card.name!='sha'||!evt.player.isIn()) return false; + if(player.getStorage('twqianxi_self').contains(evt.player)) return true; + return false; + }); + }, + content:function(){ + 'step 0' + var targets=[]; + player.getHistory('sourceDamage',evt=>{ + if(!evt.card||evt.card.name!='sha') return false; + if(player.getStorage('twqianxi_self').contains(evt.player)){ + targets.add(evt.player); + } + return false; + }); + player.line(targets); + for(var target of targets){ + target.storage.twqianxi3=target.storage.twqianxi2; + target.addTempSkill('twqianxi3',{player:'phaseAfter'}); + } + } + } + } + }, + twqianxi2:{ + mark:true, + charlotte:true, + onremove:true, + intro:{ + markcount:()=>0, + content:function(storage){ + return '不能使用或打出'+get.translation(storage)+'手牌'; + }, + }, + mod:{ + cardEnabled2:function(card,player){ + if(get.itemtype(card)=='card'&&get.color(card)==player.getStorage('twqianxi2')&&get.position(card)=='h') return false; + }, + }, + }, + twqianxi3:{ + mod:{ + cardEnabled2:function(card,player){ + if(get.itemtype(card)=='card'&&get.color(card)!=player.getStorage('twqianxi3')&&get.position(card)=='h') return false; + }, + }, + mark:true, + intro:{ + content:function(storage){ + return '不能使用或打出非'+get.translation(storage)+'手牌'; + }, + }, + charlotte:true, + onremove:true, + }, + //牛金 + twcuorui:{ + audio:'cuorui', + limited:true, + skillAnimation:true, + animationColor:'thunder', + trigger:{player:'phaseZhunbeiBegin'}, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.countCards('h')>player.countCards('h'); + }); + }, + check:function(event,player){ + var num=0; + for(var target of game.players){ + if(target!=player&&target.countCards('h')>num) num=target.countCards('h'); + } + num=Math.min(num,5+player.countCards('h')); + return num-player.countCards('h')>=2; + }, + prompt:function(event,player){ + var num=0; + for(var target of game.players){ + if(target!=player&&target.countCards('h')>num) num=target.countCards('h'); + } + num=Math.min(num,5+player.countCards('h')); + return get.prompt('twcuorui')+'(可摸'+get.cnNumber(num-player.countCards('h'))+'张牌)'; + }, + content:function(){ + 'step 0' + player.awakenSkill('twcuorui'); + var num=0; + for(var target of game.players){ + if(target!=player&&target.countCards('h')>num) num=target.countCards('h'); + } + num=Math.min(num,5+player.countCards('h')); + player.drawTo(num); + if(!player.storage._disableJudge){ + player.disableJudge(); + event.finish(); + } + else player.chooseTarget('挫锐:是否对一名其他角色造成1点伤害?',lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + 'step 1' + if(result.bool){ + player.line(result.targets[0]); + result.targets[0].damage(); + } + }, + }, + twliewei:{ + audio:'liewei', + trigger:{source:'dieAfter'}, + forced:true, + content:function(){ + 'step 0' + if(!player.hasSkill('twcuorui',null,null,false)||!player.awakenedSkills.contains('twcuorui')) event._result={index:0}; + else player.chooseControl().set('prompt','裂围:请选择一项').set('choiceList',[ + '摸两张牌', + '重置〖挫锐〗' + ]).set('ai',function(){ + return 1; + }); + 'step 1' + if(result.index==0) player.draw(2); + else player.restoreSkill('twcuorui'); + }, + }, + //母兵脸 + twzhengrong:{ + audio:'drlt_zhenrong', + trigger:{player:'useCardAfter',source:'damageSource'}, + filter:function(event,player){ + if(!event.isPhaseUsing(player)) return false; + if(event.name=='damage') return player.getHistory('sourceDamage',evt=>{ + return evt.getParent('phaseUse')==event.getParent('phaseUse'); + }).indexOf(event)==0; + if(!event.targets||event.targets.every(target=>target==player)) return false; + return player.getAllHistory('useCard',function(evt){ + if(!evt.isPhaseUsing(player)) return false; + if(evt.targets.every(target=>target==player)) return false; + return true; + }).indexOf(event)%2==1; + }, + direct:true, + content:function(){ + 'step 0' + if(!game.hasPlayer(function(target){ + return target!=player&&target.countCards('he'); + })){ + event.finish(); + return; + }; + player.chooseTarget(get.prompt('twzhengrong'),'将一名其他角色的一张牌置于武将牌上,称为“荣”',function(card,player,target){ + return target!=player&&target.countCards('he'); + }).set('ai',function(target){ + return get.effect(target,{name:'guohe_copy2'},_status.event.player,_status.event.player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=result.targets[0]; + player.logSkill('twzhengrong',target); + player.choosePlayerCard(target,'he',true); + } + else event.finish(); + 'step 2' + if(result.bool) player.addToExpansion(result.links,target,'give').gaintag.add('twzhengrong'); + }, + marktext:'荣', + onremove:function(player,skill){ + var cards=player.getExpansions(skill); + if(cards.length) player.loseToDiscardpile(cards); + }, + intro:{ + content:'expansion', + markcount:'expansion', + } + }, + twhongju:{ + derivation:['twqingce','twsaotao'], + audio:'drlt_hongju', + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + juexingji:true, + skillAnimation:true, + animationColor:'thunder', + filter:function(event,player){ + return player.getExpansions('twzhengrong').length>=3; + }, + content:function(){ + 'step 0' + player.awakenSkill('twhongju'); + player.draw(player.getExpansions('twzhengrong').length); + 'step 1' + if(player.countCards('h')==0) event.goto(3); + else{ + var next=player.chooseToMove('鸿举:请选择要交换的手牌和“荣”'); + next.set('list',[ + [get.translation(player)+'(你)的“荣”',player.getExpansions('twzhengrong'),'twzhengrong_tag'], + ['手牌区',player.getCards('h')], + ]); + next.set('filterMove',function(from,to){ + return typeof to!='number'; + }); + next.set('processAI',function(list){ + var player=_status.event.player,cards=list[0][1].concat(list[1][1]).sort(function(a,b){ + return player.getUseValue(a)-player.getUseValue(b); + }),cards2=cards.splice(0,player.getExpansions('twzhengrong').length); + return [cards2,cards]; + }); + } + 'step 2' + if(result.bool){ + var pushs=result.moved[0],gains=result.moved[1]; + pushs.removeArray(player.getExpansions('twzhengrong')); + gains.removeArray(player.getCards('h')); + if(!pushs.length||pushs.length!=gains.length) return; + player.addToExpansion(pushs,player,'giveAuto').gaintag.add('twzhengrong'); + game.log(player,'将',pushs,'作为“荣”置于武将牌上'); + player.gain(gains,'gain2'); + } + 'step 3' + player.addSkillLog('twqingce'); + player.chooseBool('是否减1点体力上限并获得〖扫讨〗?').set('ai',()=>_status.event.bool).set('bool',player.isDamaged()&&player.countCards('h')>=3?(Math.random()<0.5?true:false):false); + 'step 4' + if(result.bool){ + player.loseMaxHp(); + player.addSkillLog('twsaotao'); + game.delayx(); + } + }, + }, + twqingce:{ + enable:'phaseUse', + audio:'drlt_qingce', + filter:function(event,player){ + return player.getExpansions('twzhengrong').length>0; + }, + chooseButton:{ + dialog:function(event,player){ + return ui.create.dialog('清侧:请选择要移去的“荣”',player.getExpansions('twzhengrong'),'hidden'); + }, + backup:function(links,player){ + return { + card:links[0], + filterCard:function(){return false}, + selectCard:-1, + filterTarget:function(card,player,target){ + return target.countDiscardableCards(player,'hej')>0; + }, + delay:false, + audio:'drlt_qingce', + content:lib.skill.twqingce.contentx, + ai:{ + result:{ + target:function(player,target){ + return get.effect(target,{name:'guohe'},player,target); + }, + }, + }, + } + }, + prompt:()=>'弃置一名角色区域内的一张牌', + }, + contentx:function(){ + 'step 0' + var card=lib.skill.twqingce_backup.card; + player.loseToDiscardpile([card]); + 'step 1' + if(target.countDiscardableCards(player,'hej')>0) player.discardPlayerCard('hej',true,target); + }, + ai:{ + order:8, + result:{ + player:function(player){ + if(game.hasPlayer(function(target){ + return get.effect(target,{name:'guohe'},player,player)>4*Math.max(0,5-player.getExpansions('twzhengrong').length); + })) return 1; + return 0; + }, + }, + }, + }, + twsaotao:{ + audio:2, + trigger:{player:'useCard'}, + filter:function(event,player){ + return event.card.name=='sha'||get.type(event.card)=='trick'; + }, + forced:true, + content:function(){ + trigger.directHit.addArray(game.players); + }, + ai:{directHit_ai:true}, + }, + //大小乔 + twxingwu:{ + audio:'xingwu', + trigger:{player:'phaseDiscardBegin'}, + filter:function(event,player){ + return player.countCards('he'); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseCard('he',get.prompt('twxingwu'),'将一张牌置于武将牌上作为“星舞”').set('ai',function(card){ + if(_status.event.goon) return 20-get.value(card); + return 7-get.value(card); + }).set('goon',player.needsToDiscard()||player.getStorage('twxingwu').length>1); + 'step 1' + if(result.bool){ + player.logSkill('twxingwu'); + var cards=result.cards; + player.addToExpansion(cards,player,'give').gaintag.add('twxingwu'); + } + else event.finish(); + 'step 2' + game.delayx(); + if(player.getExpansions('twxingwu').length<3) event.finish(); + 'step 3' + player.chooseButton(['是否移去三张“星舞”牌并发射核弹?',player.getExpansions('twxingwu')],3).set('ai',function(button){ + if(_status.event.goon) return 1; + return 0; + }).set('goon',game.hasPlayer(current=>get.damageEffect(current,player,player)<0)); + 'step 4' + if(result.bool) player.loseToDiscardpile(result.links); + else event.finish(); + 'step 5' + player.chooseTarget('星舞:选择一名其他角色','弃置其装备区内的所有牌。然后对其造成两点伤害(若其性别包含女性则改为1点)',true,lib.filter.notMe).set('ai',function(target){ + return get.damageEffect(target,player,player)*Math.sqrt(4+target.countCards('e',function(card){ + return get.value(card,target)>0; + }))*(target.hasSex('female')?1:2); + }); + 'step 6' + if(result.bool&&result.targets&&result.targets.length){ + var target=result.targets[0]; + player.line(target,'green'); + var num=target.countCards('e'); + if(num) player.discardPlayerCard(target,'e',num,true); + target.damage(target.hasSex('female')?1:2); + } + }, + intro:{ + content:'expansion', + markcount:'expansion', + onunmark:function(storage,player){ + if(player.hasSkill('twpingting')) return; + player.removeAdditionalSkill('twpingting'); + }, + }, + onremove:function(player,skill){ + if(player.hasSkill('twpingting')) return; + var cards=player.getExpansions(skill); + if(cards.length) player.loseToDiscardpile(cards); + }, + }, + twpingting:{ + audio:2, + trigger:{global:['roundStart','dying']}, + init:function(player,skill){ + if(player.getExpansions('twxingwu').length) player.addAdditionalSkill(skill,['tianxiang_daxiaoqiao','liuli_daxiaoqiao']); + else player.removeAdditionalSkill(skill); + }, + filter:function(event,player){ + if(event.name=='dying') return player==_status.currentPhase&&event.player!=player; + return true; + }, + forced:true, + group:'twpingting_update', + derivation:['tianxiang','liuli'], + content:function(){ + 'step 0' + player.draw(); + player.chooseCard('he','娉婷:将一张牌置于武将牌上,称为“星舞”',true).set('ai',function(card){ + return -get.value(card); + }); + 'step 1' + if(result.bool){ + var cards=result.cards; + player.addToExpansion(cards,player,'give').gaintag.add('twxingwu'); + } + }, + onremove:function(player,skill){ + if(player.hasSkill('twxingwu')) return; + var cards=player.getExpansions(skill); + if(cards.length) player.loseToDiscardpile(cards); + }, + subSkill:{ + update:{ + trigger:{ + player:['loseAfter','loseAsyncAfter','addToExpansionAfter'], + }, + forced:true, + silent:true, + filter:function(event,player){ + var cards=player.getExpansions('twxingwu'),skills=player.additionalSkills.twpingting; + if((cards.length&&skills&&skills.length)||(!cards.length&&(!skills||!skills.length))){ + return false; + } + return true; + }, + content:function(){ + lib.skill.twpingting.init(player,'twpingting'); + } + } + } + }, + tianxiang_daxiaoqiao:{audio:2,inherit:'tianxiang'}, + liuli_daxiaoqiao:{audio:2,inherit:'liuli'}, + //傅肜 + twxuewei:{ + audio:'xuewei', + trigger:{global:'phaseUseBegin'}, + filter:function(event,player){ + return event.player!=player&&game.players.length>2&&!player.hasSkill('twxuewei_round'); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('twxuewei'),function(card,player,target){ + return target!=player&&target!=_status.event.getTrigger().player; + }).set('ai',function(target){ + if(get.attitude(player,_status.event.getTrigger().player)>=0) return 0; + return get.attitude(player,target); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twxuewei',trigger.player,false); + player.addTempSkill('twxuewei_round','roundStart'); + player.line2([trigger.player,target]); + trigger.player.chooseControl('选项一','选项二').set('choiceList',[ + '本回合不能对'+get.translation(target)+'使用【杀】且手牌上限-2', + '令'+get.translation(player)+'视为对你使用一张【决斗】', + ]).set('ai',function(){ + var player=_status.event.player,source=_status.event.getParent().player; + if(get.effect(player,{name:'juedou'},source,player)>0) return 1; + if(player.hp-player.countCards('h')>2||player.hp<=2) return 0; + return 1; + }); + } + else event.finish(); + 'step 2' + game.log(trigger.player,'选择了','#g【血卫】','的','#y'+result.control); + if(result.control=='选项一'){ + trigger.player.markAuto('twxuewei_block',[target]); + trigger.player.addTempSkill('twxuewei_block'); + } + else player.useCard({name:'juedou',isCard:true},trigger.player,false); + }, + subSkill:{ + round:{charlotte:true}, + block:{ + charlotte:true, + onremove:true, + locked:true, + mark:true, + marktext:'卫', + intro:{ + content:function(storage,player){ + if(!storage||!storage.length) return; + return '不能对'+get.translation(storage)+'使用【杀】;手牌上限-'+(2*storage.length); + } + }, + mod:{ + maxHandcard:function(player,num){ + return num-2*player.getStorage('twxuewei_block').length; + }, + playerEnabled:function(card,player,target){ + if(card.name=='sha'&&player.getStorage('twxuewei_block').contains(target)) return false; + }, + }, + }, + }, + }, + twliechi:{ + audio:'liechi', + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return event.source&&event.source.hp>=player.hp&&(event.source.countCards('h')>player.countCards('h')||event.source.countCards('he')); + }, + direct:true, + content:function(){ + 'step 0' + var num=trigger.source.countCards('h')-player.countCards('h'); + event.num=num; + var list=[],choiceList=[ + '令'+get.translation(trigger.source)+'弃置'+get.cnNumber(num)+'张手牌', + '弃置'+get.translation(trigger.source)+'一张牌', + '背水!弃置一张装备牌,然后依次执行以上所有选项', + ]; + if(trigger.source.countCards('h')>player.countCards('h')) list.push('选项一'); + else choiceList[0]=''+choiceList[0]+''; + if(trigger.source.countCards('he')) list.push('选项二'); + else choiceList[1]=''+choiceList[1]+''; + if(trigger.source.countCards('h')>player.countCards('h')&&trigger.source.countCards('he')&&player.countCards('he',{type:'equip'})&&game.getGlobalHistory('changeHp',evt=>{ + return evt.player==player&&evt.getParent()._dyinged; + }).length) list.push('背水!'); + else choiceList[2]=''+choiceList[2]+'(未进入过濒死状态)'; + player.chooseControl(list,'cancel2').set('prompt',get.prompt('twliechi',trigger.source)).set('choiceList',choiceList).set('ai',()=>_status.event.choice).set('choice',function(){ + if(get.attitude(player,trigger.source)>0) return 'cancel2'; + if(list.contains('背水!')) return '背水!'; + if(num>1) return '选项一'; + return '选项二'; + }()); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('twliechi',trigger.source); + game.log(player,'选择了','#g【烈斥】','的','#y'+result.control); + if(result.control=='背水!') player.chooseToDiscard('he',{type:'equip'},true); + if(result.control!='选项二') trigger.source.chooseToDiscard('h',num,true); + if(result.control!='选项一') player.discardPlayerCard(trigger.source,'he',true); + } + } + }, + //卢植 + twmingren:{ + marktext:'任', + intro:{ + content:'expansion', + markcount:'expansion', + }, + onremove:function(player,skill){ + var cards=player.getExpansions(skill); + if(cards.length) player.loseToDiscardpile(cards); + }, + group:'twmingren_change', + audio:'nzry_mingren_1', + trigger:{global:'phaseBefore',player:'enterGame'}, + forced:true, + locked:false, + filter:function(event,player){ + return (event.name!='phase'||game.phaseNumber==0)&&!player.getExpansions('twmingren').length; + }, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + if(!player.countCards('h')) event.finish(); + else player.chooseCard('h','明任:将一张手牌置于武将牌上,称为“任”',true).set('ai',function(card){ + return 6-get.value(card); + }); + 'step 2' + if(result.bool) player.addToExpansion(result.cards[0],player,'give','log').gaintag.add('twmingren'); + }, + subSkill:{ + change:{ + audio:'nzry_mingren_1', + trigger:{player:['phaseUseBegin','phaseUseEnd']}, + filter:function(event,player){ + return player.countCards('he')&&player.getExpansions('twmingren').length; + }, + direct:true, + content:function(){ + 'step 0' + player.chooseCard('he',get.prompt('twmingren'),'用一张牌替换“任”('+get.translation(player.getExpansions('twmingren')[0])+')').set('ai',function(card){ + var player=_status.event.player; + var color=get.color(card); + if(color==get.color(player.getExpansions('twmingren')[0])) return false; + var num=0; + var list=[]; + player.countCards('he',function(cardx){ + if(cardx!=card||get.color(cardx)!=color) return false; + if(list.contains(cardx.name)) return false; + list.push(cardx.name); + switch (cardx.name){ + case 'wuxie':num+=(game.countPlayer()/2.2); break; + case 'caochuan':num+=1.1; break; + case 'shan':num+=1; break; + } + }); + return num*(30-get.value(card)); + }); + 'step 1' + if(result.bool){ + player.logSkill('twmingren'); + player.addToExpansion(result.cards[0],'log','give',player).gaintag.add('twmingren'); + var card=player.getExpansions('twmingren')[0]; + if(card) player.gain(card,'gain2'); + }; + }, + }, + }, + }, + twzhenliang:{ + group:['twzhenliang_1','twzhenliang_2'], + audio:'nzry_zhenliang_1', + mark:true, + zhuanhuanji:true, + marktext:'☯', + intro:{ + content:function(storage,player,skill){ + if(player.storage.twzhenliang==true) return '当你或你攻击范围内的一名角色于你的回合外受到伤害时,你可以弃置一张牌令此伤害-1。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。'; + return '出牌阶段限一次。你可以弃置一张牌并对攻击范围内的一名角色造成1点伤害。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。'; + }, + }, + subSkill:{ + 1:{ + audio:'nzry_zhenliang_1', + enable:'phaseUse', + filter:function(event,player){ + if(player.storage.twzhenliang) return false; + return game.hasPlayer(function(current){ + return player.inRange(current); + }); + }, + position:'he', + filterCard:true, + filterTarget:function(card,player,target){ + return player.inRange(target); + }, + check:function(card){ + var player=_status.event.player,cardx=player.getExpansions('twmingren')[0]; + if(cardx&&get.color(cardx,player)==get.color(card,player)) return 10-get.value(card); + return 7-get.value(card); + }, + prompt:'弃置一张牌并对攻击范围内的一名角色造成1点伤害', + content:function(){ + 'step 0' + player.changeZhuanhuanji('twzhenliang'); + var cardx=player.getExpansions('twmingren')[0]; + target.damage('nocard'); + if(!cardx||get.color(cards[0],player)!=get.color(cardx,player)) event.finish(); + 'step 1' + player.draw(); + }, + ai:{ + order:5, + result:{ + player:function(player,target){ + return get.damageEffect(target,player,player); + }, + }, + }, + }, + 2:{ + trigger:{global:'damageBegin4'}, + filter:function(event,player){ + if(_status.currentPhase==player||!player.storage.twzhenliang) return false; + return player.countCards('he')&&event.num>0&&(event.player==player||player.inRange(event.player)); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseToDiscard('he',get.prompt('twzhenliang',trigger.player),'弃置一张牌令此伤害-1').set('ai',function(card){ + if(_status.event.goon){ + var player=_status.event.player,cardx=player.getExpansions('twmingren')[0]; + if(cardx&&get.color(cardx,player)==get.color(card,player)) return 10-get.value(card); + return 6-get.value(card); + } + return 0; + }).set('goon',get.attitude(player,trigger.player)>0).logSkill=['twzhenliang',trigger.player]; + 'step 1' + if(result.bool){ + player.changeZhuanhuanji('twzhenliang'); + var cardx=player.getExpansions('twmingren')[0]; + if(cardx&&get.color(result.cards[0],player)==get.color(cardx,player)) player.draw(); + trigger.num--; + } + }, + }, + }, + }, + //张南 + twfenwu:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&&player.canUse('sha',current,false,false); + }); + }, + direct:true, + content:function(){ + 'step 0' + var list=[]; + player.getHistory('useCard',function(evt){ + if(get.type(evt.card)!='basic') return; + var name=evt.card.name,nature=evt.card.nature||''; + if(!list.contains(name+nature)) list.push(name+nature); + }); + player.chooseTarget(get.prompt('twfenwu'),'失去1点体力并视为使用一张无距离限制的【杀】'+(list.length>1?'(伤害基数+1)':''),function(card,player,target){ + return target!=player&&player.canUse('sha',target,false,false); + }).set('ai',function(target){ + var player=_status.event.player; + if(player.hp+player.countCards('hs',{name:['tao','jiu']})<=1) return -1; + var num=1; + if((!target.mayHaveShan()||player.hasSkillTag('directHit_ai',true,{ + target:target, + card:trigger.card, + },true))&&!target.hasSkillTag('filterDamage',null,{ + player:player, + card:{name:'sha'}, + })){ + num=1.3; + } + return get.effect(target,{name:'sha'},player,player)*num; + }); + 'step 1' + if(result.bool){ + var num=1,list=[]; + player.getHistory('useCard',function(evt){ + if(get.type(evt.card)!='basic') return; + var name=evt.card.name,nature=evt.card.nature||''; + if(!list.contains(name+nature)) list.push(name+nature); + }); + var target=result.targets[0]; + player.logSkill('twfenwu',target); + player.loseHp(); + if(list.length>=2){ + num=2; + game.log('#y杀','的伤害基数+1'); + } + player.useCard({name:'sha',isCard:true},target,false).baseDamage=num; + } + }, + }, + //呼厨泉 + twfupan:{ + audio:3, + trigger:{ + player:'damageEnd', + source:'damageSource' + }, + check:()=>true, + onremove:true, + content:function(){ + 'step 0' + if(!player.storage.twfupan) player.storage.twfupan={}; + player.draw(trigger.num); + 'step 1' + if(player.countCards('he')&&game.hasPlayer(current=>{ + return !(player.storage.twfupan[current.playerid]>=2)&&player!=current; + })){ + player.chooseCardTarget({ + filterCard:true, + selectCard:1, + position:'he', + forced:true, + targetprompt:function(target){ + return !_status.event.player.storage.twfupan[target.playerid]?'你摸两张牌':'对其
    造成伤害'; + }, + filterTarget:function(card,player,target){ + return !(player.storage.twfupan[target.playerid]>=2)&&player!=target; + }, + ai1:function(card){ + var player=_status.event.player; + if(get.value(card,false,'raw')<0) return 20*get.value(card); + if(player==_status.currentPhase) return 20-player.getUseValue(card); + return 20-get.value(card); + }, + ai2:function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + if(ui.selected.cards.length&&get.value(ui.selected.cards[0],false,'raw')<0){ + return -0.1-att; + } + if(player.storage.twfupan[target.playerid]===undefined) return 5; + else if(player.storage.twfupan[target.playerid]===1) return get.damageEffect(target,player,player); + return 1; + }, + prompt:'请选择要交出的卡牌和目标角色' + }); + }else event.finish(); + 'step 2' + if(result.bool){ + var cards=result.cards,target=result.targets[0]; + player.line(target,'green'); + player.give(cards,target); + event.target=target; + if(!player.storage.twfupan[target.playerid]){ + player.storage.twfupan[target.playerid]=1; + player.draw(2); + event.finish(); + }else{ + player.chooseBool('复叛:是否对'+get.translation(target)+'造成1点伤害?','然后你不能再因此技能交给其牌').set('ai',()=>_status.event.bool).set('bool',get.damageEffect(target,player,player)>0); + } + } + 'step 3' + if(result.bool){ + player.line(target,'fire'); + target.damage(); + player.storage.twfupan[target.playerid]++; + } + }, + ai:{ + maixie:true, + maixie_hp:true, + threaten:0.9, + } + }, + //刘璋 + twyaohu:{ + audio:'yinlang', + trigger:{player:'phaseBegin'}, + direct:true, + filter:function(event,player){ + return !player.hasSkill('twyaohu_round')&&game.hasPlayer(function(current){ + return current.group&¤t.group!='unknown'; + }); + }, + content:function(){ + 'step 0' + var list=[]; + game.countPlayer(function(current){ + if(current.group&¤t.group!='unknown') list.add(current.group); + }); + list.sort(function(a,b){ + return lib.group.indexOf(a)-lib.group.indexOf(b); + }); + if(!player.hasSkill('twyaohu')) list.push('cancel2'); + player.chooseControl(list).set('prompt','邀虎:请选择一个势力').set('ai',function(){ + return _status.event.choice; + }).set('choice',function(){ + var getn=function(group){ + return game.countPlayer(function(current){ + if(current.group!=group) return false; + if(player==current) return 2; + if(get.attitude(current,player)>0) return 1; + return 1.3; + }); + } + list.sort(function(a,b){ + return getn(b)-getn(a); + }); + return list[0]; + }()); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('twyaohu',game.filterPlayer(function(current){ + return current.group==result.control; + })); + game.log(player,'选择了','#y'+get.translation(result.control+2)); + player.storage.yaohu=result.control; + player.storage.twyaohu=result.control; + player.markSkill('twyaohu'); + } + }, + ai:{combo:'jutu'}, + intro:{content:'已选择了$势力'}, + group:'twyaohu_gain', + subSkill:{ + round:{}, + gain:{ + audio:'yinlang', + trigger:{global:'phaseUseBegin'}, + filter:function(event,player){ + return event.player.group==player.storage.yaohu&&event.player.isIn()&&player.getExpansions('jutu').length>0; + }, + forced:true, + locked:false, + logTarget:'player', + content:function(){ + 'step 0' + var target=trigger.player; + event.target=target; + target.chooseButton(['选择获得一张“生”',player.getExpansions('jutu')],true).set('ai',function(button){ + return get.value(button.link,player); + }); + 'step 1' + if(result.bool){ + target.gain(result.links,'give',player); + } + 'step 2' + if(game.hasPlayer(function(current){ + return current!=player&¤t!=target; + })){ + player.chooseTarget(true,'选择'+get.translation(target)+'使用【杀】的目标',function(card,player,target){ + return target!=player&&target!=_status.event.source; + }).set('source',target).set('ai',function(target){ + var evt=_status.event; + return get.effect(target,{name:'sha'},evt.source,evt.player); + }); + } + else { + event._result={bool:false}; + event.goto(4); + } + 'step 3' + var target2=result.targets[0]; + player.line(target2,'green'); + target.chooseToUse(function(card,player,event){ + if(get.name(card)!='sha') return false; + return lib.filter.filterCard.apply(this,arguments); + },'对'+get.translation(target2)+'使用一张杀,否则本回合使用伤害牌指定'+get.translation(player)+'为目标时须交给'+get.translation(player)+'两张牌,否则此牌对'+get.translation(player)+'无效').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ + if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; + return lib.filter.targetEnabled.apply(this,arguments); + }).set('sourcex',target2).set('addCount',false); + 'step 4' + if(!result.bool) player.addTempSkill('twyaohu_effect'); + }, + }, + effect:{ + audio:'yinlang', + trigger:{global:'useCardToPlayer'}, + charlotte:true, + forced:true, + filter:function(event,player){ + return event.target==player&&get.tag(event.card,'damage'); + }, + logTarget:'player', + content:function(){ + 'step 0' + var hs=trigger.player.getCards('he'); + if(hs.length<2) event._result={bool:false}; + else trigger.player.chooseCard(2,'交给'+get.translation(player)+'两张牌,否则取消'+get.translation(trigger.card)+'对其的目标','he').set('ai',card=>{ + if(_status.event.goon) return 5-get.value(card); + return 0; + }).set('goon',get.effect(player,trigger.card,trigger.player,trigger.player)>0); + 'step 1' + if(result.bool){ + trigger.player.give(result.cards,player); + }else{ + trigger.untrigger(); + trigger.targets.remove(player); + trigger.getParent().triggeredTargets1.remove(player); + } + }, + } + }, + }, + //李遗 + twjiaohua:{ + audio:2, + trigger:{global:'gainAfter'}, + filter:function(event,player){ + if(event.getParent().name!='draw') return false; + if(event.player!=player&&!event.player.isMinHp()) return false; + var cards=event.cards,list=['basic','trick','equip']; + for(var card of cards) if(list.contains(get.type2(card))) list.remove(get.type2(card)); + for(var type of event.player.getStorage('twjiaohua_gained')) if(list.contains(type)) list.remove(type); + return list.length>0; + }, + check:function(event,player){ + return get.attitude(player,event.player)>0; + }, + prompt2:function(event,player){ + var cards=event.cards,list=['basic','trick','equip']; + for(var card of cards) if(list.contains(get.type2(card))) list.remove(get.type2(card)); + for(var type of event.player.getStorage('twjiaohua_gained')) if(list.contains(type)) list.remove(type); + var name=event.player==player?'你':get.translation(event.player); + return '令'+name+'从牌堆或弃牌堆中获得一张'+list.map(i=>get.translation(i)+'牌').join('、').replace(/(.*)、/, '$1或'); + }, + logTarget:'player', + content:function(){ + trigger.player.addTempSkill('twjiaohua_gained'); + var cards=trigger.cards,list=['basic','trick','equip']; + for(var card of cards) if(list.contains(get.type2(card))) list.remove(get.type2(card)); + for(var type of trigger.player.getStorage('twjiaohua_gained')) if(list.contains(type)) list.remove(type); + list.randomSort(); + var card=get.cardPile(function(card){ + return list.contains(get.type2(card)); + }); + if(card){ + trigger.player.gain(card,'gain2'); + trigger.player.markAuto('twjiaohua_gained',[get.type2(card)]); + } + }, + subSkill:{ + gained:{onremove:true,charlotte:true} + } + }, + //阎象 + twkujian:{ + audio:3, + enable:'phaseUse', + filterCard:true, + selectCard:[1,3], + usable:1, + discard:false, + lose:false, + delay:false, + filterTarget:lib.filter.notMe, + global:'twkujian_ai', + check:function(card){ + if(ui.selected.cards.length&&ui.selected.cards[0].name=='du') return 0; + if(!ui.selected.cards.length&&card.name=='du') return 20; + var player=get.owner(card); + if(ui.selected.cards.length>=Math.max(2,player.countCards('h')-player.hp)) return 0; + if(player.hp==player.maxHp||player.storage.jsprende<0||player.countCards('h')<=1){ + var players=game.filterPlayer(); + for(var i=0; i=3 && + get.attitude(players[i],player)>=3){ + return 11-get.value(card); + } + } + if(player.countCards('h')>player.hp) return 10-get.value(card); + if(player.countCards('h')>2) return 6-get.value(card); + return -1; + } + return 10-get.value(card); + }, + content:function(){ + player.give(cards,target).gaintag.add('twkujianx'); + player.addSkill('twkujian_draw'); + player.addSkill('twkujian_discard'); + }, + ai:{ + expose:0.2, + order:7, + result:{ + target:function(player,target){ + if(target.hasSkillTag('nogain')) return 0; + if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){ + if(target.hasSkillTag('nodu')) return 0; + return -10; + } + if(target.hasJudge('lebu')) return 0; + var nh=target.countCards('h'); + var np=player.countCards('h'); + if(player.hp==player.maxHp||player.storage.jsprende<0||player.countCards('h')<=1){ + if(nh>=np-1&&np<=player.hp&&!target.hasSkill('haoshi')) return 0; + } + return Math.max(1,5-nh); + }, + }, + effect:{ + target:function(card,player,target){ + if(player==target&&get.type(card)=='equip'){ + if(player.countCards('e',{subtype:get.subtype(card)})){ + if(game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)>0; + })){ + return 0; + } + } + } + }, + }, + }, + subSkill:{ + draw:{ + audio:'twkujian', + trigger:{global:['useCardAfter','respondAfter']}, + forced:true, + logTarget:'player', + charlotte:true, + filter:function(event,player){ + return event.player.hasHistory('lose',evt=>{ + if(event!=evt.getParent()) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('twkujianx')) return true; + } + }); + }, + content:function(){ + 'step 0' + game.asyncDraw([player,trigger.player]); + 'step 1' + game.delayx(); + } + }, + discard:{ + audio:'twkujian', + trigger:{global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter']}, + forced:true, + logTarget:function(event,player){ + return game.filterPlayer(function(current){ + var evt=event.getl(current); + if(!evt||!evt.hs||!evt.hs.length) return false; + if(event.name=='lose'){ + var name=event.getParent().name; + if(name=='useCard'||name=='respond') return false; + for(var i in event.gaintag_map){ + if(event.gaintag_map[i].contains('twkujianx')) return true; + } + return false; + } + return current.hasHistory('lose',function(evt){ + if(event!=evt.getParent()) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('twkujianx')) return true; + } + return false; + }); + }); + }, + charlotte:true, + filter:function(event,player){ + return game.hasPlayer(function(current){ + var evt=event.getl(current); + if(!evt||!evt.hs||!evt.hs.length) return false; + if(event.name=='lose'){ + var name=event.getParent().name; + if(name=='useCard'||name=='respond') return false; + for(var i in event.gaintag_map){ + if(event.gaintag_map[i].contains('twkujianx')) return true; + } + return false; + } + return current.hasHistory('lose',function(evt){ + if(event!=evt.getParent()) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('twkujianx')) return true; + } + return false; + }); + }); + }, + content:function(){ + 'step 0' + var event=trigger; + var targets=game.filterPlayer(function(current){ + var evt=event.getl(current); + if(!evt||!evt.hs||!evt.hs.length) return false; + if(event.name=='lose'){ + var name=event.getParent().name; + if(name=='useCard'||name=='respond') return false; + for(var i in event.gaintag_map){ + if(event.gaintag_map[i].contains('twkujianx')) return true; + } + return false; + } + return current.hasHistory('lose',function(evt){ + if(event!=evt.getParent()) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('twkujianx')) return true; + } + return false; + }); + }); + targets.add(player); + targets.sortBySeat(); + _status.event.targets=targets; + 'step 1' + var target=targets.shift(); + if(target.countCards('he')>0) target.chooseToDiscard('he',true); + if(targets.length>0) event.redo(); + } + }, + ai:{ + charlotte:true, + ai:{ + effect:{ + player_use:function(card,player,target){ + if(card.cards&&card.cards.some(i=>i.hasGaintag('twkujianx'))&&game.hasPlayer(current=>{ + return get.attitude(player,current)>0; + })) return [1,1]; + }, + }, + }, + mod:{ + aiOrder:function(player,card,num){ + if(get.itemtype(card)=='card'&&card.hasGaintag('twkujianx')&&game.hasPlayer(current=>{ + return get.attitude(player,current)>0; + })) return num+0.5; + }, + aiValue:function(player,card,num){ + if(get.itemtype(card)=='card'&&card.hasGaintag('twkujianx')&&game.hasPlayer(current=>{ + return get.attitude(player,current)>0; + })) return num+0.5; + } + } + } + } + }, + twruilian:{ + audio:2, + trigger:{global:'roundStart'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('twruilian')).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target),eff=att/(player==target?2:1)+1; + if(att>=0){ + if(target.hasSkill('yongsi')) return eff*5; + if(target.hasSkill('zhiheng')||target.hasSkill('rezhiheng')) return eff*4; + if(target.hasSkill('rekurou')) return eff*3; + if(target.hasSkill('xinlianji')||target.hasSkill('dclianji')) return eff*2; + if(target.needsToDiscard()) return eff*1.5; + return eff; + } + return 0; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('twruilian',target); + player.markAuto('twruilian2',[target]); + player.addSkill('twruilian2'); + } + }, + }, + twruilian2:{ + trigger:{global:'phaseEnd'}, + direct:true, + charlotte:true, + onremove:true, + filter:function(event,player){ + return player.getStorage('twruilian2').contains(event.player); + }, + intro:{content:'已选择$'}, + content:function(){ + 'step 0' + player.removeSkill('twruilian2'); + var target=trigger.player; + event.target=target; + var cards=[]; + target.getHistory('lose',function(evt){ + if(evt.type=='discard') cards.addArray(evt.cards2); + }); + if(cards.length<2) event.finish(); + else event.cards=cards; + 'step 1' + var list=[]; + for(var type of ['basic','trick','equip']){ + for(var card of event.cards){ + if(get.type2(card)==type){ + list.push(type); + break; + } + } + } + list.push('cancel2'); + player.chooseControl(list).set('prompt','睿敛:是否与'+get.translation(target)+'各获得一种类型的牌?').set('ai',function(){ + var player=_status.event.player,list=_status.event.controls; + if(player.hp<=3&&!player.countCards('h',{name:['shan','tao']})&&list.contains('basic')) return 'basic'; + if(player.countCards('he',{type:'equip'})<2&&list.contains('equip')) return 'equip'; + if(list.contains('trick')) return 'trick'; + return list.remove('cancel2').randomGet(); + }); + 'step 2' + if(result.control!='cancel2'){ + player.logSkill('twruilian2',target); + var type=result.control; + var list=[target,player].sortBySeat(_status.currentPhase),cards=[]; + for(var current of list){ + var card=get.discardPile(function(card){ + return get.type2(card)==type&&!cards.contains(card); + }); + if(card){ + cards.push(card); + current.gain(card,'gain2'); + } + } + } + }, + }, + //夏侯恩 + twfujian:{ + audio:2, + group:'twfujian_lose', + trigger:{ + global:'phaseBefore', + player:['enterGame','phaseZhunbeiBegin'] + }, + filter:function(event,player){ + if(player.getEquip(1)) return false; + return event.name!='phase'||game.phaseNumber==0; + }, + forced:true, + content:function(){ + var card=get.cardPile2(function(card){ + return get.type(card)=='equip'&&get.subtype(card)=='equip1'; + }); + event.card=card; + if(card) player.equip(card); + else{ + game.log('但是牌堆中没有武器牌了!'); + event.finish(); + } + }, + subSkill:{ + lose:{ + audio:'twfujian', + trigger:{ + player:'loseAfter', + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], + }, + filter:function(event,player){ + if(player==_status.currentPhase) return false; + if(event.name=='gain'&&event.player==player) return false; + var evt=event.getl(player); + if(evt&&evt.cards2&&evt.cards2.some(i=>get.subtype(i)=='equip1')) return true; + return false; + }, + forced:true, + content:function(){ + player.loseHp(); + }, + }, + }, + }, + twjianwei:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + filter:function(event,player){ + if(!player.getEquip(1)) return false; + return game.hasPlayer(function(current){ + return player.inRange(current)&&player.canCompare(current); + }); + }, + pindianCheck:function(player,target){ + var hs=player.getCards('h').sort(function(a,b){ + return b.number-a.number; + }); + var ts=target.getCards('h').sort(function(a,b){ + return b.number-a.number; + }); + if(!hs.length||!ts.length) return 0; + if(Math.min(13,hs[0].number+player.getAttackRange())>ts[0].number||ts[0].number>9&&get.value(ts[0])<=5||target.countCards('j')) return true; + return false; + }, + direct:true, + locked:false, + group:['twjianwei_pindian','twjianwei_zhaocha'], + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('twjianwei'),'与攻击范围内的一名角色拼点。若你赢,你获得其每个区域里的一张牌;若其赢,其获得你装备区里的武器牌',function(card,player,target){ + return player.inRange(target)&&player.canCompare(target); + }).set('ai',function(target){ + var player=_status.event.player; + if(lib.skill.twjianwei.pindianCheck(player,target)) return -5*get.attitude(player,target); + return -get.attitude(player,target); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twjianwei',target); + player.chooseToCompare(target); + } + else event.finish(); + 'step 2' + if(result.bool){ + var num=0; + if(target.countCards('h')) num++; + if(target.countCards('e')) num++; + if(target.countCards('j')) num++; + if(num){ + player.gainPlayerCard(target,num,'hej',true).set('filterButton',function(button){ + for(var i=0; i13) trigger.num1=13; + } + else { + trigger.num2+=num; + if(trigger.num2>13) trigger.num2=13; + } + game.log(player,'的拼点牌点数+'+num); + }, + }, + //你是故意找茬是不是 + zhaocha:{ + trigger:{global:'phaseZhunbeiBegin'}, + filter:function(event,player){ + if(event.player==player) return false; + return event.player.canCompare(player); + }, + direct:true, + content:function(){ + 'step 0' + trigger.player.chooseBool('剑威:是否与'+get.translation(player)+'拼点?','若你赢,你获得其装备区里的武器牌;若其赢,其获得你每个区域里的一张牌').set('ai',()=>_status.event.choice).set('choice',get.attitude(trigger.player,player)<0&&!lib.skill.twjianwei.pindianCheck(player,trigger.player)); + 'step 1' + if(result.bool){ + trigger.player.logSkill('twjianwei',player); + trigger.player.chooseToCompare(player); + } + else event.finish(); + 'step 2' + if(!result.tie){ + if(result.bool){ + var card=player.getEquip(1); + if(card) trigger.player.gain(card,player,'give'); + } + else { + var num=0; + if(trigger.player.countCards('h')) num++; + if(trigger.player.countCards('e')) num++; + if(trigger.player.countCards('j')) num++; + if(num) player.gainPlayerCard(trigger.player,num,'hej',true).set('filterButton',function(button){ + for(var i=0; i0; + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('twtanfeng'),function(card,player,target){ + return target!=player&&target.countDiscardableCards('hej',player)>0; + }).set('ai',function(target){ + var player=_status.event.player,num=1; + if(get.attitude(player,target)>0) num=3; + else if(!target.countCards('he')||!target.canUse('sha',player)){ + if(target.hp+target.countCards('hs',{name:['tao','jiu']})<=1) num=2; + else num=1.2; + } + return get.effect(target,{name:'guohe'},player,player)*num*((player.hp<=1&&get.attitude(player,target)<=0)?0:1); + }).setHiddenSkill(event.name); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twtanfeng',target); + player.discardPlayerCard(target,'hej',true); + } + else event.finish(); + 'step 2' + target.chooseCardTarget({ + position:'hes', + prompt:'选择一张牌当做【杀】对'+get.translation(player)+'使用', + prompt2:'或点击“取消”,受到其造成的1点火焰伤害,并令其跳过本回合的一个阶段(准备阶段和结束阶段除外)', + filterCard:function(card,player){ + return player.canUse(get.autoViewAs({name:'sha'},[card]),_status.event.getParent().player,false); + }, + filterTarget:function(card,player,target){ + var source=_status.event.getParent().player; + if(target!=source&&!ui.selected.targets.contains(source)) return false; + card=get.autoViewAs({name:'sha'},[card]); + return lib.filter.filterTarget.apply(this,arguments); + }, + ai1:function(card){ + var player=_status.event.player,target=_status.event.getParent().player; + var eff=get.effect(target,get.autoViewAs({name:'sha'},[card]),player,player); + var eff2=get.damageEffect(player,target,player,'fire'); + if(eff<0||eff2>0||eff2>eff||get.tag(card,'recover')) return 0; + return (player.hp==1?10:6)-get.value(card); + }, + ai2:function(target){ + if(target==_status.event.getParent().player) return 100; + return get.effect(target,{name:'sha'},_status.event.player); + } + }); + 'step 3' + if(result.bool){ + var cards=result.cards,targets=result.targets; + var cardx=get.autoViewAs({name:'sha'},cards); + target.useCard(cardx,cards,targets,false); + event.finish(); + } + else{ + player.line(target,'fire'); + target.damage(1,'fire'); + } + 'step 4' + if(!target.isIn()){ + event.finish(); return; + } + var list=[]; + var list2=[]; + event.map={phaseJudge:'判定阶段',phaseDraw:'摸牌阶段',phaseUse:'出牌阶段',phaseDiscard:'弃牌阶段'}; + for(var i of ['phaseJudge','phaseDraw','phaseUse','phaseDiscard']){ + if(!player.skipList.contains(i)){ + i=event.map[i]; + list.push(i); + if(i!='判定阶段'&&i!='弃牌阶段') list2.push(i); + } + } + target.chooseControl(list).set('prompt','探锋:令'+get.translation(player)+'跳过一个阶段').set('ai',function(){ + return _status.event.choice; + }).set('choice',function(){ + var att=get.attitude(target,player); + var num=player.countCards('j'); + if(att>0){ + if(list.contains('判定阶段')&&num>0) return '判定阶段'; + return '弃牌阶段'; + } + if(list.contains('摸牌阶段')&&player.hasJudge('lebu')) return '摸牌阶段'; + if(list.contains('出牌阶段')&&player.hasJudge('bingliang')||player.needsToDiscard()>0) return '出牌阶段'; + return list2.randomGet(); + }()); + 'step 5' + for(var i in event.map){ + if(event.map[i]==result.control) player.skip(i); + } + target.popup(result.control); + target.line(player); + game.log(player,'跳过了','#y'+result.control); + }, + }, + //宗预 + twzhibian:{ + audio:'zhibian', + trigger:{player:'phaseUseBegin'}, + filter:function(event,player){ + return game.hasPlayer((current)=>(current!=player&&player.canCompare(current))); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('twzhibian'),'与一名其他角色拼点',function(card,player,target){ + return target!=player&&player.canCompare(target); + }).set('ai',function(target){ + if(!_status.event.goon) return false; + var att=get.attitude(player,target); + if(att<0&&(target.countCards('h')>1||target.countCards('e',function(card){ + return player.canEquip(card)&&get.effect(player,card,target,player)>0; + }))) return -att/Math.sqrt(target.countCards('h')); + if(!player.isDamaged()) return false; + if(att<=0) return (1-att)/Math.sqrt(target.countCards('h')); + return Math.sqrt(2/att*Math.sqrt(target.countCards('h'))); + }).set('goon',function(){ + if(!player.hasCard(function(card){ + return (card.number>=14-player.hp&&get.value(card)<=5); + })) return false; + return true; + }()); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twzhibian',target); + player.chooseToCompare(target); + } + else event.finish(); + 'step 2' + if(result.bool){ + var list=[],list2=[ + '将'+get.translation(target)+'区域中的一张牌移动到你的区域内', + '回复1点体力', + '背水!弃置一张非基本牌,并依次执行上述所有选项', + ]; + if(target.countCards('h')||target.hasCard(function(card){ + return player.canEquip(card); + },'e')||target.hasCard(function(card){ + return player.canAddJudge(card); + },'j')) list.push('选项一'); + else list2[0]=''+list2[0]+''; + if(player.isDamaged()) list.push('选项二'); + else list2[1]=''+list2[1]+''; + if(!list.length){event.finish(); return;} + if(player.countCards('he',card=>get.type(card)!='basic')) list.push('背水!') + else list2[2]=''+list2[2]+''; + list.push('cancel2'); + player.chooseControl(list).set('prompt','直辩:选择一项').set('choiceList',list2).set('ai',function(target){ + if(_status.event.controls.contains('背水!')&&player.isDamaged()&&(target.countCards('h')||target.countCards('e',function(card){ + return player.canEquip(card)&&get.value(card,target)>=4+player.getDamagedHp(); + }))) return 2; + if(player.isDamaged()&&(player.hp<=2||(!targtet.countCards('h')&&!target.countCards('e',function(card){ + return player.canEquip(card)&&get.value(card,target)>=4+player.getDamagedHp(); + })))) return 1; + return 0; + }); + } + else { + player.loseHp(); + event.finish(); + } + 'step 3' + if(result.control!='cancel2'){ + event.control=result.control; + if(result.control=='背水!'&&player.countCards('he',function(card){ + return get.type(card)!='basic'; + })) player.chooseToDiscard('he',true,function(card){ + return get.type(card)!='basic'; + }); + } + else event.finish(); + 'step 4' + if(event.control=='选项一'||event.control=='背水!'){ + player.choosePlayerCard(target,'hej',true).set('ai',get.buttonValue); + } + else event.goto(6); + 'step 5' + if(result.bool){ + var card=result.cards[0]; + switch (get.position(card)){ + case 'h':player.gain(card,target,'giveAuto'); break; + case 'e':target.$give(card,player,false); player.equip(card); break; + case 'j':target.$give(card,player,false); player.addJudge(card); break; + } + } + 'step 6' + if(event.control=='选项二'||event.control=='背水!') player.recover(); + }, + }, + twyuyan:{ + audio:'yuyan', + trigger:{target:'useCardToTarget'}, + filter:function(event,player){ + return event.card.name=='sha'&&event.card.isCard&&player.hp=13||!trigger.player.hasCard(function(card){ + if(_status.connectMode&&get.position(card)=='h') return true; + return get.number(card)>num; + },'he')))||(typeof num!='number'&&!trigger.player.hasCard(function(card){ + if(_status.connectMode&&get.position(card)=='h') return true; + return get.type(card)!='basic'; + },'he'))) event._result={bool:false}; + else trigger.player.chooseCard('he',function(card){ + if(typeof _status.event.number=='number') return get.number(card)>_status.event.number; + return get.type(card)!='basic'; + },'交给'+get.translation(player)+'一张'+str+'牌,或取消'+get.translation(trigger.card)+'对其的目标').set('number',num).set('ai',function(card){ + if(card.name=='shan'||card.name=='tao'||card.name=='jiu') return false; + return 6-get.value(card); + }); + 'step 1' + if(result.bool) trigger.player.give(result.cards,player); + else{ + trigger.targets.remove(player); + trigger.getParent().triggeredTargets2.remove(player); + trigger.untrigger(); + } + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(card.name=='sha'&&player.hp>target.hp&&get.attitude(player,target)<0){ + var num=get.number(card); + var bs=player.getCards('h',function(cardx){ + return (typeof num=='number'?(get.number(cardx)>num):(get.type(cardx)!='basic'))&&!['','',''].contains(cardx.name); + }); + if(bs.length<2) return 0; + if(player.hasSkill('jiu')||player.hasSkill('tianxianjiu')) return; + if(bs.length<=2){ + for(var i=0; i{ + if(player!=evt.player&&evt._dyinged) targets.add(evt.player); + }); + return targets.length>=2; + }, + forced:true, + dutySkill:true, + skillAnimation:true, + animationColor:'wood', + group:'twchuhai_lose', + content:function(){ + 'step 0' + game.log(player,'成功完成使命'); + player.awakenSkill('twchuhai'); + if(!player.storage._disableJudge) player.disableJudge(); + event.current=player.next; + 'step 1' + if(!event.current.countCards('he')) event.goto(3); + else event.current.chooseCard('交给'+get.translation(player)+'一张牌','he',true).set('ai',get.disvalue2); + 'step 2' + if(result.bool&&result.cards&&result.cards.length) event.current.give(result.cards,player); + 'step 3' + event.current=event.current.next; + if(event.current!=player) event.goto(1); + }, + subSkill:{ + lose:{ + audio:'chuhai', + trigger:{ + global:['gainAfter','loseAsyncAfter'] + }, + forced:true, + dutySkill:true, + filter:function(event,player){ + var cards=event.getg(player); + if(!cards.length) return false; + return game.hasPlayer(current=>{ + if(current==player) return false; + var evt=event.getl(current); + if(evt&&evt.cards&&evt.cards.length) return true; + return false; + }); + }, + content:function(){ + 'step 0' + var cards=trigger.getg(player); + if(!cards.length){ + event.finish(); + return; + } + player.chooseCard('h','除害:将其中一张获得的牌置入弃牌堆',true,function(card){ + return _status.event.cards.contains(card); + }).set('ai',function(card){ + return -get.value(card); + }).set('cards',cards); + 'step 1' + if(result.bool) player.loseToDiscardpile(result.cards); + }, + }, + }, + }, + //桥公 + twyizhu:{ + audio:'yizhu', + group:['twyizhu_use','twyizhu_discard'], + trigger:{player:'phaseJieshuBegin'}, + forced:true, + locked:false, + content:function(){ + 'step 0' + player.draw(2); + 'step 1' + var hs=player.getCards('he'); + if(!hs.length) event.finish(); + else if(hs.length<=2) event._result={bool:true,cards:hs}; + else player.chooseCard('he',true,2,'选择两张牌洗入牌堆'); + 'step 2' + if(result.bool){ + player.$throw(result.cards.length,1000); + player.lose(result.cards,ui.cardPile).insert_index=function(){ + return ui.cardPile.childNodes[get.rand(0,game.players.length*2-2)]; + } + player.markAuto('twyizhu',result.cards); + } + else event.finish(); + 'step 3' + game.updateRoundNumber(); + game.delayx(); + }, + intro:{ + mark:function(dialog,content,player){ + if(player==game.me||player.isUnderControl()) dialog.addAuto(content); + else { + var names=[]; + for(var i of content) names.add(i.name); + return get.translation(names); + } + }, + }, + subSkill:{ + use:{ + audio:'yizhu', + trigger:{global:'useCardToPlayer'}, + filter:function(event,player){ + return player.getStorage('twyizhu').length&& + event.player!=player&&event.targets.length==1&& + event.cards.filter(function(i){ + return player.getStorage('twyizhu').contains(i); + }).length>0; + }, + logTarget:'player', + forced:true, + locked:false, + content:function(){ + 'step 0' + var list=[]; + if(!game.hasPlayer(function(current){ + return current!=trigger.target&&lib.filter.targetEnabled2(trigger.card,trigger.player,current); + })) event.goto(3); + var filter=function(event,player){ + var card=event.card,info=get.info(card); + if(info.allowMultiple==false) return false; + if(!info.multitarget){ + return game.hasPlayer(current=>lib.filter.targetEnabled2(card,player,current)); + } + return false; + } + var enable=filter(trigger.getParent(),trigger.player); + var prompt2='操作提示:'; + if(enable) prompt2+='选择一名合法的其他角色,以增加其为目标;或'; + prompt2+='选择目标角色('+get.translation(trigger.target)+')和另一名合法的角色,以取消前者为目标并增加后者为目标'; + player.chooseTarget('遗珠:是否'+(enable?'增加或':'')+'修改目标?',prompt2,[enable?1:2,2],(card,player,target)=>{ + var evt=_status.event.getTrigger(),card=evt.card; + if(target==evt.target) return true; + if(ui.selected.targets.length&&ui.selected.targets[0]!=evt.target) return false; + return lib.filter.targetEnabled2(card,evt.player,target); + }).set('targetprompt',target=>{ + return target==_status.event.targetx?'取消目标':'增加目标'; + }).set('filterOk',()=>{ + if(ui.selected.targets.length==1&&ui.selected.targets[0]==_status.event.targetx) return false; + return true; + }).set('ai',target=>{ + var evt=_status.event.getTrigger(),card=evt.card,player=_status.event.player; + if(target==evt.target&&get.effect(evt.target,card,evt.player,player)<0) return 100; + if(target==evt.target) return -100; + return get.effect(target,card,evt.player,player); + }).set('targetx',trigger.target).set('card',trigger.card); + 'step 1' + if(result.bool){ + var target=result.targets[result.targets[0]==trigger.target?1:0]; + if(result.targets.length>1) { + player.line2([trigger.target,target]); + trigger.targets.remove(trigger.target); + trigger.getParent().triggeredTargets1.remove(trigger.target); + trigger.untrigger(); + } + else player.line(target); + trigger.targets.push(target); + } + 'step 2' + var list=trigger.cards.filter(function(i){ + return player.getStorage('twyizhu').contains(i); + }); + player.unmarkAuto('twyizhu',list); + player.draw(); + game.delayx(); + }, + }, + discard:{ + trigger:{ + global:['loseAfter','cardsDiscardAfter','loseAsyncAfter','equipAfter'], + }, + silent:true, + forced:true, + locked:false, + filter:function(event,player){ + return player.getStorage('twyizhu').length&&event.getd().filter(function(i){ + return player.getStorage('twyizhu').contains(i); + }).length>0; + }, + content:function(){ + var list=trigger.getd().filter(function(i){ + return player.getStorage('twyizhu').contains(i); + }); + player.unmarkAuto('twyizhu',list); + }, + }, + }, + }, + twluanchou:{ + audio:'luanchou', + enable:'phaseUse', + usable:1, + selectTarget:2, + filterTarget:true, + multitarget:true, + multiline:true, + content:function(){ + 'step 0' + game.countPlayer(function(current){ + current.removeSkill('twgonghuan'); + }); + 'step 1' + targets.sortBySeat(); + for(var i of targets) i.addSkillLog('twgonghuan'); + }, + derivation:'twgonghuan', + ai:{ + order:10, + expose:0.2, + result:{ + target:function(player,target){ + return Math.max(0.1,target.hp)*(get.attitude(player,target)+20); + }, + }, + }, + }, + twgonghuan:{ + audio:'gonghuan', + trigger:{global:'damageBegin4'}, + usable:1, + filter:function(event,player){ + if(event.player==player) return false; + return !event.twgonghuan&&event.player.hp<=player.hp&&event.player.hasSkill('twgonghuan'); + }, + check:function(event,player){ + if(get.damageEffect(event.player,event.source,player)>0||(get.attitude(player,event.player)>0&&get.damageEffect(event.player,event.source,event.player)>0)) return false; + return get.attitude(player,event.player)>0&&event.player.hp0); + }, + logTarget:'player', + content:function(){ + trigger.cancel(); + target.damage(trigger.source,trigger.nature,trigger.num).set('card',trigger.card).set('cards',trigger.cards).twgonghuan=true; + }, + }, + //桥蕤 + twxiawei:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + group:['twxiawei_init','twxiawei_lose','twxiawei_unmark'], + content:function(){ + 'step 0' + player.chooseControl('1','2','3','4','cancel2').set('prompt',get.prompt('twxiawei')).set('prompt2','妄行:将X+1张牌置于武将牌上,称为“威”').set('ai',function(){ + var player=_status.event.player; + if(player.maxHp>3) return 3; + return Math.min(3,player.countCards('he')+1); + }); + 'step 1' + if(result.control!='cancel2'){ + var num=result.index+1,cards=get.cards(num+1); + player.logSkill('twxiawei'); + player.addTempSkill('wangxing'); + player.addMark('wangxing',num,false); + player.$gain2(cards,false); + game.log(player,'将',cards,'作为“威”置于了武将牌上'); + player.loseToSpecial(cards,'twxiawei').visible=true; + } + else event.finish(); + 'step 2' + player.markSkill('twxiawei'); + game.delayx(); + }, + marktext:'威', + intro:{ + mark:function(dialog,storage,player){ + var cards=player.getCards('s',function(card){ + return card.hasGaintag('twxiawei'); + }); + if(!cards||!cards.length) return; + dialog.addAuto(cards); + }, + markcount:function(storage,player){ + return player.countCards('s',function(card){ + return card.hasGaintag('twxiawei'); + }); + }, + onunmark:function(storage,player){ + var cards=player.getCards('s',function(card){ + return card.hasGaintag('twxiawei'); + }); + if(cards.length){ + player.loseToDiscardpile(cards); + } + }, + }, + mod:{ + aiOrder:function(player,card,num){ + if(get.itemtype(card)=='card'&&card.hasGaintag('twxiawei')) return num+0.5; + }, + }, + subSkill:{ + init:{ + audio:'twxiawei', + trigger:{global:'phaseBefore',player:'enterGame'}, + filter:function(event,player){ + return event.name!='phase'||game.phaseNumber==0; + }, + forced:true, + locked:false, + content:function(){ + 'step 0' + var cards=[]; + for(var i=1;i<=2;i++){ + var card=get.cardPile2(function(card){ + return !cards.contains(card)&&get.type(card)=='basic'; + }); + if(card) cards.push(card); + } + if(cards.length){ + player.$gain2(cards,false); + game.log(player,'将',cards,'作为“威”置于了武将牌上'); + player.loseToSpecial(cards,'twxiawei').visible=true; + } + else event.finish(); + 'step 1' + player.markSkill('twxiawei'); + game.delayx(); + }, + }, + lose:{ + audio:'twxiawei', + trigger:{player:'phaseBegin'}, + filter:function(event,player){ + return player.countCards('s',function(card){ + return card.hasGaintag('twxiawei'); + }); + }, + forced:true, + locked:false, + content:function(){ + var cards=player.getCards('s',function(card){ + return card.hasGaintag('twxiawei'); + }); + player.loseToDiscardpile(cards); + }, + }, + unmark:{ + trigger:{player:'loseAfter'}, + filter:function(event,player){ + if(!event.ss||!event.ss.length) return false; + return !player.countCards('s',function(card){ + return card.hasGaintag('twxiawei'); + }); + }, + charlotte:true, + forced:true, + silent:true, + content:function(){ + player.unmarkSkill('twxiawei'); + }, + }, + }, + }, + wangxing:{ + trigger:{player:'phaseEnd'}, + charlotte:true, + onremove:true, + forced:true, + popup:false, + filter:function(event,player){ + return player.countMark('wangxing')>0; + }, + content:function(){ + 'step 0' + player.chooseToDiscard('he',player.countMark('wangxing'),'妄行:请弃置'+get.cnNumber(player.countMark('wangxing'))+'张牌,或减1点体力上限').set('ai',function(card){ + var player=_status.event.player; + if(player.maxHp==1) return 100-get.value(card); + return 5+Math.max(0,5-player.maxHp)-get.value(card); + }); + 'step 1' + if(!result.bool) player.loseMaxHp(); + }, + intro:{content:'回合结束时,你须弃置#张牌,否则减1点体力上限'}, + }, + twqiongji:{ + audio:2, + trigger:{player:['useCardAfter','respondAfter','damageBegin3']}, + filter:function(event,player){ + if(event.name=='damage') return !player.countCards('s',function(card){ + return card.hasGaintag('twxiawei'); + }); + return !player.hasSkill('twqiongji_silent')&&player.getHistory('lose',function(evt){ + if(evt.getParent()!=event) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('twxiawei')) return true; + } + return false; + }).length>0; + }, + forced:true, + content:function(){ + if(trigger.name=='damage') trigger.num++; + else { + player.draw(); + player.addTempSkill('twqiongji_silent'); + } + }, + ai:{combo:'twxiawei'}, + subSkill:{silent:{charlotte:true}}, + }, + //卞夫人 + twwanwei:{ + audio:'wanwei', + trigger:{global:'damageBegin4'}, + filter:function(event,player){ + return event.player.isMinHp(); + }, + check:function(event,player){ + return get.attitude(player,event.player)>0&&event.player.hpplayer.maxHp + })){ + return '于当前回合的结束阶段获得牌堆顶的牌并展示牌堆底的牌,若展示的牌能被使用,你使用之'; + } + }, + content:function(){ + if(trigger.player!=player){ + trigger.cancel(); + player.loseHp(); + } + if(trigger.player==player||!game.hasPlayer(function(current){ + return current!=player&¤t.maxHp>player.maxHp + })) player.addTempSkill('twwanwei_effect'); + }, + subSkill:{ + effect:{ + audio:'wanwei', + charlotte:true, + trigger:{global:'phaseJieshuBegin'}, + prompt2:'获得牌堆顶的牌并展示牌堆底的牌,若展示的牌能被使用,你使用之', + content:function(){ + 'step 0' + var card=get.cards()[0]; + player.gain(card,'gain2'); + 'step 1' + var card=get.bottomCards()[0]; + ui.cardPile.appendChild(card); + game.updateRoundNumber(); + player.showCards([card],get.translation(player)+'挽危:牌堆底的牌'); + if(player.hasUseTarget(card)) player.chooseUseTarget(card,true); + }, + }, + }, + }, + twyuejian:{ + audio:'yuejian', + enable:'phaseUse', + filterCard:true, + selectCard:function(){ + var player=_status.event.player; + var num=Math.max(1,player.countCards('h')-player.getHandcardLimit()); + return [1,num]; + }, + complexCard:true, + discard:false, + loseTo:'cardPile', + insert:true, + visible:true, + delay:false, + position:'he', + usable:1, + check:function(card){ + if(ui.selected.cards.length>=3) return 0; + var player=_status.event.player; + var num=Math.max(1,player.countCards('h')-player.getHandcardLimit()); + if(num>=3) return 5-get.value(card); + if(num>=2&&player.isDamaged()&&ui.selected.cards.length<1) return 7-get.value(card); + if(num>=1&&player.isDamaged()&&!ui.selected.cards.length) return 6-get.value(card); + return 0; + }, + content:function(){ + 'step 0' + player.$throw(cards.length); + var next=player.chooseToMove(); + next.set('list',[ + ['牌堆顶',cards], + ['牌堆底'], + ]); + next.set('prompt','约俭:将这些牌置于牌堆顶或牌堆底'); + next.set('processAI',function(list){ + var cards=list[0][1],player=_status.event.player; + var target=player.next; + var att=get.sgn(get.attitude(player,target)); + var top=[]; + var judges=target.getCards('j'); + var stopped=false; + if(player!=target||!target.hasWuxie()){ + for(var i=0;i0)) break; + top.unshift(cards.shift()); + } + } + bottom=cards.sort(function(a,b){ + return player.getUseValue(a)-player.getUseValue(b); + }); + return [top,bottom]; + }); + 'step 1' + var top=result.moved[0]; + var bottom=result.moved[1]; + top.reverse(); + for(var i=0;i=3) player.gainMaxHp(); + 'step 3' + if(cards.length>=2) player.recover(); + 'step 4' + if(cards.length>=1){ + player.addSkill('twyuejian_effect'); + player.addMark('twyuejian_effect',1,false); + } + }, + ai:{ + order:5, + result:{player:1}, + }, + subSkill:{ + effect:{ + charlotte:true, + onremove:true, + marktext:'俭', + intro:{ + content:'手牌上限+#', + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('twyuejian_effect'); + }, + }, + }, + }, + }, + //陈震 + twmuyue:{ + audio:1, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he')||player.hasSkill('twmuyue_effect'); + }, + chooseButton:{ + dialog:function(){ + var list=[]; + for(var i of lib.inpile){ + var type=get.type(i); + if(type=='basic'||type=='trick') list.push([type,'',i]); + } + return ui.create.dialog('睦约',[list,'vcard']); + }, + check:function(button){ + if(!get.cardPile2(function(cardx){ + return cardx.name==button.link[2]; + })) return 0; + return get.value({name:button.link[2]}); + }, + backup:function(links,player){ + return{ + audio:'twmuyue', + filterCard:function(card,player,target){ + return !player.hasSkill('twmuyue_effect'); + }, + selectCard:function(){ + var player=_status.event.player; + return player.hasSkill('twmuyue_effect')?-1:1; + }, + check:function(card){ + return 7-get.value(card); + }, + position:'he', + card:links[0], + filterTarget:true, + content:function(){ + 'step 0' + var card=lib.skill.twmuyue_backup.card; + event.card=card; + player.removeSkill('twmuyue_effect'); + var card=get.cardPile2(function(cardx){ + return cardx.name==card[2]; + }); + player.line(target,'green'); + if(card) target.gain(card,'gain2'); + else { + player.chat('无牌可得了吗?!'); + game.log('但是牌堆中已经没有','#g【'+get.translation(card[2])+'】','了!'); + } + 'step 1' + if(cards&&cards.length&&get.name(cards[0],player)==card[2]) player.addSkill('twmuyue_effect'); + }, + ai:{ + result:{ + target:function(player,target){ + var att=Math.abs(get.attitude(player,target)); + if(target.hasSkill('nogain')) att/=10; + return att/Math.sqrt(get.distance(player,target,'absolute')); + } + } + }, + } + }, + prompt:function(links,player){ + return (player.hasSkill('twmuyue_effect')?'':'弃置一张牌,')+'令一名角色从牌堆中获得一张【'+get.translation(links[0][2])+'】'; + } + }, + ai:{ + order:3, + result:{player:1}, + }, + subSkill:{ + effect:{ + charlotte:true, + mark:true, + intro:{content:'下一次发动【睦约】无需弃牌'}, + }, + backup:{}, + }, + }, + twchayi:{ + audio:1, + trigger:{player:'phaseJieshuBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('twchayi'),lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player; + return -get.attitude(player,target); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twchayi',target); + if(!target.countCards('h')) event._result={index:1}; + else target.chooseControl().set('choiceList',[ + '展示手牌', + '下一次使用牌时候弃一张牌', + ]); + } + else event.finish(); + 'step 2' + target.storage.twchayi_re=[result.index,target.countCards('h')]; + target.addSkill('twchayi_re'); + target.markSkill('twchayi_re'); + if(result.index==0) target.showCards(target.getCards('h'),get.translation(target)+'的手牌'); + else{ + target.addMark('twchayi_effect',1,false); + target.addSkill('twchayi_effect'); + } + }, + subSkill:{ + effect:{ + intro:{content:'使用下一张牌时弃置&张牌'}, + charlotte:true, + audio:'twchayi', + trigger:{player:'useCard'}, + forced:true, + content:function(){ + player.chooseToDiscard('he',true,player.countMark('twchayi_effect')); + player.removeSkill('twchayi_effect'); + }, + }, + re:{ + charlotte:true, + onremove:true, + audio:'twchayi', + trigger:{player:'phaseEnd'}, + direct:true, + filter:function(event,player){ + return player.storage.twchayi_re; + }, + content:function(){ + if(player.countCards('h')!=player.storage.twchayi_re[1]){ + player.popup('察异'); + if(player.storage.twchayi_re[0]==0){ + player.addMark('twchayi_effect',1,false); + player.addSkill('twchayi_effect'); + } + else player.showCards(player.getCards('h'),get.translation(player)+'的手牌'); + } + player.removeSkill('twchayi_re'); + }, + marktext:'异', + intro:{ + markcount:function(storage,player){ + if(!storage||!storage.length) return 0; + return storage[1]; + }, + content:function(storage,player){ + if(!storage||!storage.length) return; + return '下个回合结束时,若你的手牌数不为'+storage[1]+',你'+(storage[0]==0?'下次使用牌时弃置一张牌':'展示所有手牌'); + } + } + }, + }, + }, + //费祎 + twshengxi:{ + audio:'shengxi_feiyi', + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.getHistory('useCard').length>0&&player.getHistory('sourceDamage').length==0; + }, + direct:true, + content:function(){ + 'step 0' + var list=get.zhinangs(); + player.chooseButton(['###'+get.prompt('twshengxi')+'###获得一张智囊并摸一张牌',[list,'vcard']]).set('ai',function(card){ + return (Math.random()+0.5)*get.value({name:card.link[2]},_status.event.player) + }); + 'step 1' + if(result.bool){ + player.logSkill('twshengxi'); + var card=get.cardPile2(function(card){ + return card.name==result.links[0][2]; + }); + if(card) player.gain(card,'gain2'); + player.draw(); + } + }, + group:'twshengxi_zhunbei', + subfrequent:['zhunbei'], + subSkill:{ + zhunbei:{ + audio:'shengxi_feiyi', + trigger:{player:'phaseZhunbeiBegin'}, + frequent:true, + prompt2:'从游戏外或牌堆中获得一张【调剂盐梅】', + content:function(){ + if(!_status.tiaojiyanmei_suits||_status.tiaojiyanmei_suits.length>0){ + if(!lib.inpile.contains('tiaojiyanmei')){ + game.broadcastAll(function(){lib.inpile.add('tiaojiyanmei')}); + } + if(!_status.tiaojiyanmei_suits) _status.tiaojiyanmei_suits=lib.suit.slice(0); + player.gain(game.createCard2('tiaojiyanmei',_status.tiaojiyanmei_suits.randomRemove(),6),'gain2'); + } + else { + var card=get.cardPile2(function(card){ + return card.name=='tiaojiyanmei'; + }); + if(card) player.gain(card,'gain2'); + } + }, + }, + }, + }, + twkuanji:{ + audio:'fyjianyu', + trigger:{ + player:'loseAfter', + global:['cardsDiscardAfter','loseAsyncAfter','equipAfter'], + }, + filter:function(event,player){ + if(event.name!='cardsDiscard'){ + return event.getd(player,'cards2').length>0; + } + else{ + if(event.cards.filterInD('d').length<=0) return false; + var evt=event.getParent(); + if(evt.name!='orderingDiscard') return false; + var evtx=(evt.relatedEvent||evt.getParent()); + if(evtx.player!=player) return false; + if(evtx.name=='useCard') return false; + return player.hasHistory('lose',evtxx=>{ + return evtx==(evtxx.relatedEvent||evtxx.getParent()); + }); + } + }, + usable:1, + direct:true, + content:function(){ + 'step 0' + var cards=[]; + if(trigger.name!='cardsDiscard'){ + cards=trigger.getd(player,'cards2'); + } + else cards=trigger.cards.filterInD('d'); + player.chooseButton(['宽济:是否将一张牌交给一名其他角色?',cards]).set('ai',function(button){ + var player=_status.event.player; + if(game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)>0; + })) return Math.abs(get.value(button.link,'raw'))+1; + return -get.value(button.link,'raw'); + }); + 'step 1' + if(result.bool){ + var card=result.links[0]; + event.card=card; + player.chooseTarget('请选择【宽济】的目标','令一名其他角色获得'+get.translation(card),lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player; + return get.attitude(player,target)*get.value(_status.event.getParent().card,target)*(target.hasSkillTag('nogain')?0.1:1); + }); + } + else{ + player.storage.counttrigger.twkuanji--; + event.finish(); + } + 'step 2' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('twkuanji',target); + target.gain(card,'gain2'); + } + }, + }, + shengxi_feiyi:{audio:2}, + //王越 + twyulong:{ + audio:2, + trigger:{player:'useCardToPlayered'}, + filter:function(event,player){ + if(!event.isFirstTarget) return false; + if(event.card.name!='sha') return false; + return event.targets.some(target=>player.canCompare(target)); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('twyulong'),(card,player,target)=>{ + return _status.event.getTrigger().targets.contains(target)&&player.canCompare(target); + }).set('ai',target=>{ + if(player.hasCard(card=>get.value(card)<6,'h')) return -get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('twyulong',target); + if(player.canCompare(target)){ + player.chooseToCompare(target); + } + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + var color=get.color(result.player,false); + if(color=='black') trigger.getParent().baseDamage++; + else if(color=='red') trigger.directHit.addArray(game.players); + trigger.getParent().twyulong=true; + player.addTempSkill('twyulong_addCount'); + } + }, + subSkill:{ + addCount:{ + charlotte:true, + forced:true, + trigger:{source:'damageSource'}, + filter:function(event,player){ + if(!event.card||event.card.name!='sha') return false; + var evt=event.getParent(2); + if(evt.name!='useCard'||!evt.twyulong) return false; + return true; + }, + content:function(){ + var evt=trigger.getParent(2); + if(evt.addCount!==false){ + evt.addCount=false; + if(player.stat[player.stat.length-1].card.sha>0){ + player.stat[player.stat.length-1].card.sha--; + } + } + + } + } + } + }, + twjianming:{ + audio:2, + trigger:{player:['useCard','respond']}, + filter:function(event,player){ + if(event.card.name!='sha'||!lib.suit.contains(get.suit(event.card))) return false; + var list=[]; + player.getHistory('useCard',function(evt){ + if(evt.card.name=='sha'){ + if(event.card!=evt.card) list.push(get.suit(evt.card)); + } + }); + player.getHistory('respond',function(evt){ + if(evt.card.name=='sha'){ + if(event.card!=evt.card) list.push(get.suit(evt.card)); + } + }); + return !list.contains(get.suit(event.card)); + }, + forced:true, + content:function(){ + player.draw(); + }, + }, + //李彦 + twzhenhu:{ + audio:2, + trigger:{player:'useCardToPlayer'}, + filter:function(event,player){ + if(!event.isFirstTarget||!get.tag(event.card,'damage')) return false; + return !player.hasSkillTag('noCompareSource')&&game.hasPlayer(target=>player.canCompare(target)); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('twzhenhu'),[1,3],function(card,player,target){ + return player.canCompare(target); + }).set('ai',function(target){ + var player=_status.event.player,targets=_status.event.getTrigger().targets; + var num=0; + if(player.hasSkill('twlvren')) num+=2*(ui.selected.targets.length+1); + if(player.hasSkill('twchuanshu_effect')) num+=3; + var hs=player.getCards('h').sort((a,b)=>get.number(b)-get.number(a)); + var ts=target.getCards('h').sort((a,b)=>get.number(b)-get.number(a)); + if(Math.min(13,get.number(hs[0])+num)<=get.number(ts[0])) return -1; + return get.effect(target,{name:'guohe_copy2'},player,player)/2+(targets.contains(target)?get.damageEffect(target,player,player):0); + }); + 'step 1' + if(result.bool){ + var targets=result.targets.sortBySeat(); + event.targets=targets; + player.logSkill('twzhenhu',targets); + player.draw(); + } + else event.finish(); + 'step 2' + player.chooseToCompare(targets,function(card){ + return get.number(card); + }).setContent(lib.skill.twchaofeng.chooseToCompareMeanwhile); + 'step 3' + if(result.winner&&result.winner==player){ + event.targets.remove(result.winner); + player.line(event.targets,trigger.card.nature); + player.addTempSkill('twzhenhu_add'); + if(!trigger.card.storage) trigger.card.storage={}; + trigger.card.storage.twzhenhu=event.targets; + } + else player.loseHp(); + }, + subSkill:{ + add:{ + charlotte:true, + onremove:true, + forced:true, + popup:false, + trigger:{global:'damageBegin1'}, + filter:function(event,player){ + if(!event.card||!event.card.storage) return false; + var targets=event.card.storage.twzhenhu; + return targets&&targets.contains(event.player); + }, + content:function(){ + trigger.num++; + }, + }, + }, + }, + twlvren:{ + audio:2, + trigger:{source:'damageBegin3'}, + filter:function(event,player){ + return event.player!=player&&event.player.isIn()&&!event.player.hasMark('twlvren'); + }, + logTarget:'player', + forced:true, + locked:false, + group:['twlvren_more','twlvren_add'], + content:function(){ + trigger.player.addMark('twlvren',1); + }, + effect:{ + player:function(card,player,target){ + if(target.hasMark('twlvren')) return 0.33; + }, + }, + marktext:'刃', + intro:{name2:'刃',content:'mark'}, + subSkill:{ + more:{ + audio:'twlvren', + trigger:{player:'useCard2'}, + filter:function(event,player){ + var card=event.card,info=get.info(card); + if(info.allowMultiple==false) return false; + if(event.targets&&!info.multitarget){ + return get.tag(card,'damage')&&event.targets&&game.hasPlayer(function(target){ + return target.hasMark('twlvren')&&!event.targets.contains(target)&&lib.filter.targetEnabled2(card,player,target); + }); + } + return false; + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('twlvren'),'为'+get.translation(trigger.card)+'额外指定一个有“刃”的角色为目标',function(card,player,target){ + var evt=_status.event.getTrigger(); + return target.hasMark('twlvren')&&!evt.targets.contains(target)&&lib.filter.targetEnabled2(evt.card,player,target); + }).set('ai',function(target){ + return get.effect(target,_status.event.getTrigger().card,_status.event.player); + }); + 'step 1' + if(result.bool){ + var targets=result.targets; + player.logSkill('twlvren',targets); + player.line(targets,trigger.card.nature); + trigger.targets.addArray(targets); + for(var i of targets) i.removeMark('twlvren',i.countMark('twlvren'),false); + } + }, + }, + add:{ + audio:'twlvren', + trigger:{player:'compare',target:'compare'}, + filter:function(event,player){ + if(player!=event.target&&event.iwhile) return false; + return true; + }, + forced:true, + locked:false, + content:function(){ + var num=2*trigger.lose_list.length; + if(player==trigger.player){ + trigger.num1+=num; + if(trigger.num1>13) trigger.num1=13; + } + else{ + trigger.num2+=num; + if(trigger.num2>13) trigger.num2=13; + } + game.log(player,'的拼点牌点数+',num); + }, + }, + }, + }, + //童渊 + twchaofeng:{ + audio:2, + enable:['chooseToUse','chooseToRespond'], + hiddenCard:function(player,name){ + if(!['sha','shan'].contains(name)) return false; + return player.hasCard(function(card){ + return card.name=='sha'||card.name=='shan'; + },'hs'); + }, + filter:function(event,player){ + if(event.filterCard({name:'sha'},player,event)||event.filterCard({name:'shan'},player,event)){ + return player.hasCard(function(card){ + return card.name=='sha'||card.name=='shan'; + },'hs'); + } + return false; + }, + group:'twchaofeng_compare', + chooseButton:{ + dialog:function(event,player){ + var list=[]; + if(event.filterCard({name:'sha'},player,event)){ + list.push(['基本','','sha']); + for(var j of lib.inpile_nature) list.push(['基本','','sha',j]); + } + if(event.filterCard({name:'shan'},player,event)){ + list.push(['基本','','shan']); + } + return ui.create.dialog('朝凤',[list,'vcard'],'hidden'); + }, + check:function(button){ + var player=_status.event.player; + var card={name:button.link[2],nature:button.link[3]}; + if(_status.event.getParent().type!='phase'||game.hasPlayer(function(current){ + return player.canUse(card,current)&&get.effect(current,card,player,player)>0; + })){ + switch (button.link[2]){ + case 'shan':return 5; + case 'sha': + if(button.link[3]=='fire') return 2.95; + else if(button.link[3]=='thunder'||button.link[3]=='ice') return 2.92; + else return 2.9; + } + } + return 0; + }, + backup:function(links,player){ + return { + audio:'twchaofeng', + name:links[0][2], + filterCard:function(card,player,target){ + if(lib.skill.twchaofeng_backup.name=='sha') return card.name=='shan'; + else return card.name=='sha'; + }, + selectCard:1, + check:function(card,player,target){ + return 6-get.value(card); + }, + viewAs:{name:links[0][2],nature:links[0][3]}, + position:'hs', + popname:true, + } + }, + prompt:function(links,player){ + var view,use; + if(links[0][2]=='sha'){ + use='【闪】'; + view=get.translation(links[0][3]||'')+'【'+get.translation(links[0][2])+'】'; + } + else{ + use='【杀】'; + view='【闪】'; + } + return '将一张'+use+'当做'+view+(_status.event.name=='chooseToUse'?'使用':'打出'); + }, + }, + ai:{ + skillTagFilter:function(player,tag){ + var name; + switch (tag){ + case 'respondSha':name='shan'; break; + case 'respondShan':name='sha'; break; + } + if(!player.countCards('hs',name)) return false; + }, + order:function(item,player){ + if(player&&_status.event.type=='phase'){ + var max=0; + if(player.countCards('hs','shan')>0&&lib.inpile_nature.some(i=>player.getUseValue({name:'sha',nature:i})>0)){ + var temp=get.order({name:'sha'}); + if(temp>max) max=temp; + } + if(max>0) max+=0.3; + return max; + } + return 4; + }, + result:{ + player:1, + }, + respondSha:true, + respondShan:true, + fireAttack:true, + }, + subSkill:{ + compare:{ + audio:'twchaofeng', + trigger:{player:'phaseUseBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('twchaofeng'),'选择至多三名角色共同拼点。赢的角色视为对所有没赢的角色使用一张火【杀】',[1,3],(card,player,target)=>{ + return player.canCompare(target); + }).set('ai',function(target){ + var player=_status.event.player,targets=_status.event.getTrigger().targets; + var num=0,card={name:'sha',nature:'fire',isCard:true}; + if(target.hasSkill('twlvren')) num+=2*(ui.selected.targets.length+1); + if(target.hasSkill('twchuanshu_effect')) num+=3; + var hs=player.getCards('h').sort((a,b)=>get.number(b)-get.number(a)); + var ts=target.getCards('h').sort((a,b)=>get.number(b)-get.number(a)); + if(get.number(hs[0])<=Math.min(13,get.number(ts[0])+num)){ + return 6+get.effect(player,card,target,target); + } + return get.effect(target,{name:'guohe_copy2'},player,player)/2+get.effect(target,card,player,player); + });; + 'step 1' + if(result.bool){ + event.targets=result.targets; + player.logSkill('twchaofeng_compare',event.targets); + player.chooseToCompare(event.targets).setContent(lib.skill.twchaofeng.chooseToCompareMeanwhile); + } + 'step 2' + if(result.winner){ + var targets=[player].addArray(event.targets).sortBySeat(player); + targets.remove(result.winner); + result.winner.useCard({name:'sha',nature:'fire',isCard:true},targets,'noai').set('addCount',false); + } + } + } + }, + chooseToCompareMeanwhile:function(){ + 'step 0' + if(player.countCards('h')==0){ + event.result={cancelled:true,bool:false} + event.finish(); + return; + } + for(var i=0; ievent.maxNum){ + event.maxNum=i[1]; + event.winner=i[0]; + } + else if(event.winner&&i[1]==event.maxNum&&i[0]!=event.winner){ + delete event.winner; + } + } + 'step 6' + event.iwhile++; + event.goto(4); + 'step 7' + var player=event.tempplayer; + event.player=player; + delete event.tempplayer; + var str='无人拼点成功'; + if(event.winner){ + event.result.winner=event.winner; + str=get.translation(event.winner)+'拼点成功'; + game.log(event.winner,'拼点成功'); + event.winner.popup('胜'); + } else game.log('#b无人','拼点成功'); + var list=[player].addArray(targets); + list.remove(event.winner); + for(var i of list){ + i.popup('负'); + } + if(str){ + game.broadcastAll(function(str){ + var dialog=ui.create.dialog(str); + dialog.classList.add('center'); + setTimeout(function(){ + dialog.close(); + },1000); + },str); + } + game.delay(3); + 'step 8' + game.broadcastAll(ui.clear); + 'step 9' + event.cards.add(event.card1); + } + }, + twchuanshu:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + limited:true, + skillAnimation:true, + animationColor:'legend', + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('twchuanshu')).set('ai',target=>get.attitude(_status.event.player,target)); + 'step 1' + if(result.bool){ + player.awakenSkill('twchuanshu'); + var target=result.targets[0]; + player.logSkill('twchuanshu',target); + target.addMark('twchuanshu_mark',1,false); + target.addSkill('twchuanshu_effect'); + target.markAuto('twchuanshu_effect',[player]); + player.addSkill('twchuanshu_clear'); + player.markAuto('twchuanshu_clear',[target]); + } + }, + subSkill:{ + mark:{}, + effect:{ + audio:'twchuanshu', + trigger:{ + player:['compare','useCardAfter'], + target:'compare', + source:'damageBegin1', + }, + direct:true, + forced:true, + charlotte:true, + nopop:true, + mark:true, + intro:{ + content:function(storage,player){ + var shisyou=player.getStorage('twchuanshu_effect').filter(i=>i.isIn()); + var str='
  • 拼点牌点数+3;' + if(player.hasMark('twchuanshu_mark')){ + str+='
  • 使用的下一张【杀】对除'+get.translation(shisyou)+'外的角色造成伤害时,此伤害+'+player.countMark('twchuanshu_mark')+';'; + if(!shisyou.contains(player)){ + str+='
  • 使用的下一张【杀】结算结束后,'+get.translation(shisyou)+'摸等同于伤害值的牌;'; + } + } + str=str.slice(0,-1)+'。'; + return str; + } + }, + filter:function(event,player,name){ + if(name=='compare'){ + if(event.player==player&&event.iwhile>0) return false; + return (player==event.player?event.num1:event.num2)<13; + } + else if(event.name=='useCard'){ + return !player.getStorage('twchuanshu_clear').contains(player)&&event.card.name=='sha'&&player.getHistory('sourceDamage',evt=>{ + return evt.card==event.card; + }).length&&player.hasMark('twchuanshu_mark'); + } + return event.card&&event.card.name=='sha'&&!player.getStorage('twchuanshu_effect').contains(event.player)&&player.hasMark('twchuanshu_mark'); + }, + content:function(){ + if(event.triggername=='compare'){ + game.log(player,'的拼点牌点数+3'); + trigger.num1=Math.min(13,trigger.num1+3); + } + else if(trigger.name=='useCard'){ + var num=0; + player.getHistory('sourceDamage',evt=>{ + if(evt.card==trigger.card){ + num+=evt.num; + } + }); + var targets=player.getStorage('twchuanshu_effect'); + targets.sortBySeat(_status.currentPhase); + for(var target of targets){ + if(target.isIn()){ + target.logSkill('twchuanshu_effect',player); + target.draw(num); + } + } + player.removeMark('twchuanshu_mark',player.countMark('twchuanshu_mark'),false); + } + else{ + trigger.num+=player.countMark('twchuanshu_mark'); + } + } + }, + clear:{ + trigger:{player:'phaseBegin'}, + forced:true, + silent:true, + charlotte:true, + filter:function(event,player){ + return player.getStorage('twchuanshu_clear').length; + }, + content:function(){ + 'step 0' + var targets=player.getStorage('twchuanshu_clear'); + player.logSkill('twchuanshu_clear',targets.filter(i=>i.isIn())); + for(var target of targets){ + target.unmarkAuto('twchuanshu_effect',[player]); + } + } + } + } + }, + //徐庶 + twjiange:{ + audio:2, + enable:['chooseToUse','chooseToRespond'], + filterCard:function(card,player){ + return get.type(card)!='basic'; + }, + usable:1, + locked:false, + viewAs:{name:'sha',storage:{twjiange:true}}, + viewAsFilter:function(player){ + if(!player.countCards('hes',function(card){ + return get.type(card)!='basic'; + })) return false; + }, + position:'hes', + selectCard:function(){ + return _status.event.skill=='twjiange'?1:Infinity; + }, + precontent:function(){ + if(player!=_status.currentPhase) player.draw(); + event.getParent().addCount=false; + }, + prompt:'将一张非基本牌当杀使用或打出', + check:function(card){ + var val=get.value(card); + if(_status.event.name=='chooseToRespond') return 1/Math.max(0.1,val); + return 6-val; + }, + ai:{ + order:function(item,player){ + var target=_status.currentPhase; + if(!target||target!=player) return 7; + return 1; + }, + respondSha:true, + skillTagFilter:function(player){ + if(!player.countCards('hes',function(card){ + return get.type(card)!='basic'; + })) return false; + }, + }, + mod:{ + targetInRange:function(card){ + if(card.storage&&card.storage.twjiange) return true; + }, + cardUsable:function(card,player,num){ + if(card.storage&&card.storage.twjiange) return Infinity; + }, + } + }, + twxiawang:{ + audio:2, + trigger:{global:'damageEnd'}, + filter:function(event,player){ + if(!event.source||get.distance(player,event.player)>1||!player.canUse('sha',event.source,false,false)) return false; + return player.countCards('h')>0; + }, + direct:true, + content:function(){ + player.chooseToUse(function(card,player,event){ + if(get.name(card)!='sha') return false; + return lib.filter.filterCard.apply(this,arguments); + },'侠望:是否对'+get.translation(trigger.source)+'使用一张杀?').set('logSkill','twxiawang').set('complexSelect',true).set('filterTarget',function(card,player,target){ + if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; + return lib.filter.filterTarget.apply(this,arguments); + }).set('sourcex',trigger.source); + player.addTempSkill('twxiawang_damage'); + }, + subSkill:{ + damage:{ + trigger:{player:'useCardAfter'}, + forced:true, + popup:false, + charlotte:true, + filter:function(event,player){ + if(event.card.name!='sha') return false; + if(event.getParent(2).name!='twxiawang') return false; + if(!player.hasHistory('sourceDamage',evt=>evt.card==event.card)) return false; + for(var phase of lib.phaseName){ + var evt=event.getParent(phase); + if(evt&&evt.name==phase) return true; + } + return false; + }, + content:function(){ + player.popup() + player.removeSkill('twjiange_damage'); + for(var phase of lib.phaseName){ + var evt=event.getParent(phase); + if(evt&&evt.name==phase){ + var name=['准备','判定','摸牌','出牌','弃牌','结束'][lib.phaseName.indexOf(phase)]; + game.log(player,'令',_status.currentPhase,'结束了'+name+'阶段'); + player.line(_status.currentPhase,'thunder'); + evt.skipped=true; + } + } + + } + } + }, + }, + //好萌 + twgongge:{ + audio:3, + trigger:{player:'useCardToPlayered'}, + filter:function(event,player){ + if(!event.isFirstTarget||!event.targets) return false; + return get.tag(event.card,'damage'); + }, + direct:true, + usable:1, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('twgongge'),function(card,player,target){ + var trigger=_status.event.getTrigger(); + return trigger.targets.contains(target); + }).set('ai',function(target){ + var player=_status.event.player; + var trigger=_status.event.getTrigger(); + var att=get.attitude(player,target); + var damageNum=trigger.getParent().baseDamage; + var map=trigger.getParent().customArgs,id=target.playerid; + if(map[id]){ + if(typeof map[id].baseDamage=='number') damageNum=map[id].baseDamage; + if(typeof map[id].extraDamage=='number') damageNum+=map[id].extraDamage; + } + if(target.hasSkillTag('filterDamage',null,{ + player:trigger.player, + card:trigger.card, + })) damageNum=1; + var num=target.getSkills(null,false,false).filter(function(skill){ + var info=get.info(skill); + return info&&!info.charlotte; + }).length+1; + var list=[0,0,0]; + var player=_status.event.player; + list[0]=num; + list[1]=(get.effect(target,{name:'guohe_copy2'},player,player)>0?((target.hp-damageNumget.damageEffect(target,player,player)?(Math.min(num-1,target.getDamagedHp())):(num-1))*2; + return Math.max.apply(Math,list); + }).set('yimie',function(trigger,player,target){ + var hit=true; + if(get.type(trigger.card)=='trick'&&trigger.player.countCards('hs',{name:'wuxie'})) hit=false; + if(trigger.card.name=='huogong'&&trigger.player.countCards('h',function(card){ + var list=[]; + for(var i of player.getCards('h')) list.push(get.suit(i)); + return !list.contains(get.suit(card)); + })) hit=false; + var key; + switch (trigger.card.name){ + case 'sha':case 'wanjian':key=['shan']; break; + case 'juedou':case 'nanman':case 'jiedao':key=['sha']; break; + default:key=[]; break; + } + if(get.type(trigger.card)=='trick') key.push('wuxie'); + key.push('caochuan'); + var bool1=((get.recoverEffect(target,player,player)>0)?1:-1); + var bool2=(((att>0&&!hit)||(target.countCards('hs',{name:key})&&!trigger.getParent().directHit.contains(target)))?1:-1); + if(att<=0&&target.hp-damageNum>0) return false; + return bool1=bool2&&att!=0; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twgongge',target); + var num=target.getSkills(null,false,false).filter(function(skill){ + var info=get.info(skill); + return info&&!info.charlotte; + }).length+1; + event.num=num; + var list=[]; + var choiceList=[ + '摸'+get.cnNumber(num)+'张牌,若'+get.translation(target)+'响应此牌,则你跳过下个摸牌阶段', + '弃置'+get.translation(target)+get.cnNumber(num)+'张牌,此牌结算完毕后,若'+get.translation(target)+'的体力值不小于你,你交给'+get.translation(target)+get.cnNumber(num-1)+'张牌', + '令此牌对'+get.translation(target)+'造成的伤害+'+(num-1)+',此伤害结算完成后,其回复等量的体力值' + ]; + list.push('摸牌'); + if(target.countDiscardableCards('he',player)) list.push('拆牌'); + else choiceList[1]=''+choiceList[1]+''; + list.push('加伤'); + player.chooseControl(list).set('prompt','攻阁:请选择一项('+get.translation(target)+'对应X值:'+(num-1)+')').set('ai',()=>_status.event.choice).set('choice',function(){ + var att=get.attitude(player,target); + var damageNum=trigger.getParent().baseDamage; + var map=trigger.getParent().customArgs,id=target.playerid; + if(map[id]){ + if(typeof map[id].baseDamage=='number') damageNum=map[id].baseDamage; + if(typeof map[id].extraDamage=='number') damageNum+=map[id].extraDamage; + } + if(target.hasSkillTag('filterDamage',null,{ + player:trigger.player, + card:trigger.card, + })) damageNum=1; + var yimie=function(){ + var hit=true; + if(get.type(trigger.card)=='trick'&&trigger.player.countCards('hs',{name:'wuxie'})) hit=false; + if(trigger.card.name=='huogong'&&trigger.player.countCards('h',function(card){ + var list=[]; + for(var i of player.getCards('h')) list.push(get.suit(i)); + return !list.contains(get.suit(card)); + })) hit=false; + var key; + switch (trigger.card.name){ + case 'sha':case 'wanjian':key=['shan']; break; + case 'juedou':case 'nanman':case 'jiedao':key=['sha']; break; + default:key=[]; break; + } + key.push('caochuan'); + var bool1=((get.recoverEffect(target,player,player)>0)?1:-1); + var bool2=(((att>0&&!hit)||(target.countCards('hs',{name:key})&&!trigger.getParent().directHit.contains(target)))?1:-1); + if(att<=0&&target.hp-damageNum>0) return false; + return bool1=bool2&&att!=0; + }; + if(yimie()) return '加伤'; + if(list.contains('拆牌')&&get.effect(target,{name:'guohe_copy2'},player,player)>0&&target.hp-damageNum=player.hp) return true; + return false; + }, + direct:true, + popup:false, + content:function(){ + 'step 0' + var evt=player.storage.twgongge_buff2; + var target=evt.target,num=evt.num; + event.target=target; + if(player.countCards('he')<=num) event._result={bool:true,cards:player.getCards('he')}; + else player.chooseCard('he',num,'攻阁:交给'+get.translation(target)+get.cnNumber(num)+'张牌',true); + 'step 1' + if(result.bool) player.give(result.cards,target); + }, + }, + //加伤后续 + buff3:{ + charlotte:true, + onremove:true, + trigger:{source:'damageBegin1',player:'useCardAfter'}, + filter:function(event,player){ + if(!event.card) return false; + var evt=player.storage.twgongge_buff3; + if(evt.card==event.card&&evt.target.isAlive()&&(event.name=='useCard'||event.player==evt.target)) return true; + return false; + }, + direct:true, + popup:false, + content:function(){ + var evt=player.storage.twgongge_buff3; + if(trigger.name=='damage') trigger.num+=evt.num; + else if(evt.target.isAlive()) evt.target.recover(evt.num); + }, + }, + buff1_mark:{ + mark:true, + intro:{ + content:'跳过下一个摸牌阶段', + }, + } + }, + }, + //魏续 + twsuizheng:{ + audio:3, + trigger:{global:'phaseBefore',player:'enterGame'}, + filter:function(event,player){ + return event.name!='phase'||game.phaseNumber==0; + }, + forced:true, + content:function(){ + 'step 0' + player.chooseTarget('请选择【随征】的目标',lib.translate.twsuizheng_info,lib.filter.notMe,true).set('ai',function(target){ + var player=_status.event.player; + return Math.max(1+get.attitude(player,target)*get.threaten(target),Math.random()); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + game.log(player,'选择了',target,'作为','“随征”角色'); + player.markAuto('twsuizheng',[target]); + player.addSkill('twsuizheng_draw'); + player.addSkill('twsuizheng_xianfu'); + } + }, + ai:{expose:0.3}, + intro:{content:'已选择$为“随征”角色'}, + subSkill:{ + draw:{ + charlotte:true, + audio:'twsuizheng', + trigger:{global:'damageSource'}, + filter:function(event,player){ + return player.getStorage('twsuizheng').contains(event.source); + }, + forced:true, + logTarget:'source', + content:function(){ + player.draw(); + }, + }, + xianfu:{ + trigger:{global:'damageEnd'}, + filter:function(event,player){ + return player.getStorage('twsuizheng').contains(event.player)&&event.player.isIn(); + }, + forced:true, + charlotte:true, + logTarget:'player', + content:function(){ + 'step 0' + player.chooseToDiscard(2,'随征:弃置两张基本牌','若你弃牌,你令'+get.translation(trigger.player)+'回复1点体力;或点击“取消”失去1点体力,令'+get.translation(trigger.player)+'获得一张【杀】或【决斗】',{type:'basic'}).set('ai',function(card){ + if(_status.event.refuse) return -1; + return 6-get.value(card); + }).set('refuse',get.attitude(player,trigger.player)<=0||get.effect(player,{name:'losehp'})>=0); + 'step 1' + if(result.bool) trigger.player.recover(); + else { + player.loseHp(); + var card=get.cardPile(function(card){ + return card.name=='sha'||card.name=='juedou'; + }); + if(card) trigger.player.gain(card,'gain2'); + } + }, + }, + }, + }, + twtuidao:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + filter:function(event,player){ + var targets=player.getStorage('twsuizheng'); + if(!targets.length) return false; + return targets.some(target=>target.hp<=2||!target.isIn()); + }, + check:function(event,player){ + var targets=player.getStorage('twsuizheng'); + var val=0; + for(var target of targets){ + if(target.hp<=2&&target.isIn()) val-=get.attitude(player,target); + else if(!target.isIn()) val+=6; + } + return val>0; + }, + limited:true, + skillAnimation:true, + animationColor:'thunder', + content:function(){ + 'step 0' + player.awakenSkill('twtuidao'); + var list1=['equip3','equip4'],list2=['basic','trick','equip']; + var targets=player.getStorage('twsuizheng'),str=get.translation(targets); + if(targets.length) str='与'+str; + player.chooseButton(2,true,[ + '颓盗:废除你'+str+'的一个坐骑栏废除并选择一个类别', + [list1,'tdnodes'], + [list2,'tdnodes'], + ]).set('filterButton',function(button){ + var list=_status.event.list,link=button.link; + if(ui.selected.buttons.length){ + if(list.contains(ui.selected.buttons[0].link)&&list.contains(link)) return false; + if(!list.contains(ui.selected.buttons[0].link)&&!list.contains(link)) return false; + } + return true; + }).set('ai',function(button){ + var player=_status.event.player; + var list=_status.event.list,link=button.link; + if(list.contains(link)){ + if(player.isDisabled(4)) return 'equip4'; + if(player.isDisabled(3)) return 'equip3'; + return 'equip4' + } + if(!list.contains(link)){ + var player=_status.event.player; + var targets=player.getStorage('twsuizheng'); + for(var target of targets){ + if(target.isIn()){ + var listx=[0,0,0],list2=['basic','trick','equip']; + for(var i of target.getCards('he')) listx[list2.indexOf(get.type2(i))]++; + return list2[listx.indexOf(Math.max.apply(Math,listx))]; + } + } + return 1+Math.random(); + } + }).set('list',list1); + 'step 1' + if(!['equip3','equip4'].contains(result.links[0])) result.links.reverse(); + var subtype=result.links[0],type=result.links[1]; + player.disableEquip(subtype); + var targets=player.getStorage('twsuizheng') + for(var target of targets){ + if(target&&target.isIn()){ + target.disableEquip(subtype); + var cards=target.getCards('he',card=>get.type2(card)==type); + player.gain(cards,target,'give'); + event.gainners=cards; + } + else{ + var cards=[]; + for(var i=1; i<=2; i++){ + var card=get.cardPile2(function(card){ + return !cards.contains(card)&&get.type2(card)==type; + }); + if(card) cards.push(card); + else break; + } + player.gain(cards,'gain2'); + event.gainners=cards; + } + } + 'step 2' + player.chooseTarget('请重新选择【随征】目标',true,function(card,player,target){ + return !player.getStorage('twsuizheng').contains(target); + }).set('ai',function(target){ + var player=_status.event.player; + return Math.max(1+get.attitude(player,target)*get.threaten(target),Math.random()); + }); + 'step 3' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + game.log(player,'选择了',target,'作为','“随征”角色'); + delete player.storage.twsuizheng + player.markAuto('twsuizheng',[target]); + } + }, + ai:{combo:'twsuizheng'}, + }, + //曹休 + twqianju:{ + audio:2, + trigger:{source:'damageSource'}, + filter:function(event,player){ + return get.distance(player,event.player)<=1&&player.countCards('e')<5; + }, + forced:true, + usable:1, + content:function(){ + var card=get.cardPile(function(card){ + return get.type(card)=='equip'&&player.isEmpty(get.subtype(card)); + }); + if(card){ + player.$gain2(card); + game.delayx(); + player.equip(card); + } + }, + mod:{ + globalFrom:function(from,to,distance){ + return distance-from.countCards('e'); + }, + }, + }, + twqingxi:{ + audio:'xinqingxi', + trigger:{player:'useCardToPlayered'}, + filter:function(event,player){ + return event.card.name=='sha'&&player.getHistory('useCard',evt=>evt.card.name=='sha').indexOf(event.getParent())==0; + }, + check:function(event,player){ + return true; + }, + logTarget:'target', + content:function(){ + 'step 0' + var target=trigger.target; + event.target=target; + if(!target.countCards('e')) event._result={index:0}; + else target.chooseControl().set('ai',function(){ + if(_status.event.goon||player.hp>2) return 0; + return 1; + }).set('choiceList',[ + '令'+get.translation(player)+'摸'+get.cnNumber(Math.max(1,player.countCards('e')))+'张牌,且此【杀】不可被响应', + '弃置装备区中的所有牌并弃置'+get.translation(player)+'装备区等量的牌,此【杀】造成的伤害+1' + ]).set('goon',get.attitude(target,player)>0); + 'step 1' + if(result.index==0){ + player.draw(Math.max(1,player.countCards('e'))); + trigger.getParent().directHit.add(target); + game.log(trigger.card,'不可被',target,'响应'); + event.finish(); + } + else{ + var num=target.countCards('e'); + target.discard(target.getCards('e')); + target.discardPlayerCard(player,'e',num,true); + } + 'step 2' + var map=trigger.customArgs; + var id=target.playerid; + if(!map[id]) map[id]={}; + if(!map[id].extraDamage) map[id].extraDamage=0; + map[id].extraDamage++; + game.log(trigger.card,'对',target,'造成的伤害+1'); + game.delayx(); + }, + }, + //孙翊 + twzaoli:{ + audio:'zaoli', + trigger:{player:'phaseUseBegin'}, + init:function(player){ + if(player.isPhaseUsing()){ + var hs=player.getCards('h'); + player.getHistory('gain',function(evt){ + hs.removeArray(evt.cards); + }); + if(hs.length) player.addGaintag(hs,'twzaoli'); + } + }, + filter:function(event,player){ + return player.countCards('he'); + }, + forced:true, + group:'twzaoli_mark', + content:function(){ + 'step 0' + if(player.countCards('h',card=>get.type(card)!='equip')){ + player.chooseCard('h',[1,Infinity],true,'躁厉:请选择至少一张非装备手牌,你弃置这些牌和所有装备牌',(card,player)=>{ + return get.type(card)!='equip'&&lib.filter.cardDiscardable(card,player,'twzaoli'); + }).set('ai',function(card){ + if(!card.hasGaintag('twzaoli_temp')) return 5-get.value(card); + return 1; + }); + } + 'step 1' + var cards=player.getCards('he',{type:'equip'}); + var subtype=[]; + event.subtype=subtype.addArray(cards.map(card=>get.subtype(card))); + cards.addArray(result.cards||[]); + if(cards.length) player.discard(cards); + event.cards=cards; + 'step 2' + player.draw(cards.length); + 'step 3' + var num=0; + if(event.subtype.length){ + for(var i of event.subtype){ + var card=get.cardPile2(function(card){ + return get.type(card)=='equip'&&get.subtype(card)==i; + }); + if(card){ + num++; + player.$gain2(card); + game.delayx(); + player.equip(card); + } + } + } + if(num<=2) event.finish(); + 'step 4' + player.loseHp(); + }, + onremove:function(player){ + player.removeGaintag('twzaoli'); + }, + mod:{ + cardEnabled2:function(card,player){ + if(player.isPhaseUsing()&&get.itemtype(card)=='card'&&card.hasGaintag('twzaoli')) return false; + }, + }, + subSkill:{ + mark:{ + trigger:{player:['phaseUseBegin','phaseUseAfter','phaseAfter']}, + filter:function(event,player){ + return player.countCards('h'); + }, + direct:true, + firstDo:true, + content:function(){ + if(event.triggername=='phaseUseBegin'){ + var hs=player.getCards('h'); + player.getHistory('gain',function(evt){ + hs.removeArray(evt.cards); + }); + if(hs.length) player.addGaintag(hs,'twzaoli'); + } + else{ + player.removeGaintag('twzaoli'); + } + }, + } + }, + }, + //邓芝 + twjimeng:{ + audio:'jimeng', + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.countGainableCards(player,'he')>0; + }) + }, + filterTarget:function(card,player,target){ + return target!=player&&target.countGainableCards(player,'hej')>0; + }, + content:function(){ + 'step 0' + player.gainPlayerCard(target,'hej',true); + 'step 1' + var hs=player.getCards('he'); + if(hs.length){ + if(hs.length==1) event._result={bool:true,cards:hs}; + else player.chooseCard(true,'交给'+get.translation(target)+'一张牌','he',true); + } + else event.finish(); + 'step 2' + player.give(result.cards,target); + 'step 3' + if(target.hp>=player.hp) player.draw(); + }, + ai:{ + order:8, + result:{ + player:function(player,target){ + if(target.hp>=player.hp) return 1; + return 0; + }, + target:function(player,target){ + return get.effect(target,{name:'shunshou'},player,target)/10; + } + } + } + }, + //杨仪 + twgongsun:{ + audio:'gongsun', + trigger:{player:'phaseUseBegin'}, + forced:true, + direct:true, + filter:function(event,player){ + return game.hasPlayer(current=>player.inRange(current)); + }, + content:function(){ + 'step 0' + player.chooseTarget('共损:请选择一名攻击范围内的角色',lib.translate.twgongsun_info,true,function(card,player,target){ + return player!=target&&player.inRange(target); + }).set('ai',function(target){ + return -get.attitude(_status.event.player,target)*(1+target.countCards('h')); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twgongsun',target); + player.addTempSkill('twgongsun_shadow',{player:['phaseBegin','die']}); + player.chooseControl(lib.suit).set('prompt','共损:请选择一个花色').set('ai',function(button){ + return lib.suit.randomGet(); + }); + } + else event.finish(); + 'step 2' + var suit=result.control; + player.popup(suit+2,'soil'); + game.log(player,'选择了',suit+2); + player.storage.twgongsun_shadow.push([target,suit]); + player.markSkill('twgongsun_shadow'); + }, + }, + twgongsun_shadow:{ + global:'twgongsun_shadow2', + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + }, + marktext:'损', + onremove:true, + intro:{ + content:function(shadow){ + var str=''; + for(var i=0;i0) str+='
    ' + str+=get.translation(shadow[i][0]); + str+=':'; + str+=get.translation(shadow[i][1]); + } + return str; + }, + }, + mod:{ + cardEnabled:function(card,player){ + var list=player.storage.twgongsun_shadow; + for(var i=0;iMath.random()<0.6?0.1:1, + twzuhuo:(target,player)=>get.damageEffect(target,player,player)>0?0.1:1, + twharvestinori:(target)=>0.9+Math.random()/5, + twhuangjin:(target)=>Math.random()/5, + twguimen:(target)=>Math.sqrt(Math.min(3,target.countCards('he',{suit:'spade'})))*0.09, + twzhouzu:(target)=>{ + var rand=Math.random(); + if(rand<0.8) return 1-Math.sqrt(0.8-rand); + return 1; + }, + twdidao:(target,player)=>{ + if([target,player].some(current=>current.getSkills().some(skill=>{ + var info=get.info(skill); + if(!info||!info.ai||!info.ai.rejudge) return false; + return true; + }))){ + return 0.05; + } + return 0.85+Math.random()/5; + } + }, content:function(){ 'step 0' player.awakenSkill('twbudao'); player.loseMaxHp(); player.recover(); - player.chooseControl(lib.skill.twbudao.derivation).set('prompt','选择获得一个技能').set('ai',function(){ - return 'twharvestinori'; - }); + var skills=lib.skill.twbudao.derivation,map=lib.skill.twbudao.skillValue; + skills=skills.randomGets(3); + var target=game.filterPlayer().sort((a,b)=>get.attitude(player,b)-get.attitude(player,a))[0]; + if(player.identity=='nei'||get.attitude(player,target)<6) target=player; + player.chooseControl(skills).set('choiceList',skills.map(function(i){ + return '
    【'+get.translation(lib.translate[i+'_ab']||get.translation(i).slice(0,2))+'】
    '+get.skillInfoTranslation(i,player)+'
    '; + })).set('displayIndex',false).set('prompt','布道:选择获得一个技能').set('ai',()=>{ + return _status.event.choice; + }).set('choice',skills.sort((a,b)=>(map[b](target,player)||0.5)-(map[a](target,player)||0.5))[0]); 'step 1' var skill=result.control; player.addSkillLog(skill); @@ -1910,6 +9616,232 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, + twzhouzu:{ + audio:2, + enable:'phaseUse', + usable:1, + mahouSkill:true, + filter:function(event,player){ + return !player.hasSkill('twzhouzu_mahou') + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + direct:true, + line:false, + delay:false, + content:function(){ + 'step 0' + player.chooseControl('1回合','2回合','3回合').set('prompt','请选择施法时长').set('ai',function(){ + var player=_status.event.player; + var safe=1; + if(safe0){ + safe++; + next=next.next; + } + } + return Math.max(2,Math.min(safe,3,game.countPlayer()))-1; + }); + 'step 1' + player.storage.twzhouzu_mahou=[result.index+1,result.index+1,target]; + player.addTempSkill('twzhouzu_mahou',{player:'die'}); + }, + subSkill:{ + mahou:{ + trigger:{ + global:'phaseEnd', + }, + forced:true, + popup:false, + charlotte:true, + content:function(){ + var list=player.storage.twzhouhu_mahou; + list[1]--; + if(list[1]==0){ + game.log(player,'的“咒诅”魔法生效'); + var num=list[0],target=list[2]; + player.logSkill('twzhouzu',target); + target.chooseToDiscard(get.translation(player)+'对你的“咒诅”魔法生效,请弃置'+get.cnNumber(list[0])+'张牌',list[0],true); + target.damage('thunder'); + player.removeSkill('twzhouzu_mahou'); + } + else{ + game.log(player,'的“咒护”魔法剩余','#g'+(list[1])+'回合'); + player.markSkill('twzhouhu_mahou'); + } + }, + mark:true, + onremove:true, + marktext:'♗', + intro:{ + name:'施法:咒诅', + markcount:function(storage){ + if(storage) return storage[1]; + return 0; + }, + content:function(storage){ + if(storage){ + return '经过'+storage[1]+'个“回合结束时”后,你令'+get.translation(storage[2])+'弃置'+get.cnNumber(storage[0])+'张牌,然后你对其造成1点雷电伤害'; + } + return '未指定施法效果'; + }, + } + }, + }, + ai:{ + order:1, + result:{ + target:-5, + }, + } + }, + twhuangjin:{ + audio:2, + trigger:{target:'useCardToTarget'}, + forced:true, + logTarget:'player', + filter:function(event,player){ + return event.card.name=='sha'&&typeof get.number(event.card)=='number'; + }, + content:function(){ + 'step 0' + player.judge(function(result){ + var evt=_status.event.getTrigger(); + if(Math.abs(get.number(result)-get.number(evt.card))<=1) return 2; + return -1; + }).judge2=function(result){ + return result.bool; + }; + 'step 1' + if(result.bool){ + trigger.getParent().excluded.add(player); + } + }, + ai:{ + effect:{ + target:function(card,player,target,current,isLink){ + if(card.name=='sha'&&!isLink) return 0.8; + }, + }, + }, + }, + twguimen:{ + audio:2, + trigger:{ + player:'loseAfter', + global:'loseAsyncAfter', + }, + direct:true, + filter:function(event,player){ + if(event.type!='discard') return false; + var evt=event.getl(player); + for(var card of evt.cards2){ + if(get.suit(card,player)=='spade') return true; + } + return false; + }, + forced:true, + content:function(){ + 'step 0' + var cards=[]; + var evt=trigger.getl(player); + for(var card of evt.cards2){ + if(get.suit(card,player)=='spade') cards.push(card); + } + if(!cards.length) event.finish(); + else event.cards=cards; + 'step 1' + if(event.cards.length==1){ + event._result={bool:true,links:event.cards}; + } + else{ + player.chooseButton(['鬼门:选择一张♠牌,为其进行判定',event.cards],true); + } + 'step 2' + if(result.bool&&result.links){ + event.judgingSpade=result.links[0]; + event.cards.remove(event.judgingSpade); + game.log(player,'选择','#y'+get.translation(event.judgingSpade),'进行判定'); + player.judge(function(result){ + var card=_status.event.getParent().judgingSpade; + if(Math.abs(get.number(result)-get.number(card))<=1) return 4; + return -1; + }).judge2=function(result){ + return result.bool; + }; + } else event.finish(); + 'step 3' + if(result.bool){ + player.chooseTarget('选择一名其他角色,对其造成2点雷电伤害',lib.filter.notMe,true).set('ai',target=>get.damageEffect(target,player,player,'thunder')); + } + 'step 4' + if(result.bool){ + player.line(result.targets[0],'thunder'); + result.targets[0].damage(2,'thunder'); + } + if(event.cards.length) event.goto(1); + } + }, + twdidao:{ + audio:2, + trigger:{global:'judge'}, + filter:function(event,player){ + return player.countCards('hes'); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为' + + get.translation(trigger.player.judging[0])+','+get.prompt('twdidao'),'hes',function(card){ + var player=_status.event.player; + var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); + if(mod2!='unchanged') return mod2; + var mod=game.checkMod(card,player,'unchanged','cardRespondable',player); + if(mod!='unchanged') return mod; + return true; + }).set('ai',function(card){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + var judging=_status.event.judging; + var result=trigger.judge(card)-trigger.judge(judging); + var attitude=get.attitude(player,trigger.player); + if(attitude==0||result==0){ + if(trigger.player!=player) return 0; + var checkx=get.color(card,true)==get.color(judging); + if(checkx>0) return checkx; + return 0; + }; + return result*(attitude>0?1:-1); + }).set('judging',trigger.player.judging[0]); + 'step 1' + if(result.bool){ + player.respond(result.cards,'highlight','twdidao','noOrdering'); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + player.$gain2(trigger.player.judging[0]); + player.gain(trigger.player.judging[0]); + var card=result.cards[0]; + if(get.color(card)==get.color(trigger.player.judging[0])) player.draw('nodelay'); + trigger.player.judging[0]=result.cards[0]; + trigger.orderingCards.addArray(result.cards); + game.log(trigger.player,'的判定牌改为',result.cards[0]); + } + 'step 3' + game.delay(2); + }, + ai:{ + rejudge:true, + tag:{ + rejudge:1 + } + } + }, //群曹操 twlingfa:{ audio:2, @@ -4560,6 +12492,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.storage.twfengpo) return '当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的红色牌数)。'; return '①当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的♦数)。②当你杀死一名角色后,你将〖凤魄①〗中的“♦数”改为“红色牌数”。'; }, + twjiexun:function(player){ + return lib.translate[player.hasSkill('funan_jiexun')?'twjiexunx_info':'twjiexun_info']; + }, + twzhenliang: function (player) { + if(player.storage.twzhenliang) return '转换技。阴:出牌阶段限一次。你可以弃置一张牌并对攻击范围内的一名角色造成1点伤害。阳:当你或你攻击范围内的一名角色于你的回合外受到伤害时,你可以弃置一张牌令此伤害-1。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。'; + return '转换技。阴:出牌阶段限一次。你可以弃置一张牌并对攻击范围内的一名角色造成1点伤害。阳:当你或你攻击范围内的一名角色于你的回合外受到伤害时,你可以弃置一张牌令此伤害-1。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。'; + }, }, translate:{ tw_beimihu:'TW卑弥呼', @@ -4631,7 +12570,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wuban:'吴班', jintao:'进讨', jintao_info:'锁定技,你使用【杀】无距离限制且次数上限+1。你于出牌阶段内使用的第一张【杀】伤害+1,第二张【杀】不可被响应。', - yuejiu:'乐就', + yuejiu:'TW乐就', cuijin:'催进', cuijin_info:'当你或你攻击范围内的角色使用【杀】时,你可以弃置一张牌并获得如下效果:此【杀】的伤害值基数+1,且当此【杀】结算结束后,若未造成过伤害,则你对使用者造成1点伤害。', tw_zhaoxiang:'TW赵襄', @@ -4695,18 +12634,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twyiju:'蚁聚', twyiju_info:'非锁定技。若你的武将牌上有“示”,则:①你使用【杀】的次数上限和攻击范围的基数改为你的体力值。②当你受到伤害时,你移去“示”,且令此伤害+1。', twbudao:'布道', - twbudao_info:'限定技。准备阶段,你可减1点体力上限,回复1点体力并选择获得一个“施法”技能。然后你可以令一名其他角色也获得此技能并交给你一张牌。', + twbudao_info:'限定技。准备阶段,你可减1点体力上限,回复1点体力并选择获得一个〖布道〗技能池里的技能(三选一)。然后你可以令一名其他角色也获得此技能并交给你一张牌。', twzhouhu:'咒护', twzhouhu_info:'出牌阶段限一次。你可以弃置一张红色手牌并施法:回复1点体力。', twharvestinori:'丰祈', twharvestinori_info:'出牌阶段限一次。你可以弃置一张黑色手牌并施法:摸2X张牌。', twzuhuo:'阻祸', twzuhuo_info:'出牌阶段限一次。你可以弃置一张非基本牌并施法:防止你受到的下X次伤害。', + twzhouzu:'咒诅', + twzhouzu_info:'出牌阶段限一次。你可以对一名其他角色施法:其弃置X张牌,然后你对其造成1点雷电伤害。', + twhuangjin:'黄巾', + twhuangjin_info:'锁定技。当你一名角色使用【杀】指定你为目标时,若此【杀】有点数,你判定,若点数与此【杀】点数差值不大于1,则此【杀】对你无效。', + twguimen:'鬼门', + twguimen_info:'锁定技。当你弃置牌时,若其中有♠牌,你为每一张♠牌判定,若此牌点数与结果之差不大于1,你对一名其他角色造成2点雷电伤害。', + twdidao:'地道', + twdidao_info:'一名角色的判定牌生效前,你可以打出一张牌作为判定牌并获得原判定牌。若你以此法打出的牌与原判定牌颜色相同,你摸一张牌。', tw_chengpu:'程普', twlihuo:'疠火', twlihuo2:'疠火', twlihuo3:'疠火', - twlihuo_info:'①当你声明使用普【杀】时,你可以将此【杀】改为火【杀】。此牌使用结算结束后,若有角色因此【杀】造成的伤害进入过濒死状态,则你失去1点体力。②当你使用火【杀】选择目标后,你可为此牌增加一个目标。', + twlihuo_info:'①当你声明使用普【杀】后,你可以将此【杀】改为火【杀】。此牌使用结算结束后,若有角色因此【杀】造成的伤害进入过濒死状态,则你失去1点体力。②当你使用火【杀】选择目标后,你可为此牌增加一个目标。', twchunlao:'醇醪', twchunlao_info:'①准备阶段,若场上没有“醇”,则你可将一名角色区域内的一张牌置于其武将牌上,称为“醇”。②一名角色使用【杀】时,若其有“醇”,则其可以交给你一张牌,令此【杀】的伤害值基数+1。③一名角色进入濒死状态时,若其有“醇”,则你可以移去“醇”并摸一张牌,然后令其回复1点体力。', tw_guohuai:'TW郭淮', @@ -4752,9 +12699,298 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twzhengjian_info:'游戏开始时,你可选择获得一项效果:⒈其他角色的出牌阶段结束时,若其本阶段内未使用过非基本牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果二。⒉其他角色的出牌阶段结束时,若其本阶段内未获得过牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果二。', twzhongchi:'众斥', twzhongchi_info:'锁定技,限定技。当你因〖征建〗而获得牌后,若已经有至少X名角色因〖征建〗而交给你过牌(X为游戏人数的一半且向上取整),则你于本局游戏内受到渠道为【杀】的伤害+1,且你将〖征建〗中的“其须交给你一张牌”改为“你可对其造成1点伤害”。', - - tw_mobile:'移动版·海外服', - tw_mobile2:'海外服异构', + tw_bingyuan:'邴原', + twbingde:'秉德', + twbingde_info:'出牌阶段限一次。你可以选择一个本阶段未选择过的花色并弃置一张牌,你摸等同于本阶段你使用此花色的牌数,然后若你以此法弃置的牌的花色与你选择的花色相同,你令你〖秉德〗于此阶段发动的次数上限+1。', + twqingtao:'清滔', + twqingtao_info:'①摸牌阶段结束时,你可以重铸一张牌。若此牌为【酒】或非基本牌,你摸一张牌。②结束阶段,若你本回合未发动〖清滔①〗,你可以发动〖清滔①〗。', + tw_jiangji:'蒋济', + twjichou:'急筹', + twjichou_info:'①每回合限一次。你可以视为使用一张未被〖急筹①〗记录过的普通锦囊牌并记录此牌。②你无法响应或{使用对应实体牌包含你的手牌的}〖急筹①〗记录过的锦囊牌。③出牌阶段限一次,你可将手牌中的一张〖急筹①〗记录过的锦囊牌交给其他角色。', + twjilun:'机论', + twjilun_info:'当你受到伤害后,你可以摸X张牌(X为〖急筹①〗记录数且至少为1,至多为5),或视为使用一张〖急筹①〗记录过且未被〖机论〗记录过的普通锦囊牌并记录此牌。', + tw_niufudongxie:'牛辅董翓', + baonvezhi_faq:'关于暴虐值', + baonvezhi_faq_info:'
  • 当你造成或受到伤害后,你获得等量的暴虐值;
  • 暴虐值的上限为5。', + twjuntun:'军屯', + twjuntun_info:'①游戏开始时或当其他角色死亡后,你可令一名角色获得〖凶军〗。②当其他角色造成伤害后,若其拥有〖凶军〗,你获得等同于此次伤害值的暴虐值。', + twxiongxi:'凶袭', + twxiongxi_info:'出牌阶段限一次。你可以弃置X张牌对一名其他角色造成1点伤害(X为你的暴虐值与暴虐值上限之差)。', + twxiafeng:'黠凤', + twxiafeng_info:'出牌阶段开始时,你可消耗至多3点暴虐值并获得如下效果直到回合结束:你使用的前X张牌没有距离和次数限制且不可被响应,你的手牌上限+X(X为你以此法消耗的暴虐值)。', + tw_bn_1:'一点', + tw_bn_2:'两点', + tw_bn_3:'三点', + tw_bn_1_bg:'一', + tw_bn_2_bg:'二', + tw_bn_3_bg:'三', + twxiongjun:'凶军', + twxiongjun_info:'锁定技,每回合限一次。当你造成伤害后,所有拥有〖凶军〗的角色摸一张牌。', + tw_jianshuo:'蹇硕', + twkunsi:'困兕', + twkunsi_info:'出牌阶段,你可以视为对一名未以此法选择过的其他角色使用一张【杀】。若此【杀】未造成伤害,其获得〖令戮〗直到你下回合开始,且当你成为其〖令戮〗的目标后,其可令你于〖令戮〗失败时进行两次结算。', + twlinglu:'令戮', + twlinglu_info:'强令:①任务:执行角色于其下回合结束前造成的伤害不小于2点。②成功:其摸两张牌。③失败:其失去1点体力。', + tw_mateng:'TW马腾', + twxiongzheng:'雄争', + twxiongzheng_info:'一轮游戏开始时,①若你上一轮发动过〖雄争〗且选择过“雄争”角色,你可以选择一项:1.视为对任意名上一轮内未对“雄争”角色造成过伤害的角色依次使用一张【杀】;2.令任意名上一轮对“雄争”角色造成过伤害的角色摸两张牌。②你可以选择一名未以此法选择过的角色,称为“雄争”角色。', + twluannian:'乱年', + twluannian_info:'主公技。其他群势力角色的出牌阶段限一次。其可以弃置X张牌并对“雄争”角色造成1点伤害(X为所有角色于本轮发动〖乱年〗的次数+1)。', + tw_baoxin:'鲍信', + twmutao:'募讨', + twmutao_info:'出牌阶段限一次。你可以选择一名角色,令其将手牌中所有的【杀】依次交给其下家开始的每一名角色。然后其对最后一名以此法获得【杀】的角色A造成X点伤害(X为A手牌中【杀】的数量且至多为3)。', + twyimou:'毅谋', + twyimou_info:'当一名角色受到伤害后,若其存活且你至其的距离不大于1,你可以选择一项:1.令其从牌堆中获得一张【杀】;2.令其将一张手牌交给另一名角色并摸两张牌;3.背水:若受伤角色不为你,将所有手牌交给其,然后依次执行上述所有选项。', + tw_liufuren:'刘夫人', + twzhuidu:'追妒', + twzhuidu_info:'出牌阶段限一次。你可以选择一名已受伤的其他角色并选择一项:1.对其造成1点伤害;2.弃置其装备区里的一张牌;3.背水:若该角色为女性,弃置一张牌,然后依次执行上述所有选项。', + twshigong:'示恭', + twshigong_info:'限定技。当你于回合外进入濒死状态时,你可以令当前回合角色选择一项:1.加1点体力上限并回复1点体力,摸一张牌,然后令你将体力回复至体力上限;2.弃置X张手牌,然后令你将体力回复至1点(X为其体力值)。', + tw_wangling:'TW王凌', + twmibei:'秘备', + twmibei_info:'使命技。①使命:使用每种类型且牌名不同的牌各两张。②成功:当你使用牌后,若你于本次事件完成了〖秘备①〗的使命,你获得〖谋立〗。③失败:出牌阶段结束时,若你本回合未使用过牌,你本回合手牌上限-1并重置〖秘备〗。', + twxingqi:'星启', + twxingqi_info:'觉醒技。准备阶段,若场上的牌数大于你的体力值,你回复1点体力,然后若〖秘备〗:未完成,你从牌堆中获得每种类型的牌各一张;已完成,本局游戏你使用牌无距离限制。', + twmouli:'谋立', + twmouli_backup:'谋立', + twmouli_info:'每回合限一次。你可以使用牌堆中的一张基本牌。', + tw_zhugeguo:'TW诸葛果', + twqirang:'祈禳', + twqirang_info:'当有装备牌进入你的装备区时,你可以从牌堆中获得一张锦囊牌,你本阶段使用此牌无距离限制且不可被响应,且当你使用此牌时,你可以为这张牌增加或减少一个目标。', + twyuhua:'羽化', + twyuhua_info:'锁定技。①你的非基本牌不计入手牌上限。②当你于回合外失去牌后,若其中有非基本牌,你可以卜算X,然后你可以摸X张牌(X为其中非基本牌数且至多为5)。', + tw_fanchou:'TW樊稠', + twxingluan:'兴乱', + twxingluan_info:'结束阶段,你可以亮出牌堆顶的六张牌,然后你可以选择一种类型的牌并分配给任意角色(每名角色至多三张)。然后所有以此法获得过牌且获得的牌数不少于你的角色失去1点体力。', + tw_xujing:'TW许靖', + twboming:'博名', + twboming_info:'①出牌阶段限两次。你可以将一张牌交给一名其他角色。②结束阶段,若你本回合因〖博名①〗失去了不少于两张牌,你摸两张牌。', + twejian:'恶荐', + twejian_info:'当其他角色获得你的牌后,若其有其他与此牌类型相同的牌,你可以令其选择一项:1.受到你造成的1点伤害;2.弃置这些牌。', + tw_zhangfei:'TW张飞', + twxuhe:'虚吓', + twxuhe_info:'当你使用的【杀】被【闪】抵消时,你可以弃置一张牌,令其选择一项:1.受到你造成的1点伤害;2.本回合你使用的下一张牌对其造成伤害时,此伤害+2。', + tw_xuezong:'TW薛综', + twjiexun:'诫训', + twjiexun_info:'结束阶段,你可以选择一个花色并令一名其他角色摸等同于场上此花色牌数张牌,然后其弃置X张牌。若其以此法弃置了所有牌,你选择一项:1.摸X张牌,然后将X归零;2.修改〖复难〗和〖诫训〗(X为此前〖诫训〗的发动次数)。', + twfunanx:'复难·改', + twjiexunx:'诫训·改', + twfunanx_info:'当其他角色使用或打出牌响应你使用的牌时,你可获得其使用或打出的牌。', + twjiexunx_info:'结束阶段,你可选择一个花色并令一名其他角色摸等同于场上此花色牌数张牌,然后其弃置X张牌(X为此前〖诫训〗的发动次数)。', + tw_zhangning:'TW张宁', + twxingzhui:'星坠', + twxingzhui_info:'出牌阶段限一次。你可以失去1点体力并施法:亮出牌堆顶2X张牌,若其中有黑色牌,则你可令一名其他角色获得这些黑色牌。若黑色牌的数量不小于X,则你对其造成X点雷电伤害。', + twjuchen:'聚尘', + twjuchen_info:'结束阶段,若你的手牌数和体力值均不为全场最多,则你可以令所有角色弃置一张牌,然后你获得其中的红色牌。', + tw_yufuluo:'于夫罗', + twjiekuang:'竭匡', + twjiekuang_info:'每回合限一次。当一名体力值小于你的角色成为其他角色使用基本牌或普通锦囊牌的唯一目标后,若没有角色处于濒死状态,你可以失去1点体力或减1点体力上限,将此牌的目标转移给你。然后此牌结算结束后,若此牌未造成伤害且此牌的使用者是你使用此牌名的牌的合法目标,你视为对此牌的使用者使用一张同名牌。', + twneirao:'内扰', + twneirao_info:'觉醒技。准备阶段,若你的体力值与体力上限之和不大于9,你失去〖竭匡〗,弃置所有牌并从牌堆或弃牌堆中获得等量的【杀】,然后获得〖乱掠〗。', + twluanlve:'乱掠', + twluanlve_info:'①出牌阶段,你可以将X张【杀】当做【顺手牵羊】对一名本阶段未成为过【顺手牵羊】的目标的角色使用(X为你以此法使用【顺手牵羊】的次数)。②当你使用牌时,若此牌为【顺手牵羊】,你令此牌不能被响应。', + tw_fengxí:'冯习', + twqingkou:'轻寇', + twqingkou_info:'准备阶段,你可以视为对一名其他角色使用一张【决斗】。然后此牌的伤害来源摸一张牌,若该角色为你,你跳过本回合的判定阶段和弃牌阶段。', + tw_zhangji:'张既', + twdingzhen:'定镇',//丁真 + twdingzhen_info:'一轮游戏开始时,你可以选择任意名你至其距离不大于X的角色(X为你的体力值),这些角色选择一项:1.弃置一张【杀】;2.本轮其于回合内使用的第一张牌不能指定你为目标。', + twyouye:'攸业', + twyouye_info:'锁定技。①其他角色的结束阶段,若其本回合未对你造成过伤害且“蓄”数小于5,你将牌堆顶的牌置于武将牌上,称为“蓄”。②当你造成或受到伤害后,若你有“蓄”,你将所有“蓄”分配给任意角色(若当前回合角色存活,则你至少为当前回合角色分配一张)。', + tw_xunchen:'TW荀谌', + twweipo:'危迫', + twweipo_info:'出牌阶段限一次。你可以令一名角色弃置一张牌,然后令其获得一张【兵临城下】或一张由你选择的智囊牌。', + twmouzhi:'谋识', + twmouzhi_info:'锁定技。当你受到伤害时,若伤害渠道对应的牌和你上次受到的伤害渠道对应的牌颜色相同,则你防止此伤害。', + tw_jiangqing:'TW蒋钦', + twshangyi:'尚义', + twshangyi_info:'出牌阶段限一次。你可以弃置一张牌并选择一名有手牌的其他角色,你令其观看你的手牌,然后你观看其手牌并选择一项:1.弃置其中一张牌;2.与其交换一张手牌。若你以此法弃置了其的黑色牌,或你与其交换的两张牌均为红色,你摸一张牌。', + twxiangyu:'翔羽', + twxiangyu_info:'锁定技。①你于回合内的攻击范围+X(X为本回合失去过牌的角色数且至多为5)。②当你使用【杀】指定目标后,若你至目标角色的距离小于你的攻击范围,你令此目标角色抵消此【杀】所需使用的【闪】数+1。', + twgyshenxing:'慎行', + twgyshenxing_info:'出牌阶段,你可以弃置X张牌,然后摸一张牌并获得1枚“慎”标记(X为你的“慎”数且至多为2)。', + tw_guyong:'TW顾雍', + twbingyi:'秉壹', + twbingyi_info:'结束阶段,你可以展示所有手牌,若这些牌的颜色均相同或类别均相同,你可以令至多Y名角色各摸一张牌(Y为你的手牌数)。若你以此法展示的牌数大于1且这些牌的颜色均相同且类别均相同,你移去所有“慎”。', + twyilie:'毅烈', + twyilie_info:'出牌阶段开始时,你可以选择一项:1.本阶段内使用【杀】的次数上限+1;2.本回合内使用【杀】指定处于连环状态的目标后,或使用【杀】被【闪】抵消时,摸一张牌;3.背水:失去1点体力,然后依次执行上述所有选项。', + tw_chendong:'TW陈武董袭', + twfenming:'奋命', + twfenming_info:'准备阶段,你可以选择一名其他角色并选择一项:1.令其弃置一张牌;2.令其横置;3.背水:横置,然后依次执行上述所有选项。', + tw_handang:'TW韩当', + twgongji:'弓骑', + twgongji2:'弓骑', + twgongji_info:'①你的攻击范围无限。②出牌阶段限一次,你可以弃置一张牌,然后你使用与此牌花色相同的【杀】无任何次数限制直到回合结束。若你以此法弃置的牌为装备牌,则你可以弃置一名其他角色的一张牌。', + twjiefan:'解烦', + twjiefan_info:'限定技。出牌阶段,你可以选择一名角色,令攻击范围内含有其的所有角色依次选择一项:1.弃置一张武器牌;2.令其摸一张牌。然后当其第一次进入濒死状态后,你重置〖解烦〗。', + tw_jiling:'TW纪灵', + twshuangren:'双刃', + twshuangren_info:'①出牌阶段开始时,你可以与一名角色拼点。若你:赢,你可以视为对至多两名至其的距离不大于1的角色依次使用一张【杀】;没赢,其可以视为对你使用一张【杀】。②出牌阶段结束时,若你本回合未发动过〖双刃①〗且未造成过渠道为【杀】的伤害,你可以弃置一张牌发动〖双刃①〗。', + tw_re_fazheng:'TW法正', + twxuanhuo:'眩惑', + twxuanhuo_info:'摸牌阶段结束时,你可以交给一名其他角色两张牌,然后其选择一项:1.视为对你选择的另一名其他角色使用一张【杀】或【决斗】,2.令你获得其两张牌。', + twenyuan:'恩怨', + twenyuan1:'恩怨', + twenyuan2:'恩怨', + twenyuan_info:'①当你获得一名其他角色的至少两张牌后,你可以令其摸一张牌,若其手牌区或装备区没有牌,则你可以改为令其回复1点体力。②当你受到1点伤害后,你可令伤害来源选择一项:1.失去1点体力;2.交给你一张手牌,若此牌的花色不为♥,你摸一张牌。', + tw_madai:'TW马岱', + twqianxi:'潜袭', + twqianxi2:'潜袭', + twqianxi3:'潜袭', + twqianxi2_bg:'潜', + twqianxi3_bg:'袭', + twqianxi_info:'准备阶段,你可以摸一张牌并弃置一张牌,令一名距离为1的角色本回合不能使用或打出与你弃置的牌颜色相同的手牌。然后本回合的结束阶段,若你本回合对其造成过渠道为【杀】的伤害,你令其不能使用或打出与你以此法弃置的牌颜色不同的牌直到其下回合结束。', + tw_niujin:'TW牛金', + twcuorui:'挫锐', + twcuorui_info:'限定技。准备阶段,你可以将手牌摸至X张(X为场上角色手牌数最多的角色的手牌数,且至多摸5张)。然后若你的判定区:未废除,你废除判定区;已废除,你可以对一名其他角色造成1点伤害。', + twliewei:'裂围', + twliewei_info:'锁定技。当你杀死一名角色后,你选择一项:1.摸两张牌;2.若你拥有〖挫锐〗且〖挫锐〗已发动过,重置〖挫锐〗。', + tw_guanqiujian:'TW毌丘俭', + twzhengrong:'征荣', + twzhengrong_tag:'荣', + twzhengrong_info:'当你于出牌阶段使用牌结算结束后,若此牌为你于本局游戏你的出牌阶段内使用的第偶数张指定了其他角色为目标的牌,或你于出牌阶段第一次造成伤害后,你可以将一名其他角色的一张牌置于你的武将牌上,称为“荣”。', + twhongju:'鸿举', + twhongju_info:'觉醒技。准备阶段,若你的“荣”数不小于3,你摸等同于“荣”数的牌,且可以用任意手牌交换等量的“荣”,获得〖清侧〗,然后可以减1点体力上限并获得〖扫讨〗。', + twqingce:'清侧', + twqingce_backup:'清侧', + twqingce_info:'出牌阶段,你可以将一张“荣”置入弃牌堆并选择一名区域内有牌的角色,你弃置其区域里的一张牌。', + twsaotao:'扫讨', + twsaotao_info:'锁定技。你使用【杀】和普通锦囊牌不能被响应。', + tw_daxiaoqiao:'TW大乔小乔', + twxingwu:'星舞', + twxingwu_info:'弃牌阶段开始时,你可以将一张牌置于武将牌上,称为“星舞”。然后你可移去三张“星舞”,弃置一名其他角色装备区里的所有牌,然后对其造成2点伤害(若其性别包含女性则改为1点伤害)。', + twpingting:'娉婷', + twpingting_info:'锁定技。①一轮游戏开始时或其他角色于你的回合内进入濒死状态时,你摸一张牌并将一张牌置于武将牌上,称为“星舞”。②若你有“星舞”,你视为拥有〖天香〗和〖流离〗。', + tw_furong:'TW傅肜', + twxuewei:'血卫', + twxuewei_info:'每轮限一次。一名其他角色A的出牌阶段开始时,你可以选择另一名其他角色B,然后你令A选择一项:1.本回合不能对B使用【杀】且手牌上限-2;2.你视为对A使用一张【决斗】。', + twliechi:'烈斥', + twliechi_info:'当你受到伤害后,若伤害来源的体力值不小于你,你可以选择一项:1.令其将手牌数弃置至与你的手牌数相同;2.弃置其一张牌;3.背水:若你本回合进入过濒死状态,弃置一张装备牌,然后依次执行上述所有选项。', + tw_yl_luzhi:'TW卢植', + twmingren:'明任', + twmingren_info:'①游戏开始时,你摸一张牌,然后将一张手牌置于武将牌上,称为“任”。②出牌阶段开始时或出牌阶段结束时,你可以用一张牌替换“任”。', + twzhenliang:'贞良', + twzhenliang_info:'转换技。阴:出牌阶段限一次。你可以弃置一张牌并对攻击范围内的一名角色造成1点伤害。阳:当你或你攻击范围内的一名角色于你的回合外受到伤害时,你可以弃置一张牌令此伤害-1。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。', + tw_zhangnan:'张南', + twfenwu:'奋武', + twfenwu_info:'结束阶段,你可以失去1点体力并视为使用一张无距离限制的【杀】。若本回合你使用过的基本牌种数大于1,此【杀】伤害基数+1。', + tw_huchuquan:'呼厨泉', + twfupan:'复叛', + twfupan_info:'当你造成或受到伤害后,你可以摸X张牌并将一张牌交给一名其他角色(X为伤害值)。若你此前:未以此法交给过该角色牌,你摸两张牌;以此法交给过该角色牌,你可{对其造成1点伤害,然后你不能再以此法交给其牌}。', + tw_liuzhang:'TW刘璋', + twyaohu:'邀虎', + twyaohu_info:'每轮限一次。回合开始时,你须选择场上的一个势力。该势力的角色的出牌阶段开始时,其获得你的一张“生”,然后其须选择一项:1.对你指定的另一名的其他角色使用一张【杀】(无距离限制);2.本回合其使用伤害牌指定你为目标时须交给你两张牌,否则取消此目标。', + tw_liwei:'李遗', + twjiaohua:'教化', + twjiaohua_info:'当你或体力值最小的其他角色因摸牌而获得牌后,你可以令该角色从牌堆或弃牌堆中获得一张本次未获得的类别的牌(每种类别每回合限一次)。', + tw_yanxiang:'阎象', + twkujian:'苦谏', + twkujianx:'谏', + twkujian_info:'出牌阶段限一次。你可以将至多三张手牌交给一名其他角色,称为“谏”,你获得以下效果:当其他角色使用或打出牌后,若其中有“谏”,你与其各摸一张牌;当其他角色不因使用或打出而失去牌后,若其中有“谏”,你与其各弃置一张牌。', + twruilian:'睿敛', + twruilian2:'睿敛', + twruilian_info:'一轮游戏开始时,你可以选择一名角色。其下回合结束时,若其本回弃置过至少两张其的牌,你可以选择其本回合弃置过的一种类别,你与其各从弃牌堆中获得一张此类别的牌。', + tw_xiahouen:'夏侯恩', + twfujian:'负剑', + twfujian_info:'锁定技。①游戏开始时或准备阶段,若你的装备区里没有武器牌,你随机将牌堆中的一张武器牌置入装备区。②当你于回合外失去武器牌后,你失去1点体力。', + twjianwei:'剑威', + twjianwei_info:'①若你的装备区里有武器牌,你使用【杀】无视防具且拼点牌点数+X(X为你的攻击范围)。②{其他角色的准备阶段,其可以与你拼点}/{准备阶段,你可以与攻击范围内的一名角色拼点}。若你赢,你获得其每个区域内的各一张牌;若其赢,其获得你装备区里的武器牌。', + tw_xiahoushang:'夏侯尚', + twtanfeng:'探锋', + twtanfeng_info:'准备阶段,你可以弃置一名其他角色区域内的一张牌,然后其选择一项:1.受到你造成的1点火焰伤害,然后令你跳过本回合的一个阶段(准备阶段和结束阶段除外);2.将一张牌当做【杀】对你使用(有距离限制)。', + tw_zongyu:'TW宗预', + twzhibian:'直辩', + twzhibian_info:'出牌阶段开始时,你可以与一名其他角色拼点。若你赢,你可以选择一项:{1.将其区域里的一张牌移动到你的对应区域;2.回复1点体力;3.背水:弃置一张非基本牌,然后依次执行上述所有选项};若你没赢,你失去1点体力。', + twyuyan:'御严', + twyuyan_info:'锁定技。当你成为体力值大于你的角色使用的【杀】的目标时,你令使用者选择一项:1.交给你一张点数大于此【杀】的牌(若此【杀】无点数则改为非基本牌)。2.取消此目标。', + tw_zhouchu:'TW周处', + twguoyi:'果毅', + twguoyi_info:'当你不因〖果毅〗使用【杀】或普通锦囊牌指定一名其他角色为目标后,若其体力值或手牌数最大,或你的手牌数不大于X(X为你已损失的体力值+1),你可令其选择一项:1.本回合不能使用或打出手牌;2.弃置X张牌。若条件均满足,或其于本回合两个选项均已选择过,则你于此牌结算结束后依次视为对此牌的所有目标使用一张名称和属性相同的牌。', + twchuhai:'除害', + twchuhai_info:'使命技。①使命:令至少两名其他角色进入濒死状态。②成功:一名角色的回合结束时,若你于本回合完成了〖除害①〗的使命,你废除判定区,然后每名其他角色依次交给你一张牌。③当你获得其他角色的牌后,你须将其中的一张牌置入弃牌堆。', + tw_qiaogong:'TW桥公', + twyizhu:'遗珠', + twyizhu_info:'①结束阶段,你摸两张牌,然后将两张牌随机插入牌堆前2X张牌的位置中,称为“遗珠”(X为角色数,选择牌的牌名对其他角色可见)。②当有其他角色使用“遗珠”指定唯一目标时,你可以选择一项:1.增加一个目标;2.取消此目标,增加一个目标。然后移除此牌对应的“遗珠”记录并摸一张牌。', + twluanchou:'鸾俦', + twluanchou_info:'出牌阶段限一次。你可以令两名角色获得〖共患〗直到你下次发动此技能。', + twgonghuan:'共患', + twgonghuan_info:'每回合限一次。当其他角色受到伤害时,若其拥有〖共患〗且其体力值不大于你,你可以将此伤害转移给你(不触发〖共患〗)。', + tw_qiaorui:'桥蕤', + wangxing:'妄行', + twxiawei:'狭威', + twxiawei_info:'①游戏开始时,你将牌堆中的两张基本牌置于武将牌上,称为“威”。②回合开始时,你将所有“威”置入弃牌堆。③你可以将“威”如手牌般使用或打出。④妄行:准备阶段,你可以将牌堆顶的X+1张牌置于武将牌上,称为“威”。', + twqiongji:'穹技', + twqiongji_info:'锁定技。①每回合限一次。当你使用或打出“威”后,你摸一张牌。②当你受到伤害时,若你没有“威”,此伤害+1。', + tw_bianfuren:'TW卞夫人', + twwanwei:'挽危', + twwanwei_info:'每回合限一次。当一名体力值最小的角色受到伤害时:若该角色不为你,你可以防止此伤害,然后失去1点体力;若该角色为你,或你的体力上限最大,你可以于当前回合的结束阶段获得牌堆顶的牌并展示牌堆底的牌,若展示的牌能被使用,你使用之。', + twyuejian:'约俭', + twyuejian_info:'出牌阶段限一次。你可以将X张牌置于牌堆顶或牌堆底(X为你的手牌数减你的手牌上限且至少为1)。若你以此法失去的牌数:不小于3,你的体力上限+1;不小于2,你回复1点体力;不小于1,你的手牌上限+1。', + tw_chenzhen:'TW陈震', + twmuyue:'睦约', + twmuyue_info:'出牌阶段限一次。你可以弃置一张牌并选择一个基本牌或普通锦囊牌的牌名,然后令一名角色从牌堆中获得一张此牌名的牌。若你以此法弃置的牌的牌名与你选择的牌名相同,你下次发动〖睦约〗无需弃牌。', + twchayi:'察异', + twchayi_info:'结束阶段,你可以选择一名其他角色,令其选择一项:1.展示所有手牌;2.下次使用牌时弃置一张牌。该角色的下个回合结束时,若其手牌数与其上一次成为〖察异〗目标后的手牌数不相同,其执行另一项。', + tw_feiyi:'TW费祎', + twshengxi:'生息', + twshengxi_info:'①准备阶段,你可以获得一张【调剂盐梅】。②结束阶段,若你本回合使用过牌且未造成伤害,则你可以获得一张智囊并摸一张牌。', + twkuanji:'宽济', + twkuanji_info:'每回合限一次。当你的牌不因使用而进入弃牌堆后,你可以令一名其他角色获得其中的一张牌。', + xia_wangyue:'王越', + twyulong:'驭龙', + twyulong_info:'当你使用【杀】指定第一个目标后,你可以与一名目标角色拼点。若你赢,且你此次的拼点牌为:黑色,此【杀】伤害+1;红色,此【杀】不可被响应。当此【杀】造成伤害后,若你赢,你令此【杀】不计入次数。', + twjianming:'剑鸣', + twjianming_info:'锁定技。每回合每种花色限一次,当你使用或打出【杀】时,你摸一张牌。', + xia_liyàn:'李彦', + twzhenhu:'震虎', + twzhenhu_info:'当你使用伤害牌指定第一个目标时,你可以摸一张牌并与至多三名其他角色共同拼点。若你赢,此牌对所有本次拼点没赢的角色造成的伤害+1;若你没赢,你失去1点体力。', + twlvren:'履刃', + twlvren_info:'①当你对其他角色造成伤害时,你令其获得1枚“刃”标记。②当你使用伤害牌时,你可以额外指定一名有“刃”的角色并移去其所有“刃”。③你的拼点牌点数+2X(X为参与此次拼点的角色数)。', + xia_tongyuan:'TW童渊', + twchaofeng:'朝凤', + twchaofeng_backup:'朝凤', + twchaofeng_info:'①你可以将一张【杀】当做【闪】、【闪】当做任意一种【杀】使用或打出。②出牌阶段开始时,你可以与至多三名角色共同拼点。赢的角色视为对所有没赢的角色使用一张火【杀】。', + twchuanshu:'传术', + twchuanshu_info:'限定技。准备阶段,你可以选择一名角色。直到你的下回合开始,其获得以下效果:1.当其拼点牌亮出时,此牌点数+3;2.其使用的下一张【杀】对除你外的角色造成伤害时,此伤害+1;3.若其不为你,其使用的下一张【杀】结算结束后,你摸等同于其因此【杀】造成的伤害值数的牌。', + xia_xushu:'侠徐庶', + twjiange:'剑歌', + twjiange_info:'每回合限一次。你可以将一张非基本牌当做【杀】使用或打出(无距离和次数限制,且不计入次数)。若此时不为你的回合,你摸一张牌。', + twxiawang:'侠望', + twxiawang_info:'当一名角色受到伤害后,若你至其的距离不大于1,你可以对伤害来源使用一张【杀】。当此【杀】结算结束后,若你造成过渠道为此牌的伤害,结束当前阶段。', + tw_tongyuan:'TW童渊', + tw_haomeng:'TW郝萌', + twgongge:'攻阁', + twgongge_info:'摧坚:你可以选择一项:1.摸X+1张牌。其响应此牌后,跳过你的下一个摸牌阶段;2.弃置其X+1张牌。此牌结算结束后,若其体力值不小于你,你交给其X张牌;3.此牌对其造成的伤害+X。此牌结算结束后,其回复X点体力。', + tw_weixu:'魏续', + twsuizheng:'随征', + twsuizheng_info:'锁定技。游戏开始时,你选择一名其他角色,称为“随征”角色。你获得以下效果:当“随征”角色造成伤害后,你摸一张牌;当“随征”角色受到伤害后,你选择一项:1.失去1点体力,令其从牌堆或弃牌堆中获得一张【杀】或【决斗】;2.弃置两张基本牌,令其回复1点体力。', + twtuidao:'颓盗', + twtuidao_info:'限定技。准备阶段,若“随征”角色的体力值不大于2或“随征”角色已死亡,你可以废除你与其的一个坐骑栏并选择一个类别,然后若“随征”角色存活,你获得其所有此类别的牌,否则你从牌堆中获得两张此类别的牌。然后你将“随征”角色改为另一名角色。', + tw_caoxiu:'TW曹休', + twqianju:'千驹', + twqianju_info:'锁定技。①你计算与其他角色的距离-X(X为你装备区的牌数)。②每回合限一次。当你对距离为1以内的角色造成伤害后,若你的装备区存在空置装备栏,你从牌堆或弃牌堆中将一张你空置装备栏对应副类别的装备牌置于你的装备区。', + twqingxi:'倾袭', + twqingxi_info:'当你使用张【杀】指定目标后,若此牌为你于本回合使用的第一张【杀】,你可以令目标角色选择一项:1.令你摸Y张牌,此【杀】不可被其响应(Y为你装备区的牌数且至少为1);2.若其装备区里有牌,弃置装备区里的所有牌,然后弃置你装备区里的等量张牌,令此【杀】对其造成的伤害+1。', + tw_sunyi:'TW孙翊', + twzaoli:'躁厉', + twzaoli_info:'锁定技。①出牌阶段,你只能使用或打出你本回合获得的手牌。②出牌阶段开始时,你须弃置你区域内的所有装备牌并弃置任意张非装备手牌,你摸等量的牌,从牌堆中将你此次弃置的装备牌对应副类别的装备牌置入装备区。若你以此法置入了超过两张装备牌,你失去1点体力。', + tw_yangyi:'TW杨仪', + twgongsun:'共损', + twgongsun_shadow:'共损', + twgongsun_info:'锁定技。出牌阶段开始时,你选择攻击范围内的一名其他角色并选择一种花色,直至你的下个回合开始前或你死亡时,你与其均无法使用、打出或弃置该花色的手牌。', + tw_dengzhi:'TW邓芝', + twjimeng:'急盟', + twjimeng_info:'出牌阶段限一次。你可以获得一名其他角色区域内的一张牌,然后交给其一张牌。若其体力值不小于你,你摸一张牌。', + + tw_mobile:'海外服·稀有专属', + tw_yunchouzhi:'运筹帷幄·智', + tw_yunchouxin:'运筹帷幄·信', + tw_yunchouren:'运筹帷幄·仁', + tw_yunchouyong:'运筹帷幄·勇', + tw_yunchouyan:'运筹帷幄·严', + tw_sp:'海外服·SP', + tw_swordsman:'海外服·武侠篇', + tw_mobile2:'海外服·异构', tw_yijiang:'一将成名TW', tw_english:'英文版', } diff --git a/character/xinghuoliaoyuan.js b/character/xinghuoliaoyuan.js index 5d1268590..738db9a01 100755 --- a/character/xinghuoliaoyuan.js +++ b/character/xinghuoliaoyuan.js @@ -1481,6 +1481,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterReplace:{ duji:['re_duji','duji'], sp_taishici:['re_sp_taishici','sp_taishici'], + mazhong:['mazhong','re_mazhong'], }, translate:{ xinghuoliaoyuan:'星火燎原', diff --git a/character/yijiang.js b/character/yijiang.js index fa741cedd..8f86a8d9a 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -473,11 +473,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, viewas:{ mod:{ + hiddenCard:function(player,name){ + var storage=player.getStorage('sangu_effect'); + if(storage.length) return name==storage[0]; + }, cardname:function(card,player){ + if(_status.event.name!='chooseToUse'||_status.event.skill) return; var storage=player.getStorage('sangu_effect'); if(storage.length) return storage[0]; }, cardnature:function(card,player){ + if(_status.event.name!='chooseToUse'||_status.event.skill) return; var storage=player.getStorage('sangu_effect'); if(storage.length) return false; }, @@ -2958,9 +2964,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ number:{ trigger:{player:'compare',target:'compare'}, filter:function(event,player){ - if(event.iwhile) return false; if(event.player==player){ - return get.suit(event.card1)=='heart';//&&event.card1.vanishtag.contains('tianbian'); + return !event.iwhile&&get.suit(event.card1)=='heart';//&&event.card1.vanishtag.contains('tianbian'); } else{ return get.suit(event.card2)=='heart';//&&event.card2.vanishtag.contains('tianbian'); @@ -12774,7 +12779,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yujin:['yujin_yujin','ol_yujin','xin_yujin','yujin'], dc_xushu:['dc_xushu','re_xushu'], xushu:['xin_xushu','xushu'], - fazheng:['re_fazheng','xin_fazheng','fazheng'], + fazheng:['re_fazheng','tw_re_fazheng','xin_fazheng','fazheng'], masu:['xin_masu','re_masu','masu'], xusheng:['xin_xusheng','re_xusheng','xusheng','old_xusheng'], wuguotai:['xin_wuguotai','re_wuguotai','wuguotai'], @@ -12784,10 +12789,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wangyi:['re_wangyi','wangyi','old_wangyi'], caozhang:['re_caozhang','xin_caozhang','caozhang'], guanzhang:['guanzhang','old_guanzhang'], - madai:['re_madai','old_madai','madai'], + madai:['tw_madai','re_madai','old_madai','madai'], liaohua:['xin_liaohua','re_liaohua','liaohua'], bulianshi:['re_bulianshi','dc_bulianshi','bulianshi','old_bulianshi'], - handang:['xin_handang','re_handang','handang'], + handang:['tw_handang','xin_handang','re_handang','handang'], chengpu:['re_chengpu','tw_chengpu','ns_chengpu','chengpu','xin_chengpu'], liubiao:['re_liubiao','xin_liubiao','liubiao'], manchong:['re_manchong','manchong'], @@ -12799,13 +12804,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhuran:['re_zhuran','xin_zhuran','zhuran','old_zhuran'], liru:['re_liru','dc_liru','xin_liru','liru'], fuhuanghou:['re_fuhuanghou','xin_fuhuanghou','fuhuanghou','old_fuhuanghou'], - chenqun:['chenqun','re_chenqun','old_chenqun'], + chenqun:['dc_chenqun','chenqun','re_chenqun','old_chenqun'], hanhaoshihuan:['re_hanhaoshihuan','hanhaoshihuan'], caozhen:['re_caozhen','xin_caozhen','caozhen','old_caozhen'], - wuyi:['re_wuyi','wuyi'], + wuyi:['re_wuyi','xin_wuyi','wuyi'], sunluban:['re_sunluban','xin_sunluban','sunluban'], zhuhuan:['re_zhuhuan','xin_zhuhuan','zhuhuan','old_zhuhuan'], - caoxiu:['re_caoxiu','caoxiu','old_caoxiu'], + caoxiu:['re_caoxiu','tw_caoxiu','xin_caoxiu','caoxiu','old_caoxiu'], xiahoushi:['re_xiahoushi','xiahoushi'], zhangyi:['re_zhangyi','zhangyi'], quancong:['old_quancong','re_quancong','xin_quancong','quancong'], @@ -12820,7 +12825,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guotufengji:['re_guotufengji','guotufengji'], guanping:['re_guanping','guanping'], caifuren:['xin_caifuren','re_caifuren','caifuren'], - guyong:['guyong','re_guyong','xin_guyong'], + guyong:['guyong','re_guyong','tw_guyong','xin_guyong'], yj_jushou:['re_jushou','xin_jushou','yj_jushou'], guohuanghou:['re_guohuanghou','guohuanghou'], liuchen:['re_liuchen','liuchen'], @@ -12828,6 +12833,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sundeng:['re_sundeng','sundeng'], caiyong:['re_caiyong','caiyong'], chengong:['re_chengong','chengong'], + xunyou:['re_xunyou','xunyou'], + xuezong:['tw_xuezong','xuezong'], }, translate:{ old_huaxiong:'华雄', @@ -13064,7 +13071,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chunlao2:'醇醪', chunlao_info:'结束阶段开始时,若你没有“醇”,你可以将至少一张【杀】置于你的武将牌上,称为“醇”。当一名角色处于濒死状态时,你可以移去一张“醇”,视为该角色使用一张【酒】', lihuo:'疠火', - lihuo_info:'当你声明使用普通【杀】时,你可以将此【杀】改为火【杀】。若以此法使用的【杀】造成了伤害,则此【杀】结算后你失去1点体力;你使用火【杀】选择目标后,可以额外指定一个目标。', + lihuo_info:'当你声明使用普通【杀】后,你可以将此【杀】改为火【杀】。若以此法使用的【杀】造成了伤害,则此【杀】结算后你失去1点体力;你使用火【杀】选择目标后,可以额外指定一个目标。', shenduan:'慎断', shenduan_info:'当你的黑色基本牌因弃置而进入弃牌堆后,你可以将其当做【兵粮寸断】使用(无距离限制)。', yonglve:'勇略', @@ -13089,7 +13096,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xindangxian:'当先', xindangxian_info:'锁定技,准备阶段,你执行一个额外的出牌阶段。此阶段开始时,你失去1点体力并从牌堆/弃牌堆中获得一张【杀】(若你已发动过〖伏枥〗,则可以不发动此效果)。', longyin:'龙吟', - longyin_info:'当一名角色于其出牌阶段使用【杀】时,你可弃置一张牌令此【杀】不计入出牌阶段使用次数,若此【杀】为红色,你摸一张牌。', + longyin_info:'当一名角色于其出牌阶段内使用【杀】时,你可弃置一张牌令此【杀】不计入出牌阶段使用次数,若此【杀】为红色,你摸一张牌。', zhongyong:'忠勇', zhongyong_info:'当你于出牌阶段内使用的【杀】被目标角色使用的【闪】抵消时,你可以将此【闪】交给除该角色外的一名角色。若获得此【闪】的角色不是你,你可以对相同的目标再使用一张【杀】。', xinzhongyong:'忠勇', @@ -13425,7 +13432,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ kousheng_info:'①出牌阶段开始时,你可以选择任意张手牌,这些牌称为“寇胜”直到回合结束。②你的“寇胜”均视为【杀】且无次数限制。③当你因执行对应实体牌包含“寇胜”的【杀】的效果而造成伤害后,你展示所有“寇胜”牌,然后目标角色可以用所有手牌交换这些牌。', zhugeshang:'诸葛尚', sangu:'三顾', - sangu_info:'出牌阶段结束时,你可以选择至多三个{【杀】或不为notarget或singleCard的普通锦囊牌}中的牌名,然后令一名其他角色记录这些牌名。该角色的下个出牌阶段开始时,其的手牌均视为其记录中的第一张牌直到此阶段结束,且当其使用或打出牌时,移除这些牌中的第一张牌。若你以此法选择过的牌名中包含你本阶段内未使用过的牌名,则你失去1点体力。', + sangu_info:'出牌阶段结束时,你可以选择至多三个{【杀】或不为notarget或singleCard的普通锦囊牌}中的牌名,然后令一名其他角色记录这些牌名。该角色的下个出牌阶段开始时,其的手牌于其需要使用牌时均视为其记录中的第一张牌直到此阶段结束,且当其使用或打出牌时,移除这些牌中的第一张牌。若你以此法选择过的牌名中包含你本阶段内未使用过的牌名,则你失去1点体力。', yizu:'轶祖', yizu_info:'锁定技。每回合限一次,当你成为【杀】或【决斗】的目标后,若你的体力值不大于使用者的体力值,则你回复1点体力。', liwan:'李婉', diff --git a/character/yingbian.js b/character/yingbian.js index b524c9706..2b8cfddbf 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -3518,7 +3518,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ huishi:'慧识', huishi_info:'摸牌阶段,你可以放弃摸牌,改为观看牌堆顶的X张牌,获得其中的一半(向下取整),然后将其余牌置入牌堆底。(X为牌堆数量的个位数)', qingleng:'清冷', - qingleng_info:'一名角色的回合结束时,若其体力值与手牌数之和不小于X,则你可将一张牌当无距离限制的冰属性【杀】对其使用(X为牌堆数量的个位数)。若你本局游戏内未对其发动过此技能,则你摸一张牌。', + qingleng_info:'一名角色的回合结束时,若其体力值与手牌数之和不小于X,则你可将一张牌当无距离限制的冰属性【杀】对其使用(X为牌堆数量的个位数)。若这是你本局游戏内首次其发动过此技能,则你摸一张牌。', xuanmu:'宣穆', xuanmu2:'宣穆', xuanmu_info:'锁定技,隐匿技。你于其他角色的回合登场时,防止你受到的伤害直到回合结束。', diff --git a/game/asset.js b/game/asset.js index 17b5a1484..f4316e169 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.120', + 'v1.9.120.1', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -176,6 +176,86 @@ window.noname_asset_list=[ 'audio/card/male/yuanjiao.mp3', 'audio/card/male/zhibi.mp3', + 'audio/die/ahuinan.mp3', + 'audio/die/chengbing.mp3', + 'audio/die/chenjiao.mp3', + 'audio/die/clan_xuncai.mp3', + 'audio/die/clan_xuncan.mp3', + 'audio/die/clan_xunchen.mp3', + 'audio/die/clan_xunshu.mp3', + 'audio/die/dc_hujinding.mp3', + 'audio/die/dc_sp_jiaxu.mp3', + 'audio/die/dc_wangyun.mp3', + 'audio/die/dc_yuejiu.mp3', + 'audio/die/dc_zhouxuān.mp3', + 'audio/die/dongguiren.mp3', + 'audio/die/gongsundu.mp3', + 'audio/die/leibo.mp3', + 'audio/die/liupi.mp3', + 'audio/die/liwan.mp3', + 'audio/die/liyixiejing.mp3', + 'audio/die/ol_furong.mp3', + 'audio/die/panghui.mp3', + 'audio/die/re_caiyong.mp3', + 'audio/die/re_chengong.mp3', + 'audio/die/re_mazhong.mp3', + 'audio/die/re_xunyou.mp3', + 'audio/die/sb_caocao.mp3', + 'audio/die/sb_caoren.mp3', + 'audio/die/sb_ganning.mp3', + 'audio/die/sb_huanggai.mp3', + 'audio/die/sb_lvmeng.mp3', + 'audio/die/sb_machao.mp3', + 'audio/die/sb_sunquan.mp3', + 'audio/die/sb_sunshangxiang.mp3', + 'audio/die/sb_xiahoushi.mp3', + 'audio/die/sb_xuhuang.mp3', + 'audio/die/sb_zhangfei.mp3', + 'audio/die/sb_zhangjiao.mp3', + 'audio/die/sb_zhenji.mp3', + 'audio/die/sb_zhouyu.mp3', + 'audio/die/shen_zhangjiao.mp3', + 'audio/die/shiyi.mp3', + 'audio/die/sp_caosong.mp3', + 'audio/die/sp_pengyang.mp3', + 'audio/die/sunlang.mp3', + 'audio/die/tw_baoxin.mp3', + 'audio/die/tw_bingyuan.mp3', + 'audio/die/tw_fengxi.mp3', + 'audio/die/tw_haomeng.mp3', + 'audio/die/tw_huchuquan.mp3', + 'audio/die/tw_jiangji.mp3', + 'audio/die/tw_jiangwei.mp3', + 'audio/die/tw_jianshuo.mp3', + 'audio/die/tw_liubei.mp3', + 'audio/die/tw_liufuren.mp3', + 'audio/die/tw_liyi.mp3', + 'audio/die/tw_mateng.mp3', + 'audio/die/tw_niufudongxie.mp3', + 'audio/die/tw_qiaorui.mp3', + 'audio/die/tw_shen_lvmeng.mp3', + 'audio/die/tw_weixu.mp3', + 'audio/die/tw_xiahouen.mp3', + 'audio/die/tw_xiahoushang.mp3', + 'audio/die/tw_yanxiang.mp3', + 'audio/die/tw_yufuluo.mp3', + 'audio/die/tw_zhangji.mp3', + 'audio/die/tw_zhangnan.mp3', + 'audio/die/tw_zhangning.mp3', + 'audio/die/wangjun.mp3', + 'audio/die/wanglie.mp3', + 'audio/die/xia_liyan.mp3', + 'audio/die/xia_tongyuan.mp3', + 'audio/die/xia_wangyue.mp3', + 'audio/die/xia_xushu.mp3', + 'audio/die/xin_caoxiu.mp3', + 'audio/die/xin_wuyi.mp3', + 'audio/die/xin_zhuhuan.mp3', + 'audio/die/xin_zhuzhi.mp3', + 'audio/die/xuelingyun.mp3', + 'audio/die/yangfu.mp3', + 'audio/die/zhangzhi.mp3', + 'audio/die/zhaozhi.mp3', 'audio/die/bianxi.mp3', 'audio/die/caoxiancaohua.mp3', 'audio/die/dc_liuba.mp3', @@ -1032,6 +1112,337 @@ window.noname_asset_list=[ 'audio/effect/tori_no_uta.mp3', 'audio/effect/win.mp3', + 'audio/skill/biejun1.mp3', + 'audio/skill/biejun2.mp3', + 'audio/skill/clanbalong1.mp3', + 'audio/skill/clanbalong2.mp3', + 'audio/skill/clanbeishi1.mp3', + 'audio/skill/clanbeishi2.mp3', + 'audio/skill/clandaojie_clan_xuncai1.mp3', + 'audio/skill/clandaojie_clan_xuncai2.mp3', + 'audio/skill/clandaojie_clan_xuncan1.mp3', + 'audio/skill/clandaojie_clan_xuncan2.mp3', + 'audio/skill/clandaojie_clan_xunchen1.mp3', + 'audio/skill/clandaojie_clan_xunchen2.mp3', + 'audio/skill/clandaojie_clan_xunshu1.mp3', + 'audio/skill/clandaojie_clan_xunshu2.mp3', + 'audio/skill/clandianzhan1.mp3', + 'audio/skill/clandianzhan2.mp3', + 'audio/skill/clanfenchai1.mp3', + 'audio/skill/clanfenchai2.mp3', + 'audio/skill/clanhuanyin1.mp3', + 'audio/skill/clanhuanyin2.mp3', + 'audio/skill/clanlieshi1.mp3', + 'audio/skill/clanlieshi2.mp3', + 'audio/skill/clansankuang1.mp3', + 'audio/skill/clansankuang2.mp3', + 'audio/skill/clanshangshen1.mp3', + 'audio/skill/clanshangshen2.mp3', + 'audio/skill/clanshenjun1.mp3', + 'audio/skill/clanshenjun2.mp3', + 'audio/skill/clanyunshen1.mp3', + 'audio/skill/clanyunshen2.mp3', + 'audio/skill/dcanliao1.mp3', + 'audio/skill/dcanliao2.mp3', + 'audio/skill/dcanzhi1.mp3', + 'audio/skill/dcanzhi2.mp3', + 'audio/skill/dcbenshi1.mp3', + 'audio/skill/dcbenshi2.mp3', + 'audio/skill/dcchongwang1.mp3', + 'audio/skill/dcchongwang2.mp3', + 'audio/skill/dccuichuan1.mp3', + 'audio/skill/dccuichuan2.mp3', + 'audio/skill/dccuijin1.mp3', + 'audio/skill/dccuijin2.mp3', + 'audio/skill/dcdeshi1.mp3', + 'audio/skill/dcdeshi2.mp3', + 'audio/skill/dcdouzhen1.mp3', + 'audio/skill/dcdouzhen2.mp3', + 'audio/skill/dcenyu1.mp3', + 'audio/skill/dcenyu2.mp3', + 'audio/skill/dcfengying1.mp3', + 'audio/skill/dcfengying2.mp3', + 'audio/skill/dchuagui1.mp3', + 'audio/skill/dchuagui2.mp3', + 'audio/skill/dcjingzao1.mp3', + 'audio/skill/dcjingzao2.mp3', + 'audio/skill/dcjuying1.mp3', + 'audio/skill/dcjuying2.mp3', + 'audio/skill/dclianzhi1.mp3', + 'audio/skill/dclianzhi2.mp3', + 'audio/skill/dclingfang1.mp3', + 'audio/skill/dclingfang2.mp3', + 'audio/skill/dcliuzhuan_gain1.mp3', + 'audio/skill/dcliuzhuan_gain2.mp3', + 'audio/skill/dcmengjie1.mp3', + 'audio/skill/dcmengjie2.mp3', + 'audio/skill/dcqingyan1.mp3', + 'audio/skill/dcqingyan2.mp3', + 'audio/skill/dcshuaijie1.mp3', + 'audio/skill/dcshuaijie2.mp3', + 'audio/skill/dcsilve1.mp3', + 'audio/skill/dcsilve2.mp3', + 'audio/skill/dctingxian1.mp3', + 'audio/skill/dctingxian2.mp3', + 'audio/skill/dctongguan1.mp3', + 'audio/skill/dctongguan2.mp3', + 'audio/skill/dcwumei1.mp3', + 'audio/skill/dcwumei2.mp3', + 'audio/skill/dcwuyuan1.mp3', + 'audio/skill/dcwuyuan2.mp3', + 'audio/skill/dcxialei1.mp3', + 'audio/skill/dcxialei2.mp3', + 'audio/skill/dcxieshou1.mp3', + 'audio/skill/dcxieshou2.mp3', + 'audio/skill/dcyiyong1.mp3', + 'audio/skill/dcyiyong2.mp3', + 'audio/skill/dczhanmeng1.mp3', + 'audio/skill/dczhanmeng2.mp3', + 'audio/skill/dczhengxu1.mp3', + 'audio/skill/dczhengxu2.mp3', + 'audio/skill/dczhenze1.mp3', + 'audio/skill/dczhenze2.mp3', + 'audio/skill/dczuojian1.mp3', + 'audio/skill/dczuojian2.mp3', + 'audio/skill/duansuo1.mp3', + 'audio/skill/duansuo2.mp3', + 'audio/skill/fenli_xin_zhuhuan1.mp3', + 'audio/skill/fenli_xin_zhuhuan2.mp3', + 'audio/skill/gnjinfan_gain1.mp3', + 'audio/skill/gnjinfan_gain2.mp3', + 'audio/skill/guanzong1.mp3', + 'audio/skill/guanzong2.mp3', + 'audio/skill/hannan1.mp3', + 'audio/skill/hannan2.mp3', + 'audio/skill/jiebing1.mp3', + 'audio/skill/jiebing2.mp3', + 'audio/skill/jueman1.mp3', + 'audio/skill/jueman2.mp3', + 'audio/skill/liandui1.mp3', + 'audio/skill/liandui2.mp3', + 'audio/skill/olbixin1.mp3', + 'audio/skill/olbixin2.mp3', + 'audio/skill/olfeibai1.mp3', + 'audio/skill/olfeibai2.mp3', + 'audio/skill/olxiaosi1.mp3', + 'audio/skill/olxiaosi2.mp3', + 'audio/skill/olximo1.mp3', + 'audio/skill/olximo2.mp3', + 'audio/skill/olximo3.mp3', + 'audio/skill/qingguo_sb_zhenji1.mp3', + 'audio/skill/qingguo_sb_zhenji2.mp3', + 'audio/skill/rebizhuan1.mp3', + 'audio/skill/rebizhuan2.mp3', + 'audio/skill/refuman1.mp3', + 'audio/skill/refuman2.mp3', + 'audio/skill/remingce1.mp3', + 'audio/skill/remingce2.mp3', + 'audio/skill/reqice1.mp3', + 'audio/skill/reqice2.mp3', + 'audio/skill/retongbo1.mp3', + 'audio/skill/retongbo2.mp3', + 'audio/skill/rezhiyu1.mp3', + 'audio/skill/rezhiyu2.mp3', + 'audio/skill/sanshou1.mp3', + 'audio/skill/sanshou2.mp3', + 'audio/skill/sbanguo1.mp3', + 'audio/skill/sbanguo2.mp3', + 'audio/skill/sbanguo3.mp3', + 'audio/skill/sbbenxi1.mp3', + 'audio/skill/sbbenxi2.mp3', + 'audio/skill/sbbenxi3.mp3', + 'audio/skill/sbduanliang1.mp3', + 'audio/skill/sbduanliang2.mp3', + 'audio/skill/sbdujiang1.mp3', + 'audio/skill/sbdujiang2.mp3', + 'audio/skill/sbduojing1.mp3', + 'audio/skill/sbduojing2.mp3', + 'audio/skill/sbfanjian1.mp3', + 'audio/skill/sbfanjian2.mp3', + 'audio/skill/sbfenwei1.mp3', + 'audio/skill/sbfenwei2.mp3', + 'audio/skill/sbguidao1.mp3', + 'audio/skill/sbguidao2.mp3', + 'audio/skill/sbhuangtian1.mp3', + 'audio/skill/sbhuangtian2.mp3', + 'audio/skill/sbhujia1.mp3', + 'audio/skill/sbhujia2.mp3', + 'audio/skill/sbjianxiong1.mp3', + 'audio/skill/sbjianxiong2.mp3', + 'audio/skill/sbjiewei1.mp3', + 'audio/skill/sbjiewei2.mp3', + 'audio/skill/sbjieyin1.mp3', + 'audio/skill/sbjieyin2.mp3', + 'audio/skill/sbjiuyuan1.mp3', + 'audio/skill/sbjiuyuan2.mp3', + 'audio/skill/sbjushou1.mp3', + 'audio/skill/sbjushou2.mp3', + 'audio/skill/sbjushou3.mp3', + 'audio/skill/sbkeji1.mp3', + 'audio/skill/sbkeji2.mp3', + 'audio/skill/sbkurou1.mp3', + 'audio/skill/sbkurou2.mp3', + 'audio/skill/sbleiji1.mp3', + 'audio/skill/sbleiji2.mp3', + 'audio/skill/sbliangzhu1.mp3', + 'audio/skill/sbliangzhu2.mp3', + 'audio/skill/sbluoshen1.mp3', + 'audio/skill/sbluoshen2.mp3', + 'audio/skill/sbpaoxiao1.mp3', + 'audio/skill/sbpaoxiao2.mp3', + 'audio/skill/sbqiaoshi1.mp3', + 'audio/skill/sbqiaoshi2.mp3', + 'audio/skill/sbqingzheng1.mp3', + 'audio/skill/sbqingzheng2.mp3', + 'audio/skill/sbqixi1.mp3', + 'audio/skill/sbqixi2.mp3', + 'audio/skill/sbshipo1.mp3', + 'audio/skill/sbshipo2.mp3', + 'audio/skill/sbtieji1.mp3', + 'audio/skill/sbtieji2.mp3', + 'audio/skill/sbtongye1.mp3', + 'audio/skill/sbtongye2.mp3', + 'audio/skill/sbxiaoji1.mp3', + 'audio/skill/sbxiaoji2.mp3', + 'audio/skill/sbxieji1.mp3', + 'audio/skill/sbxieji2.mp3', + 'audio/skill/sbxieji3.mp3', + 'audio/skill/sbyanyu1.mp3', + 'audio/skill/sbyanyu2.mp3', + 'audio/skill/sbyingzi1.mp3', + 'audio/skill/sbyingzi2.mp3', + 'audio/skill/sbzhaxiang1.mp3', + 'audio/skill/sbzhaxiang2.mp3', + 'audio/skill/sbzhiheng1.mp3', + 'audio/skill/sbzhiheng2.mp3', + 'audio/skill/sijun1.mp3', + 'audio/skill/sijun2.mp3', + 'audio/skill/spdaming1.mp3', + 'audio/skill/spdaming2.mp3', + 'audio/skill/spdaming3.mp3', + 'audio/skill/spxiaoni1.mp3', + 'audio/skill/spxiaoni2.mp3', + 'audio/skill/tianjie1.mp3', + 'audio/skill/tianjie2.mp3', + 'audio/skill/twbingde1.mp3', + 'audio/skill/twbingde2.mp3', + 'audio/skill/twchaofeng1.mp3', + 'audio/skill/twchaofeng2.mp3', + 'audio/skill/twchuanshu1.mp3', + 'audio/skill/twchuanshu2.mp3', + 'audio/skill/twdingzhen1.mp3', + 'audio/skill/twdingzhen2.mp3', + 'audio/skill/twfenwu1.mp3', + 'audio/skill/twfenwu2.mp3', + 'audio/skill/twfujian1.mp3', + 'audio/skill/twfujian2.mp3', + 'audio/skill/twfupan1.mp3', + 'audio/skill/twfupan2.mp3', + 'audio/skill/twfupan3.mp3', + 'audio/skill/twgongge1.mp3', + 'audio/skill/twgongge2.mp3', + 'audio/skill/twgongge3.mp3', + 'audio/skill/twjiange1.mp3', + 'audio/skill/twjiange2.mp3', + 'audio/skill/twjianming1.mp3', + 'audio/skill/twjianming2.mp3', + 'audio/skill/twjianwei1.mp3', + 'audio/skill/twjianwei2.mp3', + 'audio/skill/twjiaohua1.mp3', + 'audio/skill/twjiaohua2.mp3', + 'audio/skill/twjichou1.mp3', + 'audio/skill/twjichou2.mp3', + 'audio/skill/twjiekuang1.mp3', + 'audio/skill/twjiekuang2.mp3', + 'audio/skill/twjijiang1.mp3', + 'audio/skill/twjijiang2.mp3', + 'audio/skill/twjizhu2.mp3', + 'audio/skill/twjizhu3.mp3', + 'audio/skill/twjuchen1.mp3', + 'audio/skill/twjuchen2.mp3', + 'audio/skill/twjuntun1.mp3', + 'audio/skill/twjuntun2.mp3', + 'audio/skill/twkujian1.mp3', + 'audio/skill/twkujian2.mp3', + 'audio/skill/twkujian3.mp3', + 'audio/skill/twkunsi1.mp3', + 'audio/skill/twkunsi2.mp3', + 'audio/skill/twlanjiang.mp3', + 'audio/skill/twluanlve1.mp3', + 'audio/skill/twluanlve2.mp3', + 'audio/skill/twluannian1.mp3', + 'audio/skill/twluannian2.mp3', + 'audio/skill/twlvren1.mp3', + 'audio/skill/twlvren2.mp3', + 'audio/skill/twmutao1.mp3', + 'audio/skill/twmutao2.mp3', + 'audio/skill/twneirao1.mp3', + 'audio/skill/twneirao2.mp3', + 'audio/skill/twqingkou1.mp3', + 'audio/skill/twqingkou2.mp3', + 'audio/skill/twqingren1.mp3', + 'audio/skill/twqingren2.mp3', + 'audio/skill/twqingtao1.mp3', + 'audio/skill/twqingtao2.mp3', + 'audio/skill/twqiongji1.mp3', + 'audio/skill/twqiongji2.mp3', + 'audio/skill/twrende1.mp3', + 'audio/skill/twrende2.mp3', + 'audio/skill/twrende3.mp3', + 'audio/skill/twruilian1.mp3', + 'audio/skill/twruilian2.mp3', + 'audio/skill/twshigong1.mp3', + 'audio/skill/twshigong2.mp3', + 'audio/skill/twsuizheng1.mp3', + 'audio/skill/twsuizheng2.mp3', + 'audio/skill/twsuizheng3.mp3', + 'audio/skill/twtanfeng1.mp3', + 'audio/skill/twtanfeng2.mp3', + 'audio/skill/twtiaoxin1.mp3', + 'audio/skill/twtiaoxin2.mp3', + 'audio/skill/twtuidao1.mp3', + 'audio/skill/twtuidao2.mp3', + 'audio/skill/twxiafeng1.mp3', + 'audio/skill/twxiafeng2.mp3', + 'audio/skill/twxiawang1.mp3', + 'audio/skill/twxiawang2.mp3', + 'audio/skill/twxiawei1.mp3', + 'audio/skill/twxiawei2.mp3', + 'audio/skill/twxingzhui1.mp3', + 'audio/skill/twxingzhui2.mp3', + 'audio/skill/twxiongjun1.mp3', + 'audio/skill/twxiongjun2.mp3', + 'audio/skill/twxiongxi1.mp3', + 'audio/skill/twxiongxi2.mp3', + 'audio/skill/twxiongzheng1.mp3', + 'audio/skill/twxiongzheng2.mp3', + 'audio/skill/twyimou1.mp3', + 'audio/skill/twyimou2.mp3', + 'audio/skill/twyouye1.mp3', + 'audio/skill/twyouye2.mp3', + 'audio/skill/twyulong1.mp3', + 'audio/skill/twyulong2.mp3', + 'audio/skill/twzhangwu1.mp3', + 'audio/skill/twzhangwu2.mp3', + 'audio/skill/twzhenhu1.mp3', + 'audio/skill/twzhenhu2.mp3', + 'audio/skill/twzhiji1.mp3', + 'audio/skill/twzhiji2.mp3', + 'audio/skill/twzhuidu1.mp3', + 'audio/skill/twzhuidu2.mp3', + 'audio/skill/xinpingkou1.mp3', + 'audio/skill/xinpingkou2.mp3', + 'audio/skill/xinqingxi1.mp3', + 'audio/skill/xinqingxi2.mp3', + 'audio/skill/yijin1.mp3', + 'audio/skill/yijin2.mp3', + 'audio/skill/yijin3.mp3', + 'audio/skill/yizhao1.mp3', + 'audio/skill/yizhao2.mp3', + 'audio/skill/zhichi_re_chengong1.mp3', + 'audio/skill/zhichi_re_chengong2.mp3', + 'audio/skill/zhujian.mp3', + 'audio/skill/zhujian1.mp3', 'audio/skill/dcliuzhuan1.mp3', 'audio/skill/dcliuzhuan2.mp3', 'audio/skill/dcxiaoxi1.mp3', @@ -4789,6 +5200,7 @@ window.noname_asset_list=[ 'image/card/caomu.png', 'image/card/caoyao.png', 'image/card/changandajian_equip1.png', + 'image/card/charge.png', 'image/card/cheliji_feilunzhanyu.png', 'image/card/cheliji_sichengliangyu.png', 'image/card/cheliji_tiejixuanyu.png', @@ -4803,6 +5215,7 @@ window.noname_asset_list=[ 'image/card/chuqibuyi.png', 'image/card/cisha.png', 'image/card/cixiong.png', + 'image/card/cooperation_damage.png', 'image/card/dagongche.png', 'image/card/daihuofenglun.png', 'image/card/dawan.png', @@ -5222,6 +5635,70 @@ window.noname_asset_list=[ 'image/card/ziyangdan.png', 'image/card/zong.png', + 'image/character/dc_chenqun.jpg', + 'image/character/dc_sp_jiaxu.jpg', + 'image/character/dc_wangyun.jpg', + 'image/character/dc_zhouxuān.jpg', + 'image/character/liupi.jpg', + 'image/character/re_mazhong.jpg', + 'image/character/sb_zhangfei.jpg', + 'image/character/sb_zhaoyun.jpg', + 'image/character/tw_baoxin.jpg', + 'image/character/tw_bianfuren.jpg', + 'image/character/tw_bingyuan.jpg', + 'image/character/tw_caoxiu.jpg', + 'image/character/tw_chendong.jpg', + 'image/character/tw_chenzhen.jpg', + 'image/character/tw_daxiaoqiao.jpg', + 'image/character/tw_dengzhi.jpg', + 'image/character/tw_fanchou.jpg', + 'image/character/tw_feiyi.jpg', + 'image/character/tw_fengxí.jpg', + 'image/character/tw_furong.jpg', + 'image/character/tw_guanqiujian.jpg', + 'image/character/tw_guyong.jpg', + 'image/character/tw_handang.jpg', + 'image/character/tw_haomeng.jpg', + 'image/character/tw_huchuquan.jpg', + 'image/character/tw_jiangji.jpg', + 'image/character/tw_jiangqing.jpg', + 'image/character/tw_jianshuo.jpg', + 'image/character/tw_jiling.jpg', + 'image/character/tw_liufuren.jpg', + 'image/character/tw_liuzhang.jpg', + 'image/character/tw_liwei.jpg', + 'image/character/tw_madai.jpg', + 'image/character/tw_mateng.jpg', + 'image/character/tw_niufudongxie.jpg', + 'image/character/tw_niujin.jpg', + 'image/character/tw_qiaogong.jpg', + 'image/character/tw_qiaorui.jpg', + 'image/character/tw_re_fazheng.jpg', + 'image/character/tw_shen_lvmeng.jpg', + 'image/character/tw_sunyi.jpg', + 'image/character/tw_wangling.jpg', + 'image/character/tw_weixu.jpg', + 'image/character/tw_xiahouen.jpg', + 'image/character/tw_xiahoushang.jpg', + 'image/character/tw_xuezong.jpg', + 'image/character/tw_xujing.jpg', + 'image/character/tw_xunchen.jpg', + 'image/character/tw_yangyi.jpg', + 'image/character/tw_yanxiang.jpg', + 'image/character/tw_yl_luzhi.jpg', + 'image/character/tw_yufuluo.jpg', + 'image/character/tw_zhangfei.jpg', + 'image/character/tw_zhangji.jpg', + 'image/character/tw_zhangnan.jpg', + 'image/character/tw_zhangning.jpg', + 'image/character/tw_zhouchu.jpg', + 'image/character/tw_zhugeguo.jpg', + 'image/character/tw_zongyu.jpg', + 'image/character/xia_liyàn.jpg', + 'image/character/xia_tongyuan.jpg', + 'image/character/xia_wangyue.jpg', + 'image/character/xia_xushu.jpg', + 'image/character/xuelingyun.jpg', 'image/character/ahuinan.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index b22efe121..f0072f8cb 100644 --- a/game/game.js +++ b/game/game.js @@ -6682,8 +6682,11 @@ '
  • 护甲:和体力类似,每点护甲可抵挡一点伤害,但不影响手牌上限。'+ '
  • 随从:通过技能获得,拥有独立的技能、手牌区和装备区(共享判定区),出场时替代主武将的位置;随从死亡时自动切换回主武将。'+ '
  • 发现:从三张随机亮出的牌中选择一张,若无特殊说明,则获得此牌。'+ - '
  • 蓄力技:发动时可以增大黄色的数字。若如此做,红色数字于技能的结算过程中改为原来的两倍。'+ - '
  • 施法:若技能的拥有者未拥有等待执行的同名“施法”效果,则其可以发动“施法”技能。其须选择声明一个数字X(X∈[1, 3]),在此之后的第X个回合结束时,其执行“施法”效果,且效果中的数字X视为与技能发动者声明的X相同。' + '
  • 蓄能技:发动时可以增大黄色的数字。若如此做,红色数字于技能的结算过程中改为原来的两倍。'+ + '
  • 施法:若技能的拥有者未拥有等待执行的同名“施法”效果,则其可以发动“施法”技能。其须选择声明一个数字X(X∈[1, 3]),在此之后的第X个回合结束时,其执行“施法”效果,且效果中的数字X视为与技能发动者声明的X相同。'+ + '
  • 共同拼点:一种特殊的拼点结算。发起者与被指定的拼点目标同时亮出拼点牌,进行一次决算:其中拼点牌点数唯一最大的角色赢,其他角色均没赢;若没有点数唯一最大的拼点牌,则所有角色拼点均没赢。'+ + '
  • 强令:若一名角色拥有带有“强令”的技能,则该技能的发动时机为“出牌阶段开始时”。若技能拥有者发动该技能,其须发布“强令”给一名其他角色,并在对应技能的时间节点加以判断目标角色是否成功完成该强令所要求的任务条件。成功或失败则会根据技能效果执行不同结算流程。'+ + '
  • 摧坚:若一名角色拥有带有“摧坚”的技能,则该技能的发动时机为“当你使用伤害牌指定第一个目标后”。你可以对其中一个目标发动“摧坚”技能,然后执行后续效果。其中,后续效果里的X等于该目标的非charlotte技能的数量。' }, setIntro:function(node,func,left){ if(lib.config.touchscreen){ @@ -10392,12 +10395,35 @@ db_def:'策略', db_def1:'奇袭粮道', db_def2:'开城诱敌', + cooperation_damage:'同仇', + cooperation_damage_info:'双方累计造成至少4点伤害', + cooperation_draw:'并进', + cooperation_draw_info:'双方累计摸至少8张牌', + cooperation_discard:'疏财', + cooperation_discard_info:'双方累计弃置至少4种花色的牌', + cooperation_use:'戮力', + cooperation_use_info:'双方累计使用至少4种花色的牌', + charge:'蓄力值', }, element:{ content:{ emptyEvent:function(){ event.trigger(event.name); }, + chooseCooperationFor:function(){ + 'step 0' + var next=player.chooseButton([ + '选择和'+get.translation(target)+'的协力方式', + [event.cardlist,'vcard'], + ],true); + next.set('ai',event.ai||function(){ + return Math.random(); + }); + 'step 1' + if(result.bool){ + player.cooperationWith(target,result.links[0][2].slice(12),event.reason); + } + }, chooseToPlayBeatmap:function(){ 'step 0' if(game.online) return; @@ -13144,7 +13170,9 @@ for(var i=0;i(info.damage&&info.damage>3), + content:function(){ + var source=trigger.source; + var storage=player.getStorage('cooperation'); + for(var info of storage){ + if(info.type=='damage'&&(source==player||source==info.target)){ + if(!info.damage) info.damage=0; + info.damage+=trigger.num; + } + } + player.markSkill('cooperation_damage'); + }, + marktext:'仇', + intro:{ + name:'协力 - 同仇', + markcount:function(storage,player){ + return Math.max.apply(Math,player.getStorage('cooperation').map(function(info){ + return info.damage||0; + })); + }, + content:function(storage,player){ + var str='',storage=player.getStorage('cooperation'); + for(var info of storage){ + if(info.type=='damage'){ + str+='
  • 协力角色:'+get.translation(info.target); + str+='
  • 协力原因:'+get.translation(info.reason); + str+='
  • 协力进度:' + var num=(info.damage||0); + str+=num; + str+='/4'; + str+=(num>3?' (已完成)':' (未完成)'); + str+='
      '; + } + } + return str.slice(4,str.length-6); + }, + }, + }, + draw:{ + mark:true, + trigger:{global:'gainAfter'}, + forced:true, + charlotte:true, + popup:false, + firstDo:true, + filter:function(event,player){ + if(event.getParent().name!='draw') return false; + var storage=player.getStorage('cooperation'); + for(var info of storage){ + if(info.type=='draw'&&(event.player==player||event.player==info.target)) return true; + } + return false; + }, + checkx:(info)=>(info.draw&&info.draw>7), + content:function(){ + var source=trigger.player; + var storage=player.getStorage('cooperation'); + for(var info of storage){ + if(info.type=='draw'&&(source==player||source==info.target)){ + if(!info.draw) info.draw=0; + info.draw+=trigger.cards.length; + } + } + player.markSkill('cooperation_draw'); + }, + marktext:'进', + intro:{ + name:'协力 - 并进', + markcount:function(storage,player){ + return Math.max.apply(Math,player.getStorage('cooperation').map(function(info){ + return info.draw||0; + })); + }, + content:function(storage,player){ + var str='',storage=player.getStorage('cooperation'); + for(var info of storage){ + if(info.type=='draw'){ + str+='
  • 协力角色:'+get.translation(info.target); + str+='
  • 协力原因:'+get.translation(info.reason); + str+='
  • 协力进度:' + var num=(info.draw||0); + str+=num; + str+='/8'; + str+=(num>7?' (已完成)':' (未完成)'); + str+='
      '; + } + } + return str.slice(4,str.length-6); + }, + }, + }, + discard:{ + mark:true, + trigger:{global:'loseAfter'}, + forced:true, + charlotte:true, + popup:false, + firstDo:true, + filter:function(event,player){ + if(event.type!='discard') return false; + var storage=player.getStorage('cooperation'); + for(var info of storage){ + if(info.type=='discard'&&(event.player==player||event.player==info.target)) return true; + } + return false; + }, + checkx:(info)=>(info.discard&&info.discard.length>3), + content:function(){ + var source=trigger.player; + var storage=player.getStorage('cooperation'); + for(var info of storage){ + if(info.type=='discard'&&(source==player||source==info.target)){ + if(!info.discard) info.discard=[]; + for(var i of trigger.cards2){ + var suit=get.suit(i,player); + if(lib.suit.contains(suit)) info.discard.add(suit); + } + } + } + player.markSkill('cooperation_discard'); + }, + marktext:'财', + intro:{ + name:'协力 - 疏财', + markcount:function(storage,player){ + return Math.max.apply(Math,player.getStorage('cooperation').map(function(info){ + return info.discard?info.discard.length:0; + })); + }, + content:function(storage,player){ + var str='',storage=player.getStorage('cooperation'); + for(var info of storage){ + if(info.type=='discard'){ + str+='
  • 协力角色:'+get.translation(info.target); + str+='
  • 协力原因:'+get.translation(info.reason); + str+='
  • 进度:'; + var suits=info.discard||[]; + var suits2=[['spade','♠','♤'],['heart','♥','♡'],['club','♣','♧'],['diamond','♦','♢']]; + for(var i of suits2){ + str+=(suits.contains(i[0])?i[1]:i[2]); + } + str+=(suits.length>3?' (已完成)':' (未完成)'); + str+='
      '; + } + } + return str.slice(4,str.length-6); + }, + }, + }, + use:{ + mark:true, + trigger:{global:'useCard1'}, + forced:true, + charlotte:true, + popup:false, + firstDo:true, + filter:function(event,player){ + var suit=get.suit(event.card); + if(!lib.suit.contains(suit)) return false; + var storage=player.getStorage('cooperation'); + for(var info of storage){ + if(info.type=='use' + &&(event.player==player||event.player==info.target)&& + (!info.used||!info.used.contains(suit))) return true; + } + return false; + }, + checkx:(info)=>(info.used&&info.used.length>3), + content:function(){ + var source=trigger.player,suit=get.suit(trigger.card); + var storage=player.getStorage('cooperation'); + for(var info of storage){ + if(info.type=='use'&&(source==player||source==info.target)){ + if(!info.used) info.used=[]; + info.used.add(suit); + } + } + player.markSkill('cooperation_use'); + }, + marktext:'戮', + intro:{ + name:'协力 - 戮力', + markcount:function(storage,player){ + return Math.max.apply(Math,player.getStorage('cooperation').map(function(info){ + return info.used?info.used.length:0; + })); + }, + content:function(storage,player){ + var str='',storage=player.getStorage('cooperation'); + for(var info of storage){ + if(info.type=='use'){ + str+='
  • 协力角色:'+get.translation(info.target); + str+='
  • 协力原因:'+get.translation(info.reason); + str+='
  • 进度:'; + var suits=info.used||[]; + var suits2=[['spade','♠','♤'],['heart','♥','♡'],['club','♣','♧'],['diamond','♦','♢']]; + for(var i of suits2){ + str+=(suits.contains(i[0])?i[1]:i[2]); + } + str+=(suits.length>3?' (已完成)':' (未完成)'); + str+='
      '; + } + } + return str.slice(4,str.length-6); + }, + }, + }, + }, + }, zhengsu:{ trigger:{player:'phaseDiscardEnd'}, forced:true, @@ -48568,7 +48936,8 @@ if(ui.confirm){ ui.confirm.close(); } - ui.click.ok(); + var event=_status.event; + if(!event.filterOk||event.filterOk()) ui.click.ok(); ui.canvas.width=ui.arena.offsetWidth; ui.canvas.height=ui.arena.offsetHeight; } @@ -49012,7 +49381,8 @@ if(ui.confirm){ ui.confirm.close(); } - ui.click.ok(); + var event=_status.event; + if(!event.filterOk||event.filterOk()) ui.click.ok(); } else{ game.uncheck(); diff --git a/game/update.js b/game/update.js index ba24ef2cd..06d3e16f4 100644 --- a/game/update.js +++ b/game/update.js @@ -1,24 +1,24 @@ window.noname_update={ - version:'1.9.120', - update:'1.9.119', + version:'1.9.120.1', + update:'1.9.120', changeLog:[ - '整合@copcap 编写的48个武将', - '技能设计比赛入选稿:坂上智代', + '整合@萌新 (活动武将扩展)和@copcap 编写的61个武将', + '露娜Q技能调整', '其他技能调整和bug修复', - 'players://["ahuinan","chengbing","chenjiao","clan_xuncai","clan_xuncan","clan_xunchen","clan_xunshu","dc_hujinding","dc_yuejiu","dongguiren","gongsundu","key_tomoyo","leibo","liwan","liyixiejing","ol_furong","ol_liuba","panghui","re_caiyong","re_chengong","re_sundeng","re_xunyou","sb_caocao","sb_caoren","sb_ganning","sb_huanggai","sb_lvmeng","sb_machao","sb_sunquan","sb_sunshangxiang","sb_xiahoushi","sb_xuhuang","sb_zhangjiao","sb_zhenji","sb_zhouyu","shen_zhangjiao","shiyi","sp_caosong","sp_pengyang","sunlang","wangjun","wanglie","xin_caoxiu","xin_wuyi","xin_zhuzhi","yangfu","yuanji","zhangzhi","zhaozhi","zhujianping"]', + 'players://["dc_chenqun","dc_sp_jiaxu","dc_wangyun","dc_zhouxuān","liupi","re_mazhong","sb_zhangfei","sb_zhaoyun","tw_baoxin","tw_bianfuren","tw_bingyuan","tw_caoxiu","tw_chendong","tw_chenzhen","tw_daxiaoqiao","tw_dengzhi","tw_fanchou","tw_feiyi","tw_fengxí","tw_furong","tw_guanqiujian","tw_guyong","tw_handang","tw_haomeng","tw_huchuquan","tw_jiangji","tw_jiangqing","tw_jianshuo","tw_jiling","tw_liufuren","tw_liuzhang","tw_liwei","tw_madai","tw_mateng","tw_niufudongxie","tw_niujin","tw_qiaogong","tw_qiaorui","tw_re_fazheng","tw_shen_lvmeng","tw_sunyi","tw_wangling","tw_weixu","tw_xiahouen","tw_xiahoushang","tw_xuezong","tw_xujing","tw_xunchen","tw_yangyi","tw_yanxiang","tw_yl_luzhi","tw_yufuluo","tw_zhangfei","tw_zhangji","tw_zhangnan","tw_zhangning","tw_zhouchu","tw_zhugeguo","tw_zongyu","xia_liyàn","xia_tongyuan","xia_wangyue","xia_xushu","xuelingyun"]', ], files:[ - //'card/extra.js', + 'card/extra.js', //'card/gujian.js', - 'card/guozhan.js', + //'card/guozhan.js', //'card/gwent.js', //'card/huanlekapai.js', //'card/mtg.js', - 'card/sp.js', + //'card/sp.js', 'card/standard.js', //'card/swd.js', //'card/yunchou.js', - //'card/yingbian.js', + 'card/yingbian.js', //'card/yongjian.js', //'card/zhenfa.js', //'card/zhulu.js', @@ -32,7 +32,7 @@ window.noname_update={ 'character/mobile.js', //'character/mtg.js', 'character/offline.js', - //'character/old.js', + 'character/old.js', //'character/ow.js', 'character/rank.js', 'character/refresh.js', @@ -41,16 +41,16 @@ window.noname_update={ 'character/sp.js', 'character/sp2.js', //'character/standard.js', - //'character/tw.js', + 'character/tw.js', //'character/swd.js', //'character/xianjian.js', 'character/xinghuoliaoyuan.js', 'character/yijiang.js', - //'character/yingbian.js', + 'character/yingbian.js', //'character/yxs.js', //'extension/boss/extension.js', //'font/suits.ttf', - 'layout/default/layout.css', + //'layout/default/layout.css', //'layout/default/menu.css', //'layout/long2/layout.css', //'layout/mobile/equip.css', @@ -62,7 +62,7 @@ window.noname_update={ //'mode/chess.js', //'mode/connect.js', //'mode/doudizhu.js', - 'mode/guozhan.js', + //'mode/guozhan.js', //'mode/identity.js', //'mode/single.js', //'mode/stone.js', diff --git a/image/card/charge.png b/image/card/charge.png new file mode 100644 index 000000000..1e4e44f8b Binary files /dev/null and b/image/card/charge.png differ diff --git a/image/card/cooperation_damage.png b/image/card/cooperation_damage.png new file mode 100644 index 000000000..8686467b6 Binary files /dev/null and b/image/card/cooperation_damage.png differ diff --git a/image/character/dc_chenqun.jpg b/image/character/dc_chenqun.jpg new file mode 100644 index 000000000..41695b8ba Binary files /dev/null and b/image/character/dc_chenqun.jpg differ diff --git a/image/character/dc_sp_jiaxu.jpg b/image/character/dc_sp_jiaxu.jpg new file mode 100644 index 000000000..71ef71e86 Binary files /dev/null and b/image/character/dc_sp_jiaxu.jpg differ diff --git a/image/character/dc_wangyun.jpg b/image/character/dc_wangyun.jpg new file mode 100644 index 000000000..24492f878 Binary files /dev/null and b/image/character/dc_wangyun.jpg differ diff --git a/image/character/dc_zhouxuān.jpg b/image/character/dc_zhouxuān.jpg new file mode 100644 index 000000000..5bd47651c Binary files /dev/null and b/image/character/dc_zhouxuān.jpg differ diff --git a/image/character/liupi.jpg b/image/character/liupi.jpg new file mode 100644 index 000000000..2509a8835 Binary files /dev/null and b/image/character/liupi.jpg differ diff --git a/image/character/re_mazhong.jpg b/image/character/re_mazhong.jpg new file mode 100644 index 000000000..0986c0227 Binary files /dev/null and b/image/character/re_mazhong.jpg differ diff --git a/image/character/sb_zhangfei.jpg b/image/character/sb_zhangfei.jpg new file mode 100644 index 000000000..c48a78568 Binary files /dev/null and b/image/character/sb_zhangfei.jpg differ diff --git a/image/character/sb_zhaoyun.jpg b/image/character/sb_zhaoyun.jpg new file mode 100644 index 000000000..2cce9dc42 Binary files /dev/null and b/image/character/sb_zhaoyun.jpg differ diff --git a/image/character/tw_baoxin.jpg b/image/character/tw_baoxin.jpg new file mode 100644 index 000000000..a059c9792 Binary files /dev/null and b/image/character/tw_baoxin.jpg differ diff --git a/image/character/tw_bianfuren.jpg b/image/character/tw_bianfuren.jpg new file mode 100644 index 000000000..85fda91c8 Binary files /dev/null and b/image/character/tw_bianfuren.jpg differ diff --git a/image/character/tw_bingyuan.jpg b/image/character/tw_bingyuan.jpg new file mode 100644 index 000000000..71a658ccd Binary files /dev/null and b/image/character/tw_bingyuan.jpg differ diff --git a/image/character/tw_caoxiu.jpg b/image/character/tw_caoxiu.jpg new file mode 100644 index 000000000..123b5c69a Binary files /dev/null and b/image/character/tw_caoxiu.jpg differ diff --git a/image/character/tw_chendong.jpg b/image/character/tw_chendong.jpg new file mode 100644 index 000000000..d7aad397d Binary files /dev/null and b/image/character/tw_chendong.jpg differ diff --git a/image/character/tw_chenzhen.jpg b/image/character/tw_chenzhen.jpg new file mode 100644 index 000000000..4a3106161 Binary files /dev/null and b/image/character/tw_chenzhen.jpg differ diff --git a/image/character/tw_daxiaoqiao.jpg b/image/character/tw_daxiaoqiao.jpg new file mode 100644 index 000000000..84dfc55bc Binary files /dev/null and b/image/character/tw_daxiaoqiao.jpg differ diff --git a/image/character/tw_dengzhi.jpg b/image/character/tw_dengzhi.jpg new file mode 100644 index 000000000..f1db8941a Binary files /dev/null and b/image/character/tw_dengzhi.jpg differ diff --git a/image/character/tw_fanchou.jpg b/image/character/tw_fanchou.jpg new file mode 100644 index 000000000..513eb9e46 Binary files /dev/null and b/image/character/tw_fanchou.jpg differ diff --git a/image/character/tw_feiyi.jpg b/image/character/tw_feiyi.jpg new file mode 100644 index 000000000..fe2b5bc3e Binary files /dev/null and b/image/character/tw_feiyi.jpg differ diff --git a/image/character/tw_fengxí.jpg b/image/character/tw_fengxí.jpg new file mode 100644 index 000000000..2fba27810 Binary files /dev/null and b/image/character/tw_fengxí.jpg differ diff --git a/image/character/tw_furong.jpg b/image/character/tw_furong.jpg new file mode 100644 index 000000000..98a5c3c27 Binary files /dev/null and b/image/character/tw_furong.jpg differ diff --git a/image/character/tw_guanqiujian.jpg b/image/character/tw_guanqiujian.jpg new file mode 100644 index 000000000..29d8a07fe Binary files /dev/null and b/image/character/tw_guanqiujian.jpg differ diff --git a/image/character/tw_guyong.jpg b/image/character/tw_guyong.jpg new file mode 100644 index 000000000..8c9d1578a Binary files /dev/null and b/image/character/tw_guyong.jpg differ diff --git a/image/character/tw_handang.jpg b/image/character/tw_handang.jpg new file mode 100644 index 000000000..e7e33bb6f Binary files /dev/null and b/image/character/tw_handang.jpg differ diff --git a/image/character/tw_haomeng.jpg b/image/character/tw_haomeng.jpg new file mode 100644 index 000000000..a7851f567 Binary files /dev/null and b/image/character/tw_haomeng.jpg differ diff --git a/image/character/tw_huchuquan.jpg b/image/character/tw_huchuquan.jpg new file mode 100644 index 000000000..97ae45e05 Binary files /dev/null and b/image/character/tw_huchuquan.jpg differ diff --git a/image/character/tw_jiangji.jpg b/image/character/tw_jiangji.jpg new file mode 100644 index 000000000..b01760c0e Binary files /dev/null and b/image/character/tw_jiangji.jpg differ diff --git a/image/character/tw_jiangqing.jpg b/image/character/tw_jiangqing.jpg new file mode 100644 index 000000000..78b229f7e Binary files /dev/null and b/image/character/tw_jiangqing.jpg differ diff --git a/image/character/tw_jianshuo.jpg b/image/character/tw_jianshuo.jpg new file mode 100644 index 000000000..6e81140bb Binary files /dev/null and b/image/character/tw_jianshuo.jpg differ diff --git a/image/character/tw_jiling.jpg b/image/character/tw_jiling.jpg new file mode 100644 index 000000000..e6c2cd979 Binary files /dev/null and b/image/character/tw_jiling.jpg differ diff --git a/image/character/tw_liufuren.jpg b/image/character/tw_liufuren.jpg new file mode 100644 index 000000000..026735af6 Binary files /dev/null and b/image/character/tw_liufuren.jpg differ diff --git a/image/character/tw_liuzhang.jpg b/image/character/tw_liuzhang.jpg new file mode 100644 index 000000000..26a249122 Binary files /dev/null and b/image/character/tw_liuzhang.jpg differ diff --git a/image/character/tw_liwei.jpg b/image/character/tw_liwei.jpg new file mode 100644 index 000000000..3f63fa9e7 Binary files /dev/null and b/image/character/tw_liwei.jpg differ diff --git a/image/character/tw_madai.jpg b/image/character/tw_madai.jpg new file mode 100644 index 000000000..4ec8d724d Binary files /dev/null and b/image/character/tw_madai.jpg differ diff --git a/image/character/tw_mateng.jpg b/image/character/tw_mateng.jpg new file mode 100644 index 000000000..940024290 Binary files /dev/null and b/image/character/tw_mateng.jpg differ diff --git a/image/character/tw_niufudongxie.jpg b/image/character/tw_niufudongxie.jpg new file mode 100644 index 000000000..f2f07cdb3 Binary files /dev/null and b/image/character/tw_niufudongxie.jpg differ diff --git a/image/character/tw_niujin.jpg b/image/character/tw_niujin.jpg new file mode 100644 index 000000000..956610993 Binary files /dev/null and b/image/character/tw_niujin.jpg differ diff --git a/image/character/tw_qiaogong.jpg b/image/character/tw_qiaogong.jpg new file mode 100644 index 000000000..dab8850a2 Binary files /dev/null and b/image/character/tw_qiaogong.jpg differ diff --git a/image/character/tw_qiaorui.jpg b/image/character/tw_qiaorui.jpg new file mode 100644 index 000000000..59e130dfd Binary files /dev/null and b/image/character/tw_qiaorui.jpg differ diff --git a/image/character/tw_re_fazheng.jpg b/image/character/tw_re_fazheng.jpg new file mode 100644 index 000000000..38a331019 Binary files /dev/null and b/image/character/tw_re_fazheng.jpg differ diff --git a/image/character/tw_shen_lvmeng.jpg b/image/character/tw_shen_lvmeng.jpg new file mode 100644 index 000000000..1733983b5 Binary files /dev/null and b/image/character/tw_shen_lvmeng.jpg differ diff --git a/image/character/tw_sunyi.jpg b/image/character/tw_sunyi.jpg new file mode 100644 index 000000000..69d13fb0a Binary files /dev/null and b/image/character/tw_sunyi.jpg differ diff --git a/image/character/tw_wangling.jpg b/image/character/tw_wangling.jpg new file mode 100644 index 000000000..7aa790c7b Binary files /dev/null and b/image/character/tw_wangling.jpg differ diff --git a/image/character/tw_weixu.jpg b/image/character/tw_weixu.jpg new file mode 100644 index 000000000..0fa88d6b8 Binary files /dev/null and b/image/character/tw_weixu.jpg differ diff --git a/image/character/tw_xiahouen.jpg b/image/character/tw_xiahouen.jpg new file mode 100644 index 000000000..d955d64fa Binary files /dev/null and b/image/character/tw_xiahouen.jpg differ diff --git a/image/character/tw_xiahoushang.jpg b/image/character/tw_xiahoushang.jpg new file mode 100644 index 000000000..b2665ebd4 Binary files /dev/null and b/image/character/tw_xiahoushang.jpg differ diff --git a/image/character/tw_xuezong.jpg b/image/character/tw_xuezong.jpg new file mode 100644 index 000000000..8a159c6d8 Binary files /dev/null and b/image/character/tw_xuezong.jpg differ diff --git a/image/character/tw_xujing.jpg b/image/character/tw_xujing.jpg new file mode 100644 index 000000000..534ac750e Binary files /dev/null and b/image/character/tw_xujing.jpg differ diff --git a/image/character/tw_xunchen.jpg b/image/character/tw_xunchen.jpg new file mode 100644 index 000000000..f05376cbe Binary files /dev/null and b/image/character/tw_xunchen.jpg differ diff --git a/image/character/tw_yangyi.jpg b/image/character/tw_yangyi.jpg new file mode 100644 index 000000000..e49ec6d61 Binary files /dev/null and b/image/character/tw_yangyi.jpg differ diff --git a/image/character/tw_yanxiang.jpg b/image/character/tw_yanxiang.jpg new file mode 100644 index 000000000..d3d966ca6 Binary files /dev/null and b/image/character/tw_yanxiang.jpg differ diff --git a/image/character/tw_yl_luzhi.jpg b/image/character/tw_yl_luzhi.jpg new file mode 100644 index 000000000..90307b2cd Binary files /dev/null and b/image/character/tw_yl_luzhi.jpg differ diff --git a/image/character/tw_yufuluo.jpg b/image/character/tw_yufuluo.jpg new file mode 100644 index 000000000..7f327ed8c Binary files /dev/null and b/image/character/tw_yufuluo.jpg differ diff --git a/image/character/tw_zhangfei.jpg b/image/character/tw_zhangfei.jpg new file mode 100644 index 000000000..95944f442 Binary files /dev/null and b/image/character/tw_zhangfei.jpg differ diff --git a/image/character/tw_zhangji.jpg b/image/character/tw_zhangji.jpg new file mode 100644 index 000000000..7019481b9 Binary files /dev/null and b/image/character/tw_zhangji.jpg differ diff --git a/image/character/tw_zhangnan.jpg b/image/character/tw_zhangnan.jpg new file mode 100644 index 000000000..10dc85246 Binary files /dev/null and b/image/character/tw_zhangnan.jpg differ diff --git a/image/character/tw_zhangning.jpg b/image/character/tw_zhangning.jpg new file mode 100644 index 000000000..afd433600 Binary files /dev/null and b/image/character/tw_zhangning.jpg differ diff --git a/image/character/tw_zhouchu.jpg b/image/character/tw_zhouchu.jpg new file mode 100644 index 000000000..cb94f011f Binary files /dev/null and b/image/character/tw_zhouchu.jpg differ diff --git a/image/character/tw_zhugeguo.jpg b/image/character/tw_zhugeguo.jpg new file mode 100644 index 000000000..935938a75 Binary files /dev/null and b/image/character/tw_zhugeguo.jpg differ diff --git a/image/character/tw_zongyu.jpg b/image/character/tw_zongyu.jpg new file mode 100644 index 000000000..2d49def55 Binary files /dev/null and b/image/character/tw_zongyu.jpg differ diff --git a/image/character/xia_liyàn.jpg b/image/character/xia_liyàn.jpg new file mode 100644 index 000000000..9863ba6be Binary files /dev/null and b/image/character/xia_liyàn.jpg differ diff --git a/image/character/xia_tongyuan.jpg b/image/character/xia_tongyuan.jpg new file mode 100644 index 000000000..99b402a82 Binary files /dev/null and b/image/character/xia_tongyuan.jpg differ diff --git a/image/character/xia_wangyue.jpg b/image/character/xia_wangyue.jpg new file mode 100644 index 000000000..38d34c1db Binary files /dev/null and b/image/character/xia_wangyue.jpg differ diff --git a/image/character/xia_xushu.jpg b/image/character/xia_xushu.jpg new file mode 100644 index 000000000..31aba9243 Binary files /dev/null and b/image/character/xia_xushu.jpg differ diff --git a/image/character/xuelingyun.jpg b/image/character/xuelingyun.jpg new file mode 100644 index 000000000..fee0802c0 Binary files /dev/null and b/image/character/xuelingyun.jpg differ