diff --git a/audio/die/caifuren.mp3 b/audio/die/caifuren.mp3 index 232a6f2f3..48a5b47c6 100644 Binary files a/audio/die/caifuren.mp3 and b/audio/die/caifuren.mp3 differ diff --git a/audio/die/caoren.mp3 b/audio/die/caoren.mp3 index 5f78976ca..80a76d733 100644 Binary files a/audio/die/caoren.mp3 and b/audio/die/caoren.mp3 differ diff --git a/audio/die/caoshuang.mp3 b/audio/die/caoshuang.mp3 index 9c03f2f44..2fea01af3 100644 Binary files a/audio/die/caoshuang.mp3 and b/audio/die/caoshuang.mp3 differ diff --git a/audio/die/dc_mengda.mp3 b/audio/die/dc_mengda.mp3 new file mode 100644 index 000000000..05fe0ff49 Binary files /dev/null and b/audio/die/dc_mengda.mp3 differ diff --git a/audio/die/duanqiaoxiao.mp3 b/audio/die/duanqiaoxiao.mp3 new file mode 100644 index 000000000..d646ee122 Binary files /dev/null and b/audio/die/duanqiaoxiao.mp3 differ diff --git a/audio/die/guanhai.mp3 b/audio/die/guanhai.mp3 new file mode 100644 index 000000000..745e0df43 Binary files /dev/null and b/audio/die/guanhai.mp3 differ diff --git a/audio/die/guohuanghou.mp3 b/audio/die/guohuanghou.mp3 index a5dcbb9f4..fbefba01b 100644 Binary files a/audio/die/guohuanghou.mp3 and b/audio/die/guohuanghou.mp3 differ diff --git a/audio/die/guānning.mp3 b/audio/die/guānning.mp3 new file mode 100644 index 000000000..b7426b435 Binary files /dev/null and b/audio/die/guānning.mp3 differ diff --git a/audio/die/gz_luxun.mp3 b/audio/die/gz_luxun.mp3 new file mode 100644 index 000000000..5a3ad3050 Binary files /dev/null and b/audio/die/gz_luxun.mp3 differ diff --git a/audio/die/liuqi.mp3 b/audio/die/liuqi.mp3 new file mode 100644 index 000000000..efaf837e9 Binary files /dev/null and b/audio/die/liuqi.mp3 differ diff --git a/audio/die/liuyu.mp3 b/audio/die/liuyu.mp3 index 79b1db29d..3c8bdfc7b 100644 Binary files a/audio/die/liuyu.mp3 and b/audio/die/liuyu.mp3 differ diff --git a/audio/die/longwang.mp3 b/audio/die/longwang.mp3 new file mode 100644 index 000000000..87ac739ce Binary files /dev/null and b/audio/die/longwang.mp3 differ diff --git a/audio/die/luoxian.mp3 b/audio/die/luoxian.mp3 new file mode 100644 index 000000000..9d9f172f6 Binary files /dev/null and b/audio/die/luoxian.mp3 differ diff --git a/audio/die/mushun.mp3 b/audio/die/mushun.mp3 new file mode 100644 index 000000000..d915cb063 Binary files /dev/null and b/audio/die/mushun.mp3 differ diff --git a/audio/die/new_caoren.mp3 b/audio/die/new_caoren.mp3 new file mode 100644 index 000000000..8b8ea164b Binary files /dev/null and b/audio/die/new_caoren.mp3 differ diff --git a/audio/die/ol_xuhuang.mp3 b/audio/die/ol_xuhuang.mp3 index 995a81343..527205a33 100644 Binary files a/audio/die/ol_xuhuang.mp3 and b/audio/die/ol_xuhuang.mp3 differ diff --git a/audio/die/ol_yanwen.mp3 b/audio/die/ol_yanwen.mp3 new file mode 100644 index 000000000..45a5141d6 Binary files /dev/null and b/audio/die/ol_yanwen.mp3 differ diff --git a/audio/die/old_zhuhuan.mp3 b/audio/die/old_zhuhuan.mp3 new file mode 100644 index 000000000..f159384fa Binary files /dev/null and b/audio/die/old_zhuhuan.mp3 differ diff --git a/audio/die/re_jsp_huangyueying.mp3 b/audio/die/re_jsp_huangyueying.mp3 new file mode 100644 index 000000000..3dbd0bc46 Binary files /dev/null and b/audio/die/re_jsp_huangyueying.mp3 differ diff --git a/audio/die/re_luxun.mp3 b/audio/die/re_luxun.mp3 index 313aae42a..d15df5582 100644 Binary files a/audio/die/re_luxun.mp3 and b/audio/die/re_luxun.mp3 differ diff --git a/audio/die/re_zhangsong.mp3 b/audio/die/re_zhangsong.mp3 new file mode 100644 index 000000000..d1f2fa9a8 Binary files /dev/null and b/audio/die/re_zhangsong.mp3 differ diff --git a/audio/die/re_zhuzhi.mp3 b/audio/die/re_zhuzhi.mp3 new file mode 100644 index 000000000..e89bf47d3 Binary files /dev/null and b/audio/die/re_zhuzhi.mp3 differ diff --git a/audio/die/re_zoushi.mp3 b/audio/die/re_zoushi.mp3 new file mode 100644 index 000000000..1563d05ee Binary files /dev/null and b/audio/die/re_zoushi.mp3 differ diff --git a/audio/die/sb_daqiao.mp3 b/audio/die/sb_daqiao.mp3 new file mode 100644 index 000000000..757ebd8b9 Binary files /dev/null and b/audio/die/sb_daqiao.mp3 differ diff --git a/audio/die/sb_liubiao.mp3 b/audio/die/sb_liubiao.mp3 new file mode 100644 index 000000000..282c5971f Binary files /dev/null and b/audio/die/sb_liubiao.mp3 differ diff --git a/audio/die/sb_sunce.mp3 b/audio/die/sb_sunce.mp3 new file mode 100644 index 000000000..1dc03538a Binary files /dev/null and b/audio/die/sb_sunce.mp3 differ diff --git a/audio/die/shamoke.mp3 b/audio/die/shamoke.mp3 new file mode 100644 index 000000000..3fbc315b1 Binary files /dev/null and b/audio/die/shamoke.mp3 differ diff --git a/audio/die/simalang.mp3 b/audio/die/simalang.mp3 new file mode 100644 index 000000000..2a84c02f6 Binary files /dev/null and b/audio/die/simalang.mp3 differ diff --git a/audio/die/sp_mifuren.mp3 b/audio/die/sp_mifuren.mp3 index dcb07384a..277defe6d 100644 Binary files a/audio/die/sp_mifuren.mp3 and b/audio/die/sp_mifuren.mp3 differ diff --git a/audio/die/sp_pangtong.mp3 b/audio/die/sp_pangtong.mp3 new file mode 100644 index 000000000..de6dc7389 Binary files /dev/null and b/audio/die/sp_pangtong.mp3 differ diff --git a/audio/die/sp_zhangliao.mp3 b/audio/die/sp_zhangliao.mp3 index d4e57b2f8..084416368 100644 Binary files a/audio/die/sp_zhangliao.mp3 and b/audio/die/sp_zhangliao.mp3 differ diff --git a/audio/die/sundeng.mp3 b/audio/die/sundeng.mp3 index 5172ca7c6..a36bd5cf8 100644 Binary files a/audio/die/sundeng.mp3 and b/audio/die/sundeng.mp3 differ diff --git a/audio/die/sunhong.mp3 b/audio/die/sunhong.mp3 new file mode 100644 index 000000000..cca16e8c9 Binary files /dev/null and b/audio/die/sunhong.mp3 differ diff --git a/audio/die/sunliang.mp3 b/audio/die/sunliang.mp3 new file mode 100644 index 000000000..ba782c94f Binary files /dev/null and b/audio/die/sunliang.mp3 differ diff --git a/audio/die/sunwukong.mp3 b/audio/die/sunwukong.mp3 new file mode 100644 index 000000000..81e838669 Binary files /dev/null and b/audio/die/sunwukong.mp3 differ diff --git a/audio/die/taoshen.mp3 b/audio/die/taoshen.mp3 new file mode 100644 index 000000000..fb7c911b0 Binary files /dev/null and b/audio/die/taoshen.mp3 differ diff --git a/audio/die/tw_chenzhen.mp3 b/audio/die/tw_chenzhen.mp3 new file mode 100644 index 000000000..7a78ffa42 Binary files /dev/null and b/audio/die/tw_chenzhen.mp3 differ diff --git a/audio/die/tw_fengxi.mp3 b/audio/die/tw_fengxí.mp3 similarity index 100% rename from audio/die/tw_fengxi.mp3 rename to audio/die/tw_fengxí.mp3 diff --git a/audio/die/tw_huojun.mp3 b/audio/die/tw_huojun.mp3 new file mode 100644 index 000000000..ba0cff3bc Binary files /dev/null and b/audio/die/tw_huojun.mp3 differ diff --git a/audio/die/tw_liyi.mp3 b/audio/die/tw_liwei.mp3 similarity index 100% rename from audio/die/tw_liyi.mp3 rename to audio/die/tw_liwei.mp3 diff --git a/audio/die/tw_yujin.mp3 b/audio/die/tw_yujin.mp3 new file mode 100644 index 000000000..aaa1ad4e4 Binary files /dev/null and b/audio/die/tw_yujin.mp3 differ diff --git a/audio/die/wangguan.mp3 b/audio/die/wangguan.mp3 new file mode 100644 index 000000000..a16e3c764 Binary files /dev/null and b/audio/die/wangguan.mp3 differ diff --git a/audio/die/xia_liyan.mp3 b/audio/die/xia_liyàn.mp3 similarity index 100% rename from audio/die/xia_liyan.mp3 rename to audio/die/xia_liyàn.mp3 diff --git a/audio/die/xianglang.mp3 b/audio/die/xianglang.mp3 new file mode 100644 index 000000000..62e666bc8 Binary files /dev/null and b/audio/die/xianglang.mp3 differ diff --git a/audio/die/xin_yuji.mp3 b/audio/die/xin_yuji.mp3 new file mode 100644 index 000000000..0c75d1315 Binary files /dev/null and b/audio/die/xin_yuji.mp3 differ diff --git a/audio/die/xinfu_yuji.mp3 b/audio/die/xinfu_yuji.mp3 new file mode 100644 index 000000000..4cc88e36f Binary files /dev/null and b/audio/die/xinfu_yuji.mp3 differ diff --git a/audio/die/xunchen.mp3 b/audio/die/xunchen.mp3 index 7acd6eca7..126b9c2a7 100644 Binary files a/audio/die/xunchen.mp3 and b/audio/die/xunchen.mp3 differ diff --git a/audio/die/yanghong.mp3 b/audio/die/yanghong.mp3 new file mode 100644 index 000000000..d9543d3ed Binary files /dev/null and b/audio/die/yanghong.mp3 differ diff --git a/audio/die/yanyan.mp3 b/audio/die/yanyan.mp3 new file mode 100644 index 000000000..27cf01f51 Binary files /dev/null and b/audio/die/yanyan.mp3 differ diff --git a/audio/die/yuji.mp3 b/audio/die/yuji.mp3 index e66db9b51..cb6856f1c 100644 Binary files a/audio/die/yuji.mp3 and b/audio/die/yuji.mp3 differ diff --git a/audio/die/zangba.mp3 b/audio/die/zangba.mp3 index 131b6bd32..cb7ae438a 100644 Binary files a/audio/die/zangba.mp3 and b/audio/die/zangba.mp3 differ diff --git a/audio/die/zhangjinyun.mp3 b/audio/die/zhangjinyun.mp3 new file mode 100644 index 000000000..ec0c872b9 Binary files /dev/null and b/audio/die/zhangjinyun.mp3 differ diff --git a/audio/die/zhangling.mp3 b/audio/die/zhangling.mp3 index 3e95750a2..dcc4e98a9 100644 Binary files a/audio/die/zhangling.mp3 and b/audio/die/zhangling.mp3 differ diff --git a/audio/die/zhangrang.mp3 b/audio/die/zhangrang.mp3 new file mode 100644 index 000000000..adf2cc2aa Binary files /dev/null and b/audio/die/zhangrang.mp3 differ diff --git a/audio/die/zhangshiping.mp3 b/audio/die/zhangshiping.mp3 new file mode 100644 index 000000000..2f6dfb311 Binary files /dev/null and b/audio/die/zhangshiping.mp3 differ diff --git a/audio/die/zhenghun.mp3 b/audio/die/zhenghun.mp3 new file mode 100644 index 000000000..f7a5990d0 Binary files /dev/null and b/audio/die/zhenghun.mp3 differ diff --git a/audio/die/zhoushan.mp3 b/audio/die/zhoushan.mp3 new file mode 100644 index 000000000..2061f7052 Binary files /dev/null and b/audio/die/zhoushan.mp3 differ diff --git a/audio/die/zhuhuan.mp3 b/audio/die/zhuhuan.mp3 index f159384fa..d6072c5ee 100644 Binary files a/audio/die/zhuhuan.mp3 and b/audio/die/zhuhuan.mp3 differ diff --git a/audio/skill/benghuai_ol_dongzhuo1.mp3 b/audio/skill/benghuai_ol_dongzhuo1.mp3 index 5d8515dec..b0e825099 100644 Binary files a/audio/skill/benghuai_ol_dongzhuo1.mp3 and b/audio/skill/benghuai_ol_dongzhuo1.mp3 differ diff --git a/audio/skill/benghuai_ol_dongzhuo2.mp3 b/audio/skill/benghuai_ol_dongzhuo2.mp3 index 0ff655259..903cc9498 100644 Binary files a/audio/skill/benghuai_ol_dongzhuo2.mp3 and b/audio/skill/benghuai_ol_dongzhuo2.mp3 differ diff --git a/audio/skill/clanxumin_clan_hanhong1.mp3 b/audio/skill/clanxumin_clan_hanrong1.mp3 similarity index 100% rename from audio/skill/clanxumin_clan_hanhong1.mp3 rename to audio/skill/clanxumin_clan_hanrong1.mp3 diff --git a/audio/skill/danxin1.mp3 b/audio/skill/danxin1.mp3 index 9d72dd1a5..041667059 100644 Binary files a/audio/skill/danxin1.mp3 and b/audio/skill/danxin1.mp3 differ diff --git a/audio/skill/danxin2.mp3 b/audio/skill/danxin2.mp3 index 11817ebad..f69a7fe5c 100644 Binary files a/audio/skill/danxin2.mp3 and b/audio/skill/danxin2.mp3 differ diff --git a/audio/skill/dccaizhuang1.mp3 b/audio/skill/dccaizhuang1.mp3 new file mode 100644 index 000000000..750092518 Binary files /dev/null and b/audio/skill/dccaizhuang1.mp3 differ diff --git a/audio/skill/dccaizhuang2.mp3 b/audio/skill/dccaizhuang2.mp3 new file mode 100644 index 000000000..818b40268 Binary files /dev/null and b/audio/skill/dccaizhuang2.mp3 differ diff --git a/audio/skill/dccibei1.mp3 b/audio/skill/dccibei1.mp3 new file mode 100644 index 000000000..49aa3f145 Binary files /dev/null and b/audio/skill/dccibei1.mp3 differ diff --git a/audio/skill/dccibei2.mp3 b/audio/skill/dccibei2.mp3 new file mode 100644 index 000000000..16025132f Binary files /dev/null and b/audio/skill/dccibei2.mp3 differ diff --git a/audio/skill/dcdanying1.mp3 b/audio/skill/dcdanying1.mp3 new file mode 100644 index 000000000..2bbdf1d17 Binary files /dev/null and b/audio/skill/dcdanying1.mp3 differ diff --git a/audio/skill/dcdanying2.mp3 b/audio/skill/dcdanying2.mp3 new file mode 100644 index 000000000..2ce149f94 Binary files /dev/null and b/audio/skill/dcdanying2.mp3 differ diff --git a/audio/skill/dchuayi1.mp3 b/audio/skill/dchuayi1.mp3 new file mode 100644 index 000000000..868802657 Binary files /dev/null and b/audio/skill/dchuayi1.mp3 differ diff --git a/audio/skill/dchuayi2.mp3 b/audio/skill/dchuayi2.mp3 new file mode 100644 index 000000000..ade71792e Binary files /dev/null and b/audio/skill/dchuayi2.mp3 differ diff --git a/audio/skill/dchuizhi1.mp3 b/audio/skill/dchuizhi1.mp3 new file mode 100644 index 000000000..2612bf40f Binary files /dev/null and b/audio/skill/dchuizhi1.mp3 differ diff --git a/audio/skill/dchuizhi2.mp3 b/audio/skill/dchuizhi2.mp3 new file mode 100644 index 000000000..df323a233 Binary files /dev/null and b/audio/skill/dchuizhi2.mp3 differ diff --git a/audio/skill/dcjianji1.mp3 b/audio/skill/dcjianji1.mp3 new file mode 100644 index 000000000..4696623b1 Binary files /dev/null and b/audio/skill/dcjianji1.mp3 differ diff --git a/audio/skill/dcjianji2.mp3 b/audio/skill/dcjianji2.mp3 new file mode 100644 index 000000000..994185dae Binary files /dev/null and b/audio/skill/dcjianji2.mp3 differ diff --git a/audio/skill/dcjijiao1.mp3 b/audio/skill/dcjijiao1.mp3 new file mode 100644 index 000000000..93b004c23 Binary files /dev/null and b/audio/skill/dcjijiao1.mp3 differ diff --git a/audio/skill/dcjijiao2.mp3 b/audio/skill/dcjijiao2.mp3 new file mode 100644 index 000000000..028ad47e0 Binary files /dev/null and b/audio/skill/dcjijiao2.mp3 differ diff --git a/audio/skill/dcjinjian1.mp3 b/audio/skill/dcjinjian1.mp3 new file mode 100644 index 000000000..d18e89004 Binary files /dev/null and b/audio/skill/dcjinjian1.mp3 differ diff --git a/audio/skill/dcjinjian2.mp3 b/audio/skill/dcjinjian2.mp3 new file mode 100644 index 000000000..601e778fb Binary files /dev/null and b/audio/skill/dcjinjian2.mp3 differ diff --git a/audio/skill/dckanji1.mp3 b/audio/skill/dckanji1.mp3 new file mode 100644 index 000000000..27730d46a Binary files /dev/null and b/audio/skill/dckanji1.mp3 differ diff --git a/audio/skill/dckanji2.mp3 b/audio/skill/dckanji2.mp3 new file mode 100644 index 000000000..dd496029f Binary files /dev/null and b/audio/skill/dckanji2.mp3 differ diff --git a/audio/skill/dclibang1.mp3 b/audio/skill/dclibang1.mp3 new file mode 100644 index 000000000..cc985b751 Binary files /dev/null and b/audio/skill/dclibang1.mp3 differ diff --git a/audio/skill/dclibang2.mp3 b/audio/skill/dclibang2.mp3 new file mode 100644 index 000000000..6029e7eb4 Binary files /dev/null and b/audio/skill/dclibang2.mp3 differ diff --git a/audio/skill/dclonggong1.mp3 b/audio/skill/dclonggong1.mp3 new file mode 100644 index 000000000..8a2b5b333 Binary files /dev/null and b/audio/skill/dclonggong1.mp3 differ diff --git a/audio/skill/dclonggong2.mp3 b/audio/skill/dclonggong2.mp3 new file mode 100644 index 000000000..be493b58b Binary files /dev/null and b/audio/skill/dclonggong2.mp3 differ diff --git a/audio/skill/dclongsong1.mp3 b/audio/skill/dclongsong1.mp3 new file mode 100644 index 000000000..6961d4688 Binary files /dev/null and b/audio/skill/dclongsong1.mp3 differ diff --git a/audio/skill/dclongsong2.mp3 b/audio/skill/dclongsong2.mp3 new file mode 100644 index 000000000..14c77769c Binary files /dev/null and b/audio/skill/dclongsong2.mp3 differ diff --git a/audio/skill/dcmiyun1.mp3 b/audio/skill/dcmiyun1.mp3 new file mode 100644 index 000000000..1c8f2faef Binary files /dev/null and b/audio/skill/dcmiyun1.mp3 differ diff --git a/audio/skill/dcmiyun2.mp3 b/audio/skill/dcmiyun2.mp3 new file mode 100644 index 000000000..d5dc6de47 Binary files /dev/null and b/audio/skill/dcmiyun2.mp3 differ diff --git a/audio/skill/dcnuchen1.mp3 b/audio/skill/dcnuchen1.mp3 new file mode 100644 index 000000000..6b3ec4f0c Binary files /dev/null and b/audio/skill/dcnuchen1.mp3 differ diff --git a/audio/skill/dcnuchen2.mp3 b/audio/skill/dcnuchen2.mp3 new file mode 100644 index 000000000..01be98678 Binary files /dev/null and b/audio/skill/dcnuchen2.mp3 differ diff --git a/audio/skill/dcnutao1.mp3 b/audio/skill/dcnutao1.mp3 new file mode 100644 index 000000000..8e2213304 Binary files /dev/null and b/audio/skill/dcnutao1.mp3 differ diff --git a/audio/skill/dcnutao2.mp3 b/audio/skill/dcnutao2.mp3 new file mode 100644 index 000000000..9db283b9f Binary files /dev/null and b/audio/skill/dcnutao2.mp3 differ diff --git a/audio/skill/dcnutao3.mp3 b/audio/skill/dcnutao3.mp3 new file mode 100644 index 000000000..c3e153e5b Binary files /dev/null and b/audio/skill/dcnutao3.mp3 differ diff --git a/audio/skill/dcnutao4.mp3 b/audio/skill/dcnutao4.mp3 new file mode 100644 index 000000000..29ebdd2dc Binary files /dev/null and b/audio/skill/dcnutao4.mp3 differ diff --git a/audio/skill/dcpitian1.mp3 b/audio/skill/dcpitian1.mp3 new file mode 100644 index 000000000..4cd1970e9 Binary files /dev/null and b/audio/skill/dcpitian1.mp3 differ diff --git a/audio/skill/dcpitian2.mp3 b/audio/skill/dcpitian2.mp3 new file mode 100644 index 000000000..fc9436e04 Binary files /dev/null and b/audio/skill/dcpitian2.mp3 differ diff --git a/audio/skill/dcqiangzhi1.mp3 b/audio/skill/dcqiangzhi1.mp3 new file mode 100644 index 000000000..34e0ab782 Binary files /dev/null and b/audio/skill/dcqiangzhi1.mp3 differ diff --git a/audio/skill/dcqiangzhi2.mp3 b/audio/skill/dcqiangzhi2.mp3 new file mode 100644 index 000000000..0d9e6c704 Binary files /dev/null and b/audio/skill/dcqiangzhi2.mp3 differ diff --git a/audio/skill/dcqianzheng1.mp3 b/audio/skill/dcqianzheng1.mp3 new file mode 100644 index 000000000..fcd304e6e Binary files /dev/null and b/audio/skill/dcqianzheng1.mp3 differ diff --git a/audio/skill/dcqianzheng2.mp3 b/audio/skill/dcqianzheng2.mp3 new file mode 100644 index 000000000..867e9d1b0 Binary files /dev/null and b/audio/skill/dcqianzheng2.mp3 differ diff --git a/audio/skill/dcruyi1.mp3 b/audio/skill/dcruyi1.mp3 new file mode 100644 index 000000000..298d0a76c Binary files /dev/null and b/audio/skill/dcruyi1.mp3 differ diff --git a/audio/skill/dcruyi2.mp3 b/audio/skill/dcruyi2.mp3 new file mode 100644 index 000000000..3c87cc75e Binary files /dev/null and b/audio/skill/dcruyi2.mp3 differ diff --git a/audio/skill/dcshizhao1.mp3 b/audio/skill/dcshizhao1.mp3 new file mode 100644 index 000000000..ca209cbba Binary files /dev/null and b/audio/skill/dcshizhao1.mp3 differ diff --git a/audio/skill/dcshizhao2.mp3 b/audio/skill/dcshizhao2.mp3 new file mode 100644 index 000000000..354bb436f Binary files /dev/null and b/audio/skill/dcshizhao2.mp3 differ diff --git a/audio/skill/dcsitian1.mp3 b/audio/skill/dcsitian1.mp3 new file mode 100644 index 000000000..6eb17f000 Binary files /dev/null and b/audio/skill/dcsitian1.mp3 differ diff --git a/audio/skill/dcsitian2.mp3 b/audio/skill/dcsitian2.mp3 new file mode 100644 index 000000000..a6092d643 Binary files /dev/null and b/audio/skill/dcsitian2.mp3 differ diff --git a/audio/skill/dcwujie1.mp3 b/audio/skill/dcwujie1.mp3 new file mode 100644 index 000000000..c0cdf9b50 Binary files /dev/null and b/audio/skill/dcwujie1.mp3 differ diff --git a/audio/skill/dcwujie2.mp3 b/audio/skill/dcwujie2.mp3 new file mode 100644 index 000000000..0161b6063 Binary files /dev/null and b/audio/skill/dcwujie2.mp3 differ diff --git a/audio/skill/dcxiuwen1.mp3 b/audio/skill/dcxiuwen1.mp3 new file mode 100644 index 000000000..7da91f0f9 Binary files /dev/null and b/audio/skill/dcxiuwen1.mp3 differ diff --git a/audio/skill/dcxiuwen2.mp3 b/audio/skill/dcxiuwen2.mp3 new file mode 100644 index 000000000..51b7056d5 Binary files /dev/null and b/audio/skill/dcxiuwen2.mp3 differ diff --git a/audio/skill/dcyicong1.mp3 b/audio/skill/dcyicong1.mp3 new file mode 100644 index 000000000..19a73d548 Binary files /dev/null and b/audio/skill/dcyicong1.mp3 differ diff --git a/audio/skill/dcyicong2.mp3 b/audio/skill/dcyicong2.mp3 new file mode 100644 index 000000000..374f62bfe Binary files /dev/null and b/audio/skill/dcyicong2.mp3 differ diff --git a/audio/skill/dcyuanmo1.mp3 b/audio/skill/dcyuanmo1.mp3 new file mode 100644 index 000000000..a68ed0f61 Binary files /dev/null and b/audio/skill/dcyuanmo1.mp3 differ diff --git a/audio/skill/dcyuanmo2.mp3 b/audio/skill/dcyuanmo2.mp3 new file mode 100644 index 000000000..d2753848e Binary files /dev/null and b/audio/skill/dcyuanmo2.mp3 differ diff --git a/audio/skill/dengzhi.mp3 b/audio/skill/dengzhi.mp3 new file mode 100644 index 000000000..4ba4f165e Binary files /dev/null and b/audio/skill/dengzhi.mp3 differ diff --git a/audio/skill/diaoling1.mp3 b/audio/skill/diaoling1.mp3 index 56dbf5038..b18ccb60c 100644 Binary files a/audio/skill/diaoling1.mp3 and b/audio/skill/diaoling1.mp3 differ diff --git a/audio/skill/diaoling2.mp3 b/audio/skill/diaoling2.mp3 index 105f56138..27db9f77e 100644 Binary files a/audio/skill/diaoling2.mp3 and b/audio/skill/diaoling2.mp3 differ diff --git a/audio/skill/fenglve1.mp3 b/audio/skill/fenglve1.mp3 index 92d7fe3cd..9786a4f1b 100644 Binary files a/audio/skill/fenglve1.mp3 and b/audio/skill/fenglve1.mp3 differ diff --git a/audio/skill/fenglve2.mp3 b/audio/skill/fenglve2.mp3 index a6075d820..05f5ad18b 100644 Binary files a/audio/skill/fenglve2.mp3 and b/audio/skill/fenglve2.mp3 differ diff --git a/audio/skill/fenrui1.mp3 b/audio/skill/fenrui1.mp3 new file mode 100644 index 000000000..5c8bd4896 Binary files /dev/null and b/audio/skill/fenrui1.mp3 differ diff --git a/audio/skill/fenrui2.mp3 b/audio/skill/fenrui2.mp3 new file mode 100644 index 000000000..ed7187167 Binary files /dev/null and b/audio/skill/fenrui2.mp3 differ diff --git a/audio/skill/gangzhi1.mp3 b/audio/skill/gangzhi1.mp3 index 064f71bf2..d68b8f3e5 100644 Binary files a/audio/skill/gangzhi1.mp3 and b/audio/skill/gangzhi1.mp3 differ diff --git a/audio/skill/gangzhi2.mp3 b/audio/skill/gangzhi2.mp3 index c6de2f8cd..7b2a78fd5 100644 Binary files a/audio/skill/gangzhi2.mp3 and b/audio/skill/gangzhi2.mp3 differ diff --git a/audio/skill/hengjiang1.mp3 b/audio/skill/hengjiang1.mp3 index 787595877..1987df47d 100644 Binary files a/audio/skill/hengjiang1.mp3 and b/audio/skill/hengjiang1.mp3 differ diff --git a/audio/skill/hengjiang2.mp3 b/audio/skill/hengjiang2.mp3 index 1f4608db3..ae334a12c 100644 Binary files a/audio/skill/hengjiang2.mp3 and b/audio/skill/hengjiang2.mp3 differ diff --git a/audio/skill/jianliang1.mp3 b/audio/skill/jianliang1.mp3 new file mode 100644 index 000000000..94a177086 Binary files /dev/null and b/audio/skill/jianliang1.mp3 differ diff --git a/audio/skill/jianliang2.mp3 b/audio/skill/jianliang2.mp3 new file mode 100644 index 000000000..db6727cb4 Binary files /dev/null and b/audio/skill/jianliang2.mp3 differ diff --git a/audio/skill/jiaozhao1.mp3 b/audio/skill/jiaozhao1.mp3 index 35f28583c..e5e7a0354 100644 Binary files a/audio/skill/jiaozhao1.mp3 and b/audio/skill/jiaozhao1.mp3 differ diff --git a/audio/skill/jiaozhao2.mp3 b/audio/skill/jiaozhao2.mp3 index 3d8b6ded3..a1baec664 100644 Binary files a/audio/skill/jiaozhao2.mp3 and b/audio/skill/jiaozhao2.mp3 differ diff --git a/audio/skill/jushou1.mp3 b/audio/skill/jushou1.mp3 new file mode 100644 index 000000000..39b03ff0f Binary files /dev/null and b/audio/skill/jushou1.mp3 differ diff --git a/audio/skill/jushou2.mp3 b/audio/skill/jushou2.mp3 new file mode 100644 index 000000000..cc878a15e Binary files /dev/null and b/audio/skill/jushou2.mp3 differ diff --git a/audio/skill/kuangbi1.mp3 b/audio/skill/kuangbi1.mp3 index 336a40e91..962c05a17 100644 Binary files a/audio/skill/kuangbi1.mp3 and b/audio/skill/kuangbi1.mp3 differ diff --git a/audio/skill/kuangbi2.mp3 b/audio/skill/kuangbi2.mp3 index 3b17e884a..1b1da71ca 100644 Binary files a/audio/skill/kuangbi2.mp3 and b/audio/skill/kuangbi2.mp3 differ diff --git a/audio/skill/mouzhi1.mp3 b/audio/skill/mouzhi1.mp3 index ba22d98bf..cec976445 100644 Binary files a/audio/skill/mouzhi1.mp3 and b/audio/skill/mouzhi1.mp3 differ diff --git a/audio/skill/mouzhi2.mp3 b/audio/skill/mouzhi2.mp3 index 352ee0459..52deeb89e 100644 Binary files a/audio/skill/mouzhi2.mp3 and b/audio/skill/mouzhi2.mp3 differ diff --git a/audio/skill/mubing1.mp3 b/audio/skill/mubing1.mp3 index be4987a44..cefc9da80 100644 Binary files a/audio/skill/mubing1.mp3 and b/audio/skill/mubing1.mp3 differ diff --git a/audio/skill/mubing2.mp3 b/audio/skill/mubing2.mp3 index 999ea486d..fd0a37257 100644 Binary files a/audio/skill/mubing2.mp3 and b/audio/skill/mubing2.mp3 differ diff --git a/audio/skill/new_reqingnang1.mp3 b/audio/skill/new_reqingnang1.mp3 new file mode 100644 index 000000000..c7e863ef4 Binary files /dev/null and b/audio/skill/new_reqingnang1.mp3 differ diff --git a/audio/skill/new_reqingnang2.mp3 b/audio/skill/new_reqingnang2.mp3 new file mode 100644 index 000000000..c764dc8f4 Binary files /dev/null and b/audio/skill/new_reqingnang2.mp3 differ diff --git a/audio/skill/olbaonue1.mp3 b/audio/skill/olbaonue1.mp3 index 382a4434b..89c125497 100644 Binary files a/audio/skill/olbaonue1.mp3 and b/audio/skill/olbaonue1.mp3 differ diff --git a/audio/skill/olbaonue2.mp3 b/audio/skill/olbaonue2.mp3 index 6fc0fdc81..6bf28c2e3 100644 Binary files a/audio/skill/olbaonue2.mp3 and b/audio/skill/olbaonue2.mp3 differ diff --git a/audio/skill/old_guhuo1.mp3 b/audio/skill/old_guhuo1.mp3 new file mode 100644 index 000000000..1e64829b0 Binary files /dev/null and b/audio/skill/old_guhuo1.mp3 differ diff --git a/audio/skill/old_guhuo2.mp3 b/audio/skill/old_guhuo2.mp3 new file mode 100644 index 000000000..95324534e Binary files /dev/null and b/audio/skill/old_guhuo2.mp3 differ diff --git a/audio/skill/oldaili1.mp3 b/audio/skill/oldaili1.mp3 new file mode 100644 index 000000000..fa4c36085 Binary files /dev/null and b/audio/skill/oldaili1.mp3 differ diff --git a/audio/skill/oldaili2.mp3 b/audio/skill/oldaili2.mp3 new file mode 100644 index 000000000..2172d3f4d Binary files /dev/null and b/audio/skill/oldaili2.mp3 differ diff --git a/audio/skill/olduanliang1.mp3 b/audio/skill/olduanliang1.mp3 index bec8316a5..848f06ed4 100644 Binary files a/audio/skill/olduanliang1.mp3 and b/audio/skill/olduanliang1.mp3 differ diff --git a/audio/skill/olduanliang2.mp3 b/audio/skill/olduanliang2.mp3 index 098d95acb..b2cb4f14f 100644 Binary files a/audio/skill/olduanliang2.mp3 and b/audio/skill/olduanliang2.mp3 differ diff --git a/audio/skill/olhongji1.mp3 b/audio/skill/olhongji1.mp3 new file mode 100644 index 000000000..e2ac76ccc Binary files /dev/null and b/audio/skill/olhongji1.mp3 differ diff --git a/audio/skill/olhongji2.mp3 b/audio/skill/olhongji2.mp3 new file mode 100644 index 000000000..d82cbe168 Binary files /dev/null and b/audio/skill/olhongji2.mp3 differ diff --git a/audio/skill/oljiezi1.mp3 b/audio/skill/oljiezi1.mp3 index 248a0b2d2..26c3c9392 100644 Binary files a/audio/skill/oljiezi1.mp3 and b/audio/skill/oljiezi1.mp3 differ diff --git a/audio/skill/oljiezi2.mp3 b/audio/skill/oljiezi2.mp3 index 2ff5bdb03..1545230d3 100644 Binary files a/audio/skill/oljiezi2.mp3 and b/audio/skill/oljiezi2.mp3 differ diff --git a/audio/skill/oljiuchi1.mp3 b/audio/skill/oljiuchi1.mp3 index db676fd62..9ada40280 100644 Binary files a/audio/skill/oljiuchi1.mp3 and b/audio/skill/oljiuchi1.mp3 differ diff --git a/audio/skill/oljiuchi2.mp3 b/audio/skill/oljiuchi2.mp3 index 875311c74..1b68a0cb5 100644 Binary files a/audio/skill/oljiuchi2.mp3 and b/audio/skill/oljiuchi2.mp3 differ diff --git a/audio/skill/olmiuyan1.mp3 b/audio/skill/olmiuyan1.mp3 new file mode 100644 index 000000000..711ea573e Binary files /dev/null and b/audio/skill/olmiuyan1.mp3 differ diff --git a/audio/skill/olmiuyan2.mp3 b/audio/skill/olmiuyan2.mp3 new file mode 100644 index 000000000..1bbc12e08 Binary files /dev/null and b/audio/skill/olmiuyan2.mp3 differ diff --git a/audio/skill/olshilu1.mp3 b/audio/skill/olshilu1.mp3 new file mode 100644 index 000000000..7c9480e13 Binary files /dev/null and b/audio/skill/olshilu1.mp3 differ diff --git a/audio/skill/olshilu2.mp3 b/audio/skill/olshilu2.mp3 new file mode 100644 index 000000000..72befac5e Binary files /dev/null and b/audio/skill/olshilu2.mp3 differ diff --git a/audio/skill/olshuangxiong1.mp3 b/audio/skill/olshuangxiong1.mp3 new file mode 100644 index 000000000..d6f0e32a6 Binary files /dev/null and b/audio/skill/olshuangxiong1.mp3 differ diff --git a/audio/skill/olshuangxiong2.mp3 b/audio/skill/olshuangxiong2.mp3 new file mode 100644 index 000000000..e94797281 Binary files /dev/null and b/audio/skill/olshuangxiong2.mp3 differ diff --git a/audio/skill/olxianbi1.mp3 b/audio/skill/olxianbi1.mp3 new file mode 100644 index 000000000..7a0f6ee94 Binary files /dev/null and b/audio/skill/olxianbi1.mp3 differ diff --git a/audio/skill/olxianbi2.mp3 b/audio/skill/olxianbi2.mp3 new file mode 100644 index 000000000..0b88f1708 Binary files /dev/null and b/audio/skill/olxianbi2.mp3 differ diff --git a/audio/skill/olxinggu1.mp3 b/audio/skill/olxinggu1.mp3 new file mode 100644 index 000000000..f6f2543b9 Binary files /dev/null and b/audio/skill/olxinggu1.mp3 differ diff --git a/audio/skill/olxinggu2.mp3 b/audio/skill/olxinggu2.mp3 new file mode 100644 index 000000000..e759aa278 Binary files /dev/null and b/audio/skill/olxinggu2.mp3 differ diff --git a/audio/skill/olzenrun1.mp3 b/audio/skill/olzenrun1.mp3 new file mode 100644 index 000000000..c3c83c015 Binary files /dev/null and b/audio/skill/olzenrun1.mp3 differ diff --git a/audio/skill/olzenrun2.mp3 b/audio/skill/olzenrun2.mp3 new file mode 100644 index 000000000..27df1c1ac Binary files /dev/null and b/audio/skill/olzenrun2.mp3 differ diff --git a/audio/skill/qiangzhi_re_zhangsong1.mp3 b/audio/skill/qiangzhi_re_zhangsong1.mp3 new file mode 100644 index 000000000..c9b50778b Binary files /dev/null and b/audio/skill/qiangzhi_re_zhangsong1.mp3 differ diff --git a/audio/skill/qiangzhi_re_zhangsong2.mp3 b/audio/skill/qiangzhi_re_zhangsong2.mp3 new file mode 100644 index 000000000..37d267883 Binary files /dev/null and b/audio/skill/qiangzhi_re_zhangsong2.mp3 differ diff --git a/audio/skill/qieting1.mp3 b/audio/skill/qieting1.mp3 index 9b29606b0..65c313104 100644 Binary files a/audio/skill/qieting1.mp3 and b/audio/skill/qieting1.mp3 differ diff --git a/audio/skill/qieting2.mp3 b/audio/skill/qieting2.mp3 index 28b266f8d..f42b03307 100644 Binary files a/audio/skill/qieting2.mp3 and b/audio/skill/qieting2.mp3 differ diff --git a/audio/skill/qinbao1.mp3 b/audio/skill/qinbao1.mp3 new file mode 100644 index 000000000..742178864 Binary files /dev/null and b/audio/skill/qinbao1.mp3 differ diff --git a/audio/skill/qinbao2.mp3 b/audio/skill/qinbao2.mp3 new file mode 100644 index 000000000..1338fa18b Binary files /dev/null and b/audio/skill/qinbao2.mp3 differ diff --git a/audio/skill/qingyu3.mp3 b/audio/skill/qingyu3.mp3 new file mode 100644 index 000000000..02a685a19 Binary files /dev/null and b/audio/skill/qingyu3.mp3 differ diff --git a/audio/skill/qiongshou1.mp3 b/audio/skill/qiongshou1.mp3 new file mode 100644 index 000000000..f26132f93 Binary files /dev/null and b/audio/skill/qiongshou1.mp3 differ diff --git a/audio/skill/qiongshou2.mp3 b/audio/skill/qiongshou2.mp3 new file mode 100644 index 000000000..7c0722dd0 Binary files /dev/null and b/audio/skill/qiongshou2.mp3 differ diff --git a/audio/skill/reanguo1.mp3 b/audio/skill/reanguo1.mp3 new file mode 100644 index 000000000..53b3885fe Binary files /dev/null and b/audio/skill/reanguo1.mp3 differ diff --git a/audio/skill/reanguo2.mp3 b/audio/skill/reanguo2.mp3 new file mode 100644 index 000000000..1ba17168d Binary files /dev/null and b/audio/skill/reanguo2.mp3 differ diff --git a/audio/skill/rehuoshui1.mp3 b/audio/skill/rehuoshui1.mp3 new file mode 100644 index 000000000..92b4dd774 Binary files /dev/null and b/audio/skill/rehuoshui1.mp3 differ diff --git a/audio/skill/rehuoshui2.mp3 b/audio/skill/rehuoshui2.mp3 new file mode 100644 index 000000000..52dbb2580 Binary files /dev/null and b/audio/skill/rehuoshui2.mp3 differ diff --git a/audio/skill/rejiqiao1.mp3 b/audio/skill/rejiqiao1.mp3 new file mode 100644 index 000000000..1b09d9d74 Binary files /dev/null and b/audio/skill/rejiqiao1.mp3 differ diff --git a/audio/skill/rejiqiao2.mp3 b/audio/skill/rejiqiao2.mp3 new file mode 100644 index 000000000..cd3fc396d Binary files /dev/null and b/audio/skill/rejiqiao2.mp3 differ diff --git a/audio/skill/relinglong1.mp3 b/audio/skill/relinglong1.mp3 new file mode 100644 index 000000000..c03677525 Binary files /dev/null and b/audio/skill/relinglong1.mp3 differ diff --git a/audio/skill/relinglong2.mp3 b/audio/skill/relinglong2.mp3 new file mode 100644 index 000000000..08d47aade Binary files /dev/null and b/audio/skill/relinglong2.mp3 differ diff --git a/audio/skill/reqingcheng1.mp3 b/audio/skill/reqingcheng1.mp3 new file mode 100644 index 000000000..e81ab2972 Binary files /dev/null and b/audio/skill/reqingcheng1.mp3 differ diff --git a/audio/skill/reqingcheng2.mp3 b/audio/skill/reqingcheng2.mp3 new file mode 100644 index 000000000..f881bbaac Binary files /dev/null and b/audio/skill/reqingcheng2.mp3 differ diff --git a/audio/skill/rexiantu1.mp3 b/audio/skill/rexiantu1.mp3 new file mode 100644 index 000000000..e98e88777 Binary files /dev/null and b/audio/skill/rexiantu1.mp3 differ diff --git a/audio/skill/rexiantu2.mp3 b/audio/skill/rexiantu2.mp3 new file mode 100644 index 000000000..2db095fd8 Binary files /dev/null and b/audio/skill/rexiantu2.mp3 differ diff --git a/audio/skill/roulin_ol_dongzhuo1.mp3 b/audio/skill/roulin_ol_dongzhuo1.mp3 index 6ab140bea..e0a98c798 100644 Binary files a/audio/skill/roulin_ol_dongzhuo1.mp3 and b/audio/skill/roulin_ol_dongzhuo1.mp3 differ diff --git a/audio/skill/roulin_ol_dongzhuo2.mp3 b/audio/skill/roulin_ol_dongzhuo2.mp3 index 73d579284..836600b1c 100644 Binary files a/audio/skill/roulin_ol_dongzhuo2.mp3 and b/audio/skill/roulin_ol_dongzhuo2.mp3 differ diff --git a/audio/skill/sbduanliang1.mp3 b/audio/skill/sbduanliang1.mp3 index 3d1c45969..cea613dfe 100644 Binary files a/audio/skill/sbduanliang1.mp3 and b/audio/skill/sbduanliang1.mp3 differ diff --git a/audio/skill/sbduanliang_false.mp3 b/audio/skill/sbduanliang_false.mp3 new file mode 100644 index 000000000..672d99b46 Binary files /dev/null and b/audio/skill/sbduanliang_false.mp3 differ diff --git a/audio/skill/sbduanliang_true1.mp3 b/audio/skill/sbduanliang_true1.mp3 new file mode 100644 index 000000000..3d1c45969 Binary files /dev/null and b/audio/skill/sbduanliang_true1.mp3 differ diff --git a/audio/skill/sbduanliang2.mp3 b/audio/skill/sbduanliang_true2.mp3 similarity index 100% rename from audio/skill/sbduanliang2.mp3 rename to audio/skill/sbduanliang_true2.mp3 diff --git a/audio/skill/sbguose1.mp3 b/audio/skill/sbguose1.mp3 new file mode 100644 index 000000000..a43402d5d Binary files /dev/null and b/audio/skill/sbguose1.mp3 differ diff --git a/audio/skill/sbguose2.mp3 b/audio/skill/sbguose2.mp3 new file mode 100644 index 000000000..1152ac4e8 Binary files /dev/null and b/audio/skill/sbguose2.mp3 differ diff --git a/audio/skill/sbhunzi1.mp3 b/audio/skill/sbhunzi1.mp3 new file mode 100644 index 000000000..60985269e Binary files /dev/null and b/audio/skill/sbhunzi1.mp3 differ diff --git a/audio/skill/sbhunzi2.mp3 b/audio/skill/sbhunzi2.mp3 new file mode 100644 index 000000000..d376b381d Binary files /dev/null and b/audio/skill/sbhunzi2.mp3 differ diff --git a/audio/skill/sbjiang1.mp3 b/audio/skill/sbjiang1.mp3 new file mode 100644 index 000000000..cc7949162 Binary files /dev/null and b/audio/skill/sbjiang1.mp3 differ diff --git a/audio/skill/sbjiang2.mp3 b/audio/skill/sbjiang2.mp3 new file mode 100644 index 000000000..2aeecd399 Binary files /dev/null and b/audio/skill/sbjiang2.mp3 differ diff --git a/audio/skill/sbliuli1.mp3 b/audio/skill/sbliuli1.mp3 new file mode 100644 index 000000000..bf29da7ef Binary files /dev/null and b/audio/skill/sbliuli1.mp3 differ diff --git a/audio/skill/sbliuli2.mp3 b/audio/skill/sbliuli2.mp3 new file mode 100644 index 000000000..45f2bb807 Binary files /dev/null and b/audio/skill/sbliuli2.mp3 differ diff --git a/audio/skill/sbtieji_false.mp3 b/audio/skill/sbtieji_false.mp3 new file mode 100644 index 000000000..836b55bec Binary files /dev/null and b/audio/skill/sbtieji_false.mp3 differ diff --git a/audio/skill/sbtieji2.mp3 b/audio/skill/sbtieji_true1.mp3 similarity index 100% rename from audio/skill/sbtieji2.mp3 rename to audio/skill/sbtieji_true1.mp3 diff --git a/audio/skill/sbtieji_true2.mp3 b/audio/skill/sbtieji_true2.mp3 new file mode 100644 index 000000000..af5584b3d Binary files /dev/null and b/audio/skill/sbtieji_true2.mp3 differ diff --git a/audio/skill/sbyingzi_sb_sunce1.mp3 b/audio/skill/sbyingzi_sb_sunce1.mp3 new file mode 100644 index 000000000..6a8e2780e Binary files /dev/null and b/audio/skill/sbyingzi_sb_sunce1.mp3 differ diff --git a/audio/skill/sbyingzi_sb_sunce2.mp3 b/audio/skill/sbyingzi_sb_sunce2.mp3 new file mode 100644 index 000000000..a8618312b Binary files /dev/null and b/audio/skill/sbyingzi_sb_sunce2.mp3 differ diff --git a/audio/skill/sbzhiba1.mp3 b/audio/skill/sbzhiba1.mp3 new file mode 100644 index 000000000..c559b8a26 Binary files /dev/null and b/audio/skill/sbzhiba1.mp3 differ diff --git a/audio/skill/sbzhiba2.mp3 b/audio/skill/sbzhiba2.mp3 new file mode 100644 index 000000000..b7b951125 Binary files /dev/null and b/audio/skill/sbzhiba2.mp3 differ diff --git a/audio/skill/sbzishou1.mp3 b/audio/skill/sbzishou1.mp3 new file mode 100644 index 000000000..50c818630 Binary files /dev/null and b/audio/skill/sbzishou1.mp3 differ diff --git a/audio/skill/sbzishou2.mp3 b/audio/skill/sbzishou2.mp3 new file mode 100644 index 000000000..f65f67d8e Binary files /dev/null and b/audio/skill/sbzishou2.mp3 differ diff --git a/audio/skill/sbzongshi1.mp3 b/audio/skill/sbzongshi1.mp3 new file mode 100644 index 000000000..2d2b94cfc Binary files /dev/null and b/audio/skill/sbzongshi1.mp3 differ diff --git a/audio/skill/sbzongshi2.mp3 b/audio/skill/sbzongshi2.mp3 new file mode 100644 index 000000000..a9f7fe880 Binary files /dev/null and b/audio/skill/sbzongshi2.mp3 differ diff --git a/audio/skill/shanzhuan1.mp3 b/audio/skill/shanzhuan1.mp3 index 26836c65f..ad55cca62 100644 Binary files a/audio/skill/shanzhuan1.mp3 and b/audio/skill/shanzhuan1.mp3 differ diff --git a/audio/skill/shanzhuan2.mp3 b/audio/skill/shanzhuan2.mp3 index 92efd5833..68ee7b91e 100644 Binary files a/audio/skill/shanzhuan2.mp3 and b/audio/skill/shanzhuan2.mp3 differ diff --git a/audio/skill/shichou1.mp3 b/audio/skill/shichou1.mp3 index 13809f115..77fe5a510 100644 Binary files a/audio/skill/shichou1.mp3 and b/audio/skill/shichou1.mp3 differ diff --git a/audio/skill/shichou2.mp3 b/audio/skill/shichou2.mp3 index 09967b3b8..77fe5a510 100644 Binary files a/audio/skill/shichou2.mp3 and b/audio/skill/shichou2.mp3 differ diff --git a/audio/skill/suoliang1.mp3 b/audio/skill/suoliang1.mp3 new file mode 100644 index 000000000..e7e198c09 Binary files /dev/null and b/audio/skill/suoliang1.mp3 differ diff --git a/audio/skill/suoliang2.mp3 b/audio/skill/suoliang2.mp3 new file mode 100644 index 000000000..797c0ce20 Binary files /dev/null and b/audio/skill/suoliang2.mp3 differ diff --git a/audio/skill/tongyuan1.mp3 b/audio/skill/tongyuan1.mp3 index a0507f7cc..9da7c9d91 100644 Binary files a/audio/skill/tongyuan1.mp3 and b/audio/skill/tongyuan1.mp3 differ diff --git a/audio/skill/tuogu1.mp3 b/audio/skill/tuogu1.mp3 index 50afb5b61..3f1f28c9c 100644 Binary files a/audio/skill/tuogu1.mp3 and b/audio/skill/tuogu1.mp3 differ diff --git a/audio/skill/tuogu2.mp3 b/audio/skill/tuogu2.mp3 index 4df1a38d7..ca70b560f 100644 Binary files a/audio/skill/tuogu2.mp3 and b/audio/skill/tuogu2.mp3 differ diff --git a/audio/skill/twchayi1.mp3 b/audio/skill/twchayi1.mp3 new file mode 100644 index 000000000..057afd247 Binary files /dev/null and b/audio/skill/twchayi1.mp3 differ diff --git a/audio/skill/twhanyu1.mp3 b/audio/skill/twhanyu1.mp3 new file mode 100644 index 000000000..a54ac2aa4 Binary files /dev/null and b/audio/skill/twhanyu1.mp3 differ diff --git a/audio/skill/twhanyu2.mp3 b/audio/skill/twhanyu2.mp3 new file mode 100644 index 000000000..3f41a9376 Binary files /dev/null and b/audio/skill/twhanyu2.mp3 differ diff --git a/audio/skill/twjilun1.mp3 b/audio/skill/twjilun1.mp3 new file mode 100644 index 000000000..65f458895 Binary files /dev/null and b/audio/skill/twjilun1.mp3 differ diff --git a/audio/skill/twjilun2.mp3 b/audio/skill/twjilun2.mp3 new file mode 100644 index 000000000..873e95d4a Binary files /dev/null and b/audio/skill/twjilun2.mp3 differ diff --git a/audio/skill/twmuyue1.mp3 b/audio/skill/twmuyue1.mp3 new file mode 100644 index 000000000..81230de6e Binary files /dev/null and b/audio/skill/twmuyue1.mp3 differ diff --git a/audio/skill/weimeng1.mp3 b/audio/skill/weimeng1.mp3 new file mode 100644 index 000000000..476e0f36b Binary files /dev/null and b/audio/skill/weimeng1.mp3 differ diff --git a/audio/skill/weimeng2.mp3 b/audio/skill/weimeng2.mp3 new file mode 100644 index 000000000..1f3a9bbd0 Binary files /dev/null and b/audio/skill/weimeng2.mp3 differ diff --git a/audio/skill/wusheng_dc_jsp_guanyu1.mp3 b/audio/skill/wusheng_dc_jsp_guanyu1.mp3 new file mode 100644 index 000000000..031b163ae Binary files /dev/null and b/audio/skill/wusheng_dc_jsp_guanyu1.mp3 differ diff --git a/audio/skill/wusheng_dc_jsp_guanyu2.mp3 b/audio/skill/wusheng_dc_jsp_guanyu2.mp3 new file mode 100644 index 000000000..d2ac85c3d Binary files /dev/null and b/audio/skill/wusheng_dc_jsp_guanyu2.mp3 differ diff --git a/audio/skill/xianwan.mp3 b/audio/skill/xianwan1.mp3 similarity index 100% rename from audio/skill/xianwan.mp3 rename to audio/skill/xianwan1.mp3 diff --git a/audio/skill/xianzhou1.mp3 b/audio/skill/xianzhou1.mp3 index 71d98f0f6..5231758e9 100644 Binary files a/audio/skill/xianzhou1.mp3 and b/audio/skill/xianzhou1.mp3 differ diff --git a/audio/skill/xianzhou2.mp3 b/audio/skill/xianzhou2.mp3 index 7c084921a..6a2c7119a 100644 Binary files a/audio/skill/xianzhou2.mp3 and b/audio/skill/xianzhou2.mp3 differ diff --git a/audio/skill/xinfu_gongqing.mp3 b/audio/skill/xinfu_gongqing1.mp3 old mode 100755 new mode 100644 similarity index 100% rename from audio/skill/xinfu_gongqing.mp3 rename to audio/skill/xinfu_gongqing1.mp3 diff --git a/audio/skill/xinfu_gongqing2.mp3 b/audio/skill/xinfu_gongqing2.mp3 new file mode 100644 index 000000000..0e4f774db Binary files /dev/null and b/audio/skill/xinfu_gongqing2.mp3 differ diff --git a/audio/skill/xinfu_kannan.mp3 b/audio/skill/xinfu_kannan1.mp3 old mode 100755 new mode 100644 similarity index 100% rename from audio/skill/xinfu_kannan.mp3 rename to audio/skill/xinfu_kannan1.mp3 diff --git a/audio/skill/xinfu_kannan2.mp3 b/audio/skill/xinfu_kannan2.mp3 new file mode 100644 index 000000000..ba5ca480a Binary files /dev/null and b/audio/skill/xinfu_kannan2.mp3 differ diff --git a/audio/skill/xinguixiu1.mp3 b/audio/skill/xinguixiu1.mp3 new file mode 100644 index 000000000..afaee1555 Binary files /dev/null and b/audio/skill/xinguixiu1.mp3 differ diff --git a/audio/skill/xinguixiu2.mp3 b/audio/skill/xinguixiu2.mp3 new file mode 100644 index 000000000..84d6f8b25 Binary files /dev/null and b/audio/skill/xinguixiu2.mp3 differ diff --git a/audio/skill/xinzhenjun1.mp3 b/audio/skill/xinzhenjun1.mp3 new file mode 100644 index 000000000..cbe7f8dfe Binary files /dev/null and b/audio/skill/xinzhenjun1.mp3 differ diff --git a/audio/skill/xinzhenjun2.mp3 b/audio/skill/xinzhenjun2.mp3 new file mode 100644 index 000000000..4193e5877 Binary files /dev/null and b/audio/skill/xinzhenjun2.mp3 differ diff --git a/audio/skill/xuancun1.mp3 b/audio/skill/xuancun1.mp3 new file mode 100644 index 000000000..9d512c61c Binary files /dev/null and b/audio/skill/xuancun1.mp3 differ diff --git a/audio/skill/xuancun2.mp3 b/audio/skill/xuancun2.mp3 new file mode 100644 index 000000000..b423348de Binary files /dev/null and b/audio/skill/xuancun2.mp3 differ diff --git a/audio/skill/yinghun_sb_sunce1.mp3 b/audio/skill/yinghun_sb_sunce1.mp3 new file mode 100644 index 000000000..2c23f144a Binary files /dev/null and b/audio/skill/yinghun_sb_sunce1.mp3 differ diff --git a/audio/skill/yinghun_sb_sunce2.mp3 b/audio/skill/yinghun_sb_sunce2.mp3 new file mode 100644 index 000000000..8d5854e0f Binary files /dev/null and b/audio/skill/yinghun_sb_sunce2.mp3 differ diff --git a/audio/skill/youdi.mp3 b/audio/skill/youdi.mp3 deleted file mode 100644 index dff62e7ef..000000000 Binary files a/audio/skill/youdi.mp3 and /dev/null differ diff --git a/audio/skill/youdi1.mp3 b/audio/skill/youdi1.mp3 new file mode 100644 index 000000000..9d3a8ca8e Binary files /dev/null and b/audio/skill/youdi1.mp3 differ diff --git a/audio/skill/youdi2.mp3 b/audio/skill/youdi2.mp3 new file mode 100644 index 000000000..b69b9d97c Binary files /dev/null and b/audio/skill/youdi2.mp3 differ diff --git a/audio/skill/zhangming1.mp3 b/audio/skill/zhangming1.mp3 new file mode 100644 index 000000000..a7086cfe8 Binary files /dev/null and b/audio/skill/zhangming1.mp3 differ diff --git a/audio/skill/zhangming2.mp3 b/audio/skill/zhangming2.mp3 new file mode 100644 index 000000000..343e424b5 Binary files /dev/null and b/audio/skill/zhangming2.mp3 differ diff --git a/audio/skill/zhaolie1.mp3 b/audio/skill/zhaolie1.mp3 new file mode 100644 index 000000000..4011a53fd Binary files /dev/null and b/audio/skill/zhaolie1.mp3 differ diff --git a/audio/skill/zhaolie2.mp3 b/audio/skill/zhaolie2.mp3 new file mode 100644 index 000000000..cef7b6e2e Binary files /dev/null and b/audio/skill/zhaolie2.mp3 differ diff --git a/audio/skill/zhige1.mp3 b/audio/skill/zhige1.mp3 index 3a118b324..5fe7c5073 100644 Binary files a/audio/skill/zhige1.mp3 and b/audio/skill/zhige1.mp3 differ diff --git a/audio/skill/zhige2.mp3 b/audio/skill/zhige2.mp3 index 8bebf40ff..3f30c08fc 100644 Binary files a/audio/skill/zhige2.mp3 and b/audio/skill/zhige2.mp3 differ diff --git a/audio/skill/ziqu1.mp3 b/audio/skill/ziqu1.mp3 index 97baf8626..f9e8137d5 100644 Binary files a/audio/skill/ziqu1.mp3 and b/audio/skill/ziqu1.mp3 differ diff --git a/audio/skill/ziqu2.mp3 b/audio/skill/ziqu2.mp3 index ba6d88638..854878e13 100644 Binary files a/audio/skill/ziqu2.mp3 and b/audio/skill/ziqu2.mp3 differ diff --git a/audio/skill/zlhuji1.mp3 b/audio/skill/zlhuji1.mp3 index a7b237006..ca121a80a 100644 Binary files a/audio/skill/zlhuji1.mp3 and b/audio/skill/zlhuji1.mp3 differ diff --git a/audio/skill/zlhuji2.mp3 b/audio/skill/zlhuji2.mp3 index e81d23a28..5f3df7e81 100644 Binary files a/audio/skill/zlhuji2.mp3 and b/audio/skill/zlhuji2.mp3 differ diff --git a/audio/skill/zlshoufu1.mp3 b/audio/skill/zlshoufu1.mp3 index f7fb97c01..12dd26420 100644 Binary files a/audio/skill/zlshoufu1.mp3 and b/audio/skill/zlshoufu1.mp3 differ diff --git a/audio/skill/zlshoufu2.mp3 b/audio/skill/zlshoufu2.mp3 index 665e8f166..625149f7a 100644 Binary files a/audio/skill/zlshoufu2.mp3 and b/audio/skill/zlshoufu2.mp3 differ diff --git a/audio/skill/zongzuo1.mp3 b/audio/skill/zongzuo1.mp3 index 502eed091..569650a08 100644 Binary files a/audio/skill/zongzuo1.mp3 and b/audio/skill/zongzuo1.mp3 differ diff --git a/audio/skill/zongzuo2.mp3 b/audio/skill/zongzuo2.mp3 index e3f0092fe..bc3b83591 100644 Binary files a/audio/skill/zongzuo2.mp3 and b/audio/skill/zongzuo2.mp3 differ diff --git a/card/extra.js b/card/extra.js index 689d0afd4..892eade8b 100644 --- a/card/extra.js +++ b/card/extra.js @@ -708,7 +708,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){ priority:2, firstDo:true, charlotte:true, - filter:function(event){ + filter:function(event,player){ + if(player.hasSkillTag('jiuSustain',null,event.name)) return false; if(event.name=='useCard') return (event.card&&(event.card.name=='sha')); return true; }, diff --git a/card/sp.js b/card/sp.js index fa0272a7b..ee72624c6 100644 --- a/card/sp.js +++ b/card/sp.js @@ -525,6 +525,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, qibaodao2:{ inherit:'qinggang_skill', + audio:true, }, g_jinchan:{ cardSkill:true, diff --git a/card/standard.js b/card/standard.js index 3a0f08b6a..5efbed545 100644 --- a/card/standard.js +++ b/card/standard.js @@ -1663,6 +1663,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ expose:0.2 }, notarget:true, + finalDelay:false, yingbian_tags:['gain','draw'], yingbian_prompt:function(card){ if(!get.cardtag(card,'yingbian_gain')) return '当你声明使用此牌时,你摸一张牌'; @@ -1674,8 +1675,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){ contentBefore:function(){ 'step 0' if(get.mode()=='guozhan'&&get.cardtag(card,'guo')){ - var trigger=event.getParent(2); - if(trigger.triggername!='phaseJudge'&&!trigger.statecard&&trigger.target.identity!='ye'&&trigger.target.identity!='unknown'){ + var trigger=event.getParent(2)._trigger; + if(trigger.name!='phaseJudge'&&trigger.card.name!='wuxie'&&trigger.targets.length>1){ player.chooseControl('对单体使用','对势力使用').set('prompt','请选择'+get.translation(card)+'的使用方式').set('ai',function(){ return '对势力使用' }); @@ -1686,16 +1687,29 @@ game.import('card',function(lib,game,ui,get,ai,_status){ 'step 1' if(result.control=='对势力使用'){ player.chat('对势力使用'); - event.getParent(2).guowuxie=true; + event.getParent().guowuxie=true; } }, content:function(){ - var evt=event.getParent(); + var trigger=event.getParent(2)._trigger; + if(trigger.name=='phaseJudge'){ + trigger.untrigger(); + trigger.cancelled=true; + } + else{ + trigger.neutralize(); + if(event.getParent().guowuxie==true){ + trigger.getParent().excluded.addArray(game.filterPlayer(function(current){ + return current.isFriendOf(trigger.target); + })); + } + } + /* event.result={ wuxied:true, directHit:evt.directHit||[], nowuxie:evt.nowuxie, - }; + };*/ if(player.isOnline()){ player.send(function(player){ if(ui.tempnowuxie&&!player.hasWuxie()){ @@ -2411,6 +2425,327 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } } }, + _wuxie:{ + trigger:{player:['useCardToBegin','phaseJudge']}, + priority:5, + popup:false, + forced:true, + filter:function(event,player){ + if(event.card.storage&&event.card.storage.nowuxie) return false; + var card=event.card; + if(event.name=='phaseJudge'&&card.viewAs) card={name:card.viewAs}; + var info=get.info(card); + if(info.wuxieable===false) return false; + if(event.name!='phaseJudge'){ + if(event.getParent().nowuxie) return false; + if(event.player.hasSkillTag('playernowuxie',false,event.card)) return false; + if(get.type(event.card)!='trick'&&!info.wuxieable) return false; + } + return true; + }, + forceLoad:true, + content:function(){ + 'step 0' + delete event.wuxieresult; + delete event.wuxieresult2; + //创建map存储各种信息,用于hasHiddenWuxie判断 + var map={}; + event._info_map=map; + var card=trigger.card; + var state=true; + if(trigger.name=='phaseJudge'&&get.itemtype(card)=='card'&&card.viewAs){ + card=get.autoViewAs({name:card.viewAs},[card]); + map.target=trigger.player; + map.isJudge=true; + } + else{ + map.player=trigger.player; + if(trigger.multitarget) map.multitargets=true; + map.target=trigger.target; + map.targets=trigger.targets; + map.tempnowuxie=(trigger.targets&&trigger.targets.length>1&&!trigger.multitarget); + //如果对拼无懈,获取历史数据 + if(card.name=='wuxie'){ + var evt=event; + while(true){ + evt=evt.getParent(5); + if(evt&&evt.name=='_wuxie'){ + state=!state; + var evtmap=evt._info_map; + if(evtmap.card.name!='wuxie'){ + map._source=evtmap; + } + } + else break; + } + } + } + map.card=card; + map.state=state?1:-1; + map.id2=trigger.getParent().id; + event._global_waiting=true; + //发送函数 + event.send=function(player,map,skillState){ + //获取技能数据 + if(skillState){ + player.applySkills(skillState); + } + //生成描述提示 + var prompt='',evtmap=map,state=map.state; + if(map._source) evtmap=map._source; + if(evtmap.isJudge){ + prompt+=(get.translation(evtmap.target)+'的'+get.translation(evtmap.card)+'即将'+(state>0?'生':'失')+'效。'); + } + else{ + prompt+=get.translation(evtmap.player); + if(evtmap.multitarget){ + if(evtmap.targets.length){ + prompt+='对'; + prompt+=get.translation(evtmap.targets); + } + } + else if(evtmap.target){ + prompt+='对'; + prompt+=(evtmap.target==evtmap.player?'自己':get.translation(evtmap.target)); + } + prompt+=('使用的'+get.translation(evtmap.card)); + prompt+=('即将'+(state>0?'生':'失')+'效。'); + } + prompt+='是否使用【无懈可击】?'; + + if(player.isUnderControl(true)&&!_status.auto&&!ui.tempnowuxie&&map.tempnowuxie){ + var translation=get.translation(map.card.name); + if(translation.length>=4){ + translation=lib.translate[map.card.name+'_ab']||translation.slice(0,2); + } + ui.tempnowuxie=ui.create.control('不无懈'+translation,ui.click.tempnowuxie,'stayleft'); + ui.tempnowuxie._origin=map.id2; + } + var next=player.chooseToUse({ + filterCard:function(card,player){ + if(get.name(card)!='wuxie') return false; + return lib.filter.cardEnabled(card,player,'forceEnable'); + }, + prompt:prompt, + type:'wuxie', + _global_waiting:true, + ai1:function(){ + if(map.isJudge){ + var card=evtmap.card,source=evtmap.target; + var name=card.viewAs||card.name; + var info=lib.card[name]; + if(info&&info.ai&&info.ai.wuxie){ + var aiii=info.ai.wuxie(source,card,source,_status.event.player,state); + if(typeof aiii=='number') return aiii; + } + if(Math.abs(get.attitude(_status.event.player,source))<3) return 0; + if(source.hasSkillTag('nowuxie_judge')||source.hasSkillTag('guanxing')&&(source!=player||!source.hasSkill('guanxing_fail'))) return 0; + if(name!='lebu'&&name!='bingliang'){ + if(source!=_status.event.player){ + return 0; + } + } + var card2; + if(name!=card.name){ + card2={name:name}; + } + else{ + card2=card; + } + var eff=get.effect(source,card2,source,source); + if(eff>=0) return 0; + return state*get.attitude(_status.event.player,source); + } + else if(evtmap.target){ + var triggerevent=_status.event.getTrigger(); + if(triggerevent&&triggerevent.parent&& + triggerevent.parent.postAi&& + triggerevent.player.isUnknown(_status.event.player)){ + return 0; + } + var card=evtmap.card,target=evtmap.target,source=evtmap.player; + var info=get.info(card); + if(info.ai&&info.ai.wuxie){ + var aiii=info.ai.wuxie(target,card,source,_status.event.player,state); + if(typeof aiii=='number') return aiii; + } + if(info.multitarget&&targets){ + var eff=0; + for(var i=0;i0; + }, + filterTarget:lib.filter.notMe, + content:function(){ + 'step 0' + var num=player.countCards('h'); + var str='是否交给其'+get.cnNumber(num)+'张牌,然后视为你对其使用一张【酒】?或者点击“取消”,令其交给你一张牌,然后其视为对你使用一张【杀】。'; + target.chooseCard(get.translation(player)+'对你发动了【驳龙】',str,num,'he').set('ai',card=>{ + if(_status.event.canGive) return 5-get.value(card); + return 0; + }).set('canGive',function(){ + if(get.attitude(target,player)>1) return true; + if(!player.hasSha()&&player.countCards('h')<=4) return true; + if(game.hasPlayer(current=>{ + return player.canUse('sha',current,true,true)&&get.effect(current,{name:'sha'},player,target)<0&&!current.countCards('hs',['shan','caochuan']); + })) return false; + return true; + }()); + 'step 1' + if(result.bool){ + var cards=result.cards; + target.give(cards,player); + if(lib.filter.targetEnabled2({name:'jiu',isCard:true},target,player)) target.useCard({name:'jiu',isCard:true},player,false); + event.finish(); + } + else{ + player.chooseCard('驳龙:交给'+get.translation(target)+'一张牌',get.translation(target)+'拒绝给牌,请交给其一张牌然后视为对其使用一张【杀】',true,'he'); + } + 'step 2' + if(result.bool){ + var cards=result.cards; + player.give(cards,target); + if(player.canUse('sha',target,false,false)) player.useCard({name:'sha',isCard:true},target,false); + } + }, + ai:{ + order:function(item,player){ + return get.order({name:'jiu'})+0.01; + }, + threaten:2, + result:{ + target:function(player,target){ + if(player.hasCard(card=>{ + return get.value(card)<5&&!['shan','tao','jiu','wuxie','caochuan'].contains(get.name(card)); + },'he')) return -1; + return 0; + }, + } + } + }, + clanzhongliu:{ + audio:2, + trigger:{player:'useCard'}, + forced:true, + clanSkill:true, + filter:function(event,player){ + if(!event.cards.length) return true; + var cards=[]; + game.countPlayer(current=>{ + if(!current.hasClan('太原王氏')) return false; + current.getHistory('lose',evt=>{ + if(event!=evt.getParent()) return false; + cards.addArray(evt.getl(current).hs); + }); + }) + return event.cards.some(card=>!cards.contains(card)); + }, + content:function(){ + 'step 0' + var skills=player.getStockSkills(true,true); + game.expandSkills(skills); + var resetSkills=[]; + var suffixs=['used','round','block','blocker']; + for(var skill of skills){ + var info=get.info(skill); + if(typeof info.usable=='number'){ + if(player.hasSkill('counttrigger')&&player.storage.counttrigger[skill]&&player.storage.counttrigger[skill]>=1){ + delete player.storage.counttrigger[skill]; + resetSkills.add(skill); + } + if(typeof get.skillCount(skill)=='number'&&get.skillCount(skill)>=1){ + delete player.getStat('skill')[skill]; + resetSkills.add(skill); + } + } + if(info.round&&player.storage[skill+'_roundcount']){ + delete player.storage[skill+'_roundcount']; + resetSkills.add(skill); + } + if(player.awakenedSkills.contains(skill)){ + player.restoreSkill(skill); + resetSkills.add(skill); + } + for(var suffix of suffixs){ + if(player.hasSkill(skill+'_'+suffix)){ + player.removeSkill(skill+'_'+suffix); + resetSkills.add(skill); + } + } + } + if(resetSkills.length){ + var str=''; + for(var i of resetSkills){ + str+='【'+get.translation(i)+'】、'; + } + game.log(player,'重置了技能','#g'+str.slice(0,-1)); + } + } + }, //族吴匡 clanlianzhu:{ audio:2, @@ -506,7 +623,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var winner=result.bool?player:target; var cards=[]; game.getGlobalHistory('cardMove',evt=>{ - if(evt.getParent(2)==event) cards.addArray(evt.cards.filterInD('d')); + if(evt.getParent(3)==event) cards.addArray(evt.cards.filterInD('d')); }); event.winner=winner; if(cards.length) event.cards=cards; @@ -591,12 +708,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - player.chooseTarget('三恇:选择一名其他角色','令其交给你至少X张牌,然后其获得'+get.translation(trigger.cards.filterInD('ejod'))+'(X为以下条件中其满足的项数:场上有牌、已受伤、体力值小于手牌数)',true,lib.filter.notMe).set('ai',target=>{ + var cards=trigger.cards.filterInD('oe'); + player.chooseTarget('三恇:选择一名其他角色','令其交给你至少X张牌'+(cards.length?',然后其获得'+get.translation(cards):'')+'(X为以下条件中其满足的项数:场上有牌、已受伤、体力值小于手牌数)',true,lib.filter.notMe).set('ai',target=>{ var att=get.attitude(player,target),num=lib.skill.clansankuang.getNum(target); if(num==0) return att; if(_status.event.goon) return -att; return -Math.sqrt(Math.abs(att))-lib.skill.clansankuang.getNum(target); - }).set('goon',Math.max.apply(Math,trigger.cards.map(i=>get.value(i)))<=5||trigger.cards.filterInD('ejod').length==0) + }).set('goon',Math.max.apply(Math,trigger.cards.map(i=>get.value(i)))<=5||trigger.cards.filterInD('oe').length==0) 'step 1' if(result.bool){ var target=result.targets[0],num=lib.skill.clansankuang.getNum(target),num2=target.countCards('he'); @@ -604,7 +722,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('clansankuang',target); if(num==0||num2==0) event._result={bool:false}; else if(num2<=num) event._result={bool:true,cards:target.getCards('he')}; - else target.chooseCard('he',true,[num,Infinity]).set('ai',get.unuseful); + else target.chooseCard('he',true,[num,Infinity]).set('ai',get.unuseful).set('prompt','交给'+get.translation(player)+'至少'+get.cnNumber(num)+'张牌'); }else event.finish(); 'step 2' if(result.bool){ @@ -613,8 +731,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.delayx(); } 'step 3' - if(trigger.cards.filterInD('ej').length) target.gain(trigger.cards.filterInD('ejod'),get.owner(trigger.cards.filterInD('ej')[0]),'giveAuto','bySelf'); - else if(trigger.cards.filterInD('od').length) target.gain(trigger.cards.filterInD('od'),'gain2','bySelf'); + if(trigger.cards.filterInD().length) target.gain(trigger.cards.filterInD(),'gain2','bySelf'); + else if(trigger.cards.filterInD('e').length) target.gain(trigger.cards.filterInD('e'),get.owner(trigger.cards.filterInD('e')[0]),'give'); }, ai:{ reverseOrder:true, @@ -661,6 +779,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ var cards=player.getCards('h',trigger.card.name); player.showCards(cards,get.translation(player)+'发动了【神君】'); + player.markSkill('clanshenjun'); player.addGaintag(cards,'clanshenjun'); for(var name of lib.phaseName){ var evt=_status.event.getParent(name); @@ -669,6 +788,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ break; } }, + marktext:'君', + intro:{ + markcount:function(storage,player){ + return player.countCards('h',card=>card.hasGaintag('clanshenjun')); + }, + mark:function(dialog,content,player){ + var cards=player.getCards('h',card=>card.hasGaintag('clanshenjun')); + if(cards.length){ + dialog.addAuto(cards); + } + else return '无展示牌'; + }, + }, subSkill:{ viewAs:{ trigger:{global:['phaseZhunbeiEnd','phaseJudgeEnd','phaseDrawEnd','phaseUseEnd','phaseDiscardEnd','phaseJieshuEnd']}, @@ -737,7 +869,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, forced:true, filter:function(event,player){ - if(game.getGlobalHistory('changeHp',evt=>evt.player==player&&evt.getParent()==event).length!=1) return false; + if(game.getGlobalHistory('changeHp',evt=>evt.player==player).length!=1) return false; var cards=player.getCards('h'),map={}; if(!cards.length) return false; for(var card of cards){ @@ -831,16 +963,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else{ var next=game.createEvent(name); next.setContent(function(){ - if(result.bool==false){ - player.damage(3,'thunder','nosource'); - } - }); + if(result.bool==false){ + player.damage(3,'thunder','nosource'); + } + }); next._result=result; next.cards=[]; - next.card=get.autoViewAs({name:name}); + next.card=get.autoViewAs({name:name}); next.player=player; } - 'step 2' + 'step 2' trigger.player.drawTo(4); }, ai:{expose:0.25} @@ -902,8 +1034,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ suit:function(card,suit){ var player=get.owner(card)||_status.event.player; if(!player||!player.judging||player.judging[0]!=card) return; - var storage=player.getStorage('clanfenchai'); - if(!storage.length) return; + var storage=player.getStorage('clanfenchai'); + if(!storage.length) return; return storage.filter(i=>i.isIn()).length>0?'heart':'spade'; } } @@ -1108,8 +1240,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audioname:['clan_xunshu','clan_xunchen','clan_xuncai','clan_xuncan'], trigger:{player:'useCardAfter'}, filter:function(event,player){ - return player.getHistory('useCard',evt=>{ - return get.type(evt.card)=='trick'&&!get.tag(evt.card,'damage'); + return get.type(event.card,null,false)=='trick'&&!get.tag(event.card,'damage')&&event.cards.filterInD('d').length>0&&player.getHistory('useCard',evt=>{ + return get.type(evt.card,null,false)=='trick'&&!get.tag(evt.card,'damage'); }).indexOf(event)==0; }, forced:true, @@ -1430,7 +1562,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clanshenjun:'神君', clanshenjun_info:'当一名角色使用【杀】或普通锦囊牌时,若你手牌中有该牌名的牌,你展示之,且这些牌称为“神君”。然后本阶段结束时,你可以将等同于你“神君”数张牌当做一张“神君”牌使用。', clanbalong:'八龙', - clanbalong_info:'锁定技。当你回复体力后或受到伤害后或失去体力后,若你手牌中唯一最多的类别为锦囊牌,你展示所有手牌并摸至角色数张。', + clanbalong_info:'锁定技。当你于一回合内首次{回复体力后或受到伤害后或失去体力后},若你手牌中唯一最多的类别为锦囊牌,你展示所有手牌并摸至角色数张。', clandaojie:'蹈节', clandaojie_info:'宗族技,锁定技。当你每回合第一次使用非伤害类普通锦囊牌后,你须失去一个锁定技或失去1点体力,令一名颍川荀氏角色获得此牌对应的所有实体牌。', clan_xuncai:'族荀采', @@ -1442,7 +1574,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clanhuanyin_info:'锁定技。当你进入濒死状态时,将手牌补至四张。', clan_xunchen:'族荀谌', clansankuang:'三恇', - clansankuang_info:'锁定技。当你每轮第一次使用一种类别的牌后,你令一名其他角色交给你至少X张牌,然后于场上或弃牌堆内或处理区内获得你使用的牌对应的所有实体牌(X为以下条件中其满足的项数:场上有牌、已受伤、体力值小于手牌数)。', + clansankuang_info:'锁定技。当你每轮第一次使用一种类别的牌后,你令一名其他角色交给你至少X张牌,然后于装备区或处理区内获得你使用的牌对应的所有实体牌(X为以下条件中其满足的项数:场上有牌、已受伤、体力值小于手牌数)。', clanbeishi:'卑势', clanbeishi_info:'锁定技。当一名角色失去最后的手牌后,若其是你首次发动〖三恇〗的目标角色,你回复1点体力。', clan_xuncan:'族荀粲', @@ -1467,10 +1599,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clan_wukuang:'族吴匡', clanlianzhu:'联诛', clanlianzhu_info:'转换技。每名角色A的出牌阶段限一次。阴:A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1;阳:A可以令你选择一名在你或A攻击范围内的另一名其他角色B,然后A和你可依次选择是否对B使用一张【杀】。若这两张【杀】颜色相同,则你的手牌上限+1。', + clan_wangling:'族王凌', + clanbolong:'驳龙', + clanbolong_info:'出牌阶段限一次。你可以令一名其他角色选择一项:1.你交给其一张牌,然后视为对其使用一张【杀】;2.交给你等同于你手牌数的牌,然后视为对你使用一张【酒】。', + clanzhongliu:'中流', + clanzhongliu_info:'宗族技,锁定技。当你使用牌时,若此牌对应的实体牌不全为同族角色的手牌,你重置武将牌上的技能。', clan_wu:'陈留·吴氏', clan_xun:'颍川·荀氏', clan_han:'颍川·韩氏', + clan_wang:'太原·王氏', }, }; }); diff --git a/character/diy.js b/character/diy.js index ff2224b24..2662da096 100755 --- a/character/diy.js +++ b/character/diy.js @@ -75,7 +75,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ db_key_liyingxia:['female','shu',3,['liyingxia_sanli','liyingxia_zhenjun','liyingxia_wumai'],['doublegroup:shu:key']], key_erika:['female','key','3/3/2',['erika_shisong','erika_yousheng']], key_satomi:['female','key',3,['satomi_luodao','satomi_daohai']], - key_iriya:['female','key',3,['iriya_yinji','iriya_haozhi'],['unseen']], + key_iriya:['female','key',3,['iriya_yinji','iriya_haozhi']], key_kud:['female','key',3,['kud_qiaoshou','kud_buhui']], key_misuzu:['female','key',3,['misuzu_hengzhou','misuzu_nongyin','misuzu_zhongxing']], @@ -221,7 +221,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','ol_maliang','junk_liubei','junk_huangyueying','junk_lidian'], + diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang','old_bulianshi','junk_sunquan','ol_maliang','junk_liubei','junk_huangyueying','junk_lidian','junk_duanwei'], }, }, characterIntro:{ @@ -566,6 +566,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(card.cards.some(card=>card.hasGaintag('iriya_yinji_tag'))) return false; } }, + aiValue:function(player,card,num){ + if(get.itemtype(card)=='card'&&card.hasGaintag('iriya_yinji_tag')) return num/10000; + }, + aiUseful:function(player,card,num){ + if(get.itemtype(card)=='card'&&card.hasGaintag('iriya_yinji_tag')) return num/10000; + }, }, }, }, @@ -654,6 +660,261 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterOk:function(){ return Array.isArray(lib.skill.iriya_haozhi.getType(ui.selected.cards,_status.event.player)); }, + check:function(card){ + var player=_status.event.player; + //收益都一样 多一牌不如少一牌 + var types=['炸弹','三顺','单顺','双顺','三张','对子']; + var getNum=function(card,player){ + var num=get.number(card,player); + if(num<=2) return num+13; + return num; + },hasEnemy=game.hasPlayer(current=>get.attitude(player,current)<0); + //所有手牌 + var nums=player.getCards('he',function(card){ + return lib.filter.cardDiscardable(card,player); + }).map(card=>getNum(card,player)); + var numu=ui.selected.cards.map(card=>getNum(card,player)); + var num=getNum(card,player); + if(!_status.event._iriya_haozhi_type){ + for(var type of types){ + switch(type){ + case '炸弹': + if(!hasEnemy) break; + for(var i of nums){ + if(get.numOf(nums,i)>=4){ + _status.event._iriya_haozhi_type='炸弹'; + break; + } + } + break; + case '三顺': + if(!hasEnemy) break; + for(var i of nums){ + if(i<14&&get.numOf(nums,i)>=3&&get.numOf(nums,i+1)>=3){ + _status.event._iriya_haozhi_type='三顺'; + break; + } + } + break; + case '双顺': + if(!hasEnemy) break; + for(var i of nums){ + if(i<13&&get.numOf(nums,i)>=2){ + for(var j=1;j<3;j++){ + if(get.numOf(nums,i+j)<2) break; + if(j==2) _status.event._iriya_haozhi_type='双顺'; + } + } + } + break; + case '单顺': + if(!hasEnemy) break; + for(var i of nums){ + if(i<11){ + for(var j=1;j<5;j++){ + if(!nums.contains(i+j)) break; + if(j==4) _status.event._iriya_haozhi_type='单顺'; + } + } + } + break; + case '三张': + if(!hasEnemy) break; + for(var i of nums){ + if(get.numOf(nums,i)>=3){ + _status.event._iriya_haozhi_type='三张'; + break; + } + } + break; + case '对子': + for(var i of nums){ + if(get.numOf(nums,i)>=2){ + _status.event._iriya_haozhi_type='对子'; + break; + } + } + break; + } + if(_status.event._iriya_haozhi_type) break; + } + if(!_status.event._iriya_haozhi_type) _status.event._iriya_haozhi_type='要不起'; + } + if(_status.event._iriya_haozhi_type=='要不起') return 0; + //复用响应AI + if(!ui.selected.cards.length){ + var count=get.numOf(nums,num); + switch(_status.event._iriya_haozhi_type){ + case '炸弹': + if(count>=4) return 15; + break; + case '对子': + if(count>1&&player.hasCard(function(cardx){ + return cardx!=card&&getNum(cardx,player)==num&&cardx.hasGaintag('iriya_yinji_tag'); + },'he')) return 4-get.value(card); + break; + case '三张': + if(count>2) return 8-get.value(card); + break; + case '单顺': + if(num>10) return 0; + for(var i=1;i<5;i++){ + if(get.numOf(nums,num+i)<1) return 0; + } + return 9-get.value(card); + case '双顺': + if(count<2||num>12) return 0; + for(var i=1;i<3;i++){ + if(get.numOf(nums,num+i)<2) return 0; + } + return 9-get.value(card); + case '三顺': + if(count<3||num>13) return 0; + for(var i=1;i<2;i++){ + if(get.numOf(nums,num+i)<2) return 0; + } + return 12-get.value(card); + } + return 0; + } + else{ + switch(_status.event._iriya_haozhi_type){ + case '炸弹': + if(numu.length>=4) return 0; + if(num==numu[0]) return 15; + return 0; + case '对子': + if(numu.length>=2) return 0; + if(num==numu[0]) return 3-get.value(card); + return 0; + case '三张': + if(numu.length>=3) return 0; + if(num==numu[0]) return 9-get.value(card); + return 0; + case '单顺': case '双顺': case '三顺': + var map={ + 单顺:[5,0], + 双顺:[3,1], + 三顺:[2,2], + },len=map[_status.event._iriya_haozhi_type][0],addNum=map[_status.event._iriya_haozhi_type][1]; + if(numu.length>=len) return 0; + var numt=numu[numu.length-1]+(numu.length%(1+addNum)==0?1:0); + if(num==numt) return 10+addNum-get.value(card); + return 0; + } + } + }, + //响应AI + respondAI:function(card){ + if(!_status.event.goon) return 0; + var type=_status.event.type,player=_status.event.player; + var getNum=function(card,player){ + var num=get.number(card,player); + if(num<=2) return num+13; + return num; + },nums=player.getCards('he',function(card){ + return lib.filter.cardDiscardable(card,player,'iriya_haozhi'); + }).map(card=>getNum(card,player)); + var num=getNum(card,player); + if(!ui.selected.cards.length){ + var count=get.numOf(nums,num); + if(count>=4&&(type[0]!='炸弹'||num>type[1]||count>type[2])) return 15; + switch(type[0]){ + case '对子': + if(count>1&&num>type[1]) return 8-get.value(card); + break; + case '三张': case '三带一': case '三带二': + if(count>2&&num>type[1]) return 9-get.value(card); + break; + case '单顺': + if(num<=type[1]||num>(15-type[2])) return 0; + for(var i=1;i(15-type[2]/2)) return 0; + for(var i=1;i(15-type[2]/size)) return 0; + for(var i=1;igetNum(card,player)) + var numx=numu[0]; + if(num==numx){ + var count=get.numOf(nums,numx); + if(count>=4&&(type[0]!='炸弹'||num>type[1]||count>type[2])&&(numu.length<(type[0]=='炸弹'?type2:4))) return 15; + } + switch(type[0]){ + case '对子': + if(numu.length>=2) return 0; + if(num==numu[0]) return 8-get.value(card); + return 0; + case '三张': + if(numu.length>=3) return 0; + if(num==numu[0]) return 9-get.value(card); + return 0; + case '三带一': + if(numu.length==3||num==numu[0]) return 9-get.value(card); + return 0; + case '三带二': + if(numu.length>=5) return false; + if(numu.length==3){ + if(num==numu[0]||get.numOf(nums,num)<2) return 0; + } + else if(numu.length==4){ + return num==numu[3]?9-get.value(card):0; + } + if(num==numu[0]) return 9-get.value(card); + return 0; + case '单顺': case '双顺': case '三顺': + if(numu.length>=type[2]) return 0; + var addNum=['单顺','双顺','三顺'].indexOf(type[0]); + var numt=numu[numu.length-1]+(numu.length%(1+addNum)==0?1:0); + if(num==numt) return 10+addNum-get.value(card); + return 0; + case '单带飞机': + if(numu.length>=type[2]) return 0; + var len=type[2]/4*3; + if(numu.length=numu[0]||num<=numu[len-1]) return 0; + return 12-get.value(card); + } + return 0; + case '双带飞机': + if(numu.length>=type[2]) return 0; + var len=type[2]/5*3; + if(numu.lengthptype[1]; }); + next.set('goon',get.attitude(target,event.current)<0); + next.set('ai',lib.skill.iriya_haozhi.respondAI); } else if(event.players.length>0) event.redo(); else event.goto(3); @@ -711,7 +974,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ event.current=target; event.current_type=lib.skill.iriya_haozhi.getType(result.cards.slice(0),target); + event.current_cards=result.cards.slice(0); if(!event.current_type) event.finish(); + event.current.addExpose(0.5); } if(event.players.length>0) event.goto(1); 'step 3' @@ -731,11 +996,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ case '炸弹': case'四带二': type=6;break; } - if(type==2){ + /*if(type==2){ current.addSkill('iriya_haozhi_extra'); current.addMark('iriya_haozhi_extra',1,false); } - else if(type>0){ + else */ + if(type>0){ var next=game.createEvent('iriya_haozhi_effect',false); next.player=current; next.setContent(lib.skill.iriya_haozhi['content'+type]); @@ -743,7 +1009,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content1:function(){ 'step 0' - player.chooseTarget([1,2],'是否令至多两名角色各摸一张牌?'); + player.chooseTarget([1,2],'是否令至多两名角色各摸一张牌?').set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(target.hasSkillTag('nogain')) att/=10; + return att; + }); 'step 1' if(result.bool){ var targets=result.targets.sortBySeat(); @@ -752,73 +1022,153 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.delayex(); } }, - content3:function(){ + content2:function(){ 'step 0' - player.chooseTarget([1,2],'是否对至多两名其他角色造成1点伤害?',lib.filter.notMe); + player.chooseTarget([1,3],'是否弃置至多三名角色的各一张牌?',function(card,player,target){ + return target!=player&&target.hasCard(function(card){ + return lib.filter.canBeDiscarded(card,player,target); + },'he') + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'guohe_copy2'},player,player); + }); 'step 1' if(result.bool){ var targets=result.targets.sortBySeat(); - player.line(targets); - event.targets=targets; + player.line(targets,'green'); + for(var target of targets){ + player.discardPlayerCard(target,true,'he'); + } } 'step 2' - var target=targets.shift(); - target.damage(); - game.delayex(); - if(targets.length>0) event.redo(); + //player.recover(); + player.draw(); + }, + content3:function(){ + 'step 0' + event.count=0; + 'step 1' + var next=player.chooseTarget('是否弃置一名其他角色的一张牌?',function(card,player,target){ + return target!=player&&target.hasCard(function(card){ + return lib.filter.canBeDiscarded(card,player,target); + },'he'); + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'guohe_copy2'},player,player); + }); + if(event.color) next.set('prompt2','若你弃置的牌为'+get.translation(event.color)+',则你可以重复此流程'); + 'step 2' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'fire'); + player.discardPlayerCard(target,true,'he'); + } + else event.goto(4); + 'step 3' + if(result.bool){ + event.count++; + var card=result.cards[0],color=get.color(card,false); + if(!event.color){ + event.color=color; + event.goto(1); + } + else if(color==event.color) event.goto(1); + } + 'step 4' + if(event.count>0) player.draw(event.count); }, content4:function(){ 'step 0' - player.chooseTarget([1,2],'是否弃置至多两名其他角色的各一张牌并造成1点伤害?',lib.filter.notMe); + event.count=0; 'step 1' - if(result.bool){ - var targets=result.targets.sortBySeat(); - player.line(targets); - event.targets=targets; - } + var next=player.chooseTarget('是否获得一名其他角色的一张牌?',function(card,player,target){ + return target!=player&&target.hasCard(function(card){ + return lib.filter.canBeGained(card,player,target); + },'he'); + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'shunshou_copy2'},player,player); + }); + if(event.color) next.set('prompt2','若你获得的牌为'+get.translation(event.color)+',则你可以重复此流程'); 'step 2' - var target=targets.shift(); - player.discardPlayerCard(target,true,'he'); - target.damage(); - game.delayex(); - if(targets.length>0) event.redo(); + if(result.bool){ + var target=result.targets[0]; + player.line(target,'fire'); + player.gainPlayerCard(target,true,'he'); + } + else event.goto(4); + 'step 3' + if(result.bool){ + event.count++; + var card=result.cards[0],color=get.color(card,false); + if(!event.color){ + event.color=color; + event.goto(1); + } + else if(color==event.color) event.goto(1); + //player.draw(); + } + 'step 4' + if(event.count>0) player.recover(event.count); }, content5:function(){ 'step 0' - player.chooseTarget([1,2],'是否令至多两名其他角色翻面,弃置其的各一张牌并造成1点伤害?',lib.filter.notMe); + player.chooseTarget([1,3],'是否令至多三名其他角色翻面?',lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(target.isTurnedOver()) return 10*att; + return -6*att; + }); 'step 1' if(result.bool){ var targets=result.targets.sortBySeat(); - player.line(targets); + player.line(targets,'thunder'); event.targets=targets; + for(var target of targets) target.turnOver(); } 'step 2' - var target=targets.shift(); - target.turnOver(); - player.discardPlayerCard(target,true,'e',5); - player.discardPlayerCard(target,true,'h'); - target.damage(); - game.delayex(); - if(targets.length>0) event.redo(); + player.chooseTarget('是否对一名目标角色造成1点火属性伤害?',function(card,player,target){ + return _status.event.getParent().targets.contains(target); + }).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player,'fire'); + }); + 'step 3' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'fire'); + target.damage('fire'); + } }, content6:function(){ 'step 0' - player.chooseTarget([1,2],'是否令至多两名其他角色翻面,弃置其装备区内的所有牌和一张手牌,并造成1点伤害?',lib.filter.notMe); + player.chooseTarget('是否对一名其他角色进行核打击?','你对该角色造成2点雷属性伤害,然后该角色翻面,弃置装备区内的所有牌和四张手牌。',lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(target.isTurnedOver()) return -6*att*Math.sqrt(2+target.countCards('he')); + return -att*Math.sqrt(2+target.countCards('he')); + }); 'step 1' if(result.bool){ - var targets=result.targets.sortBySeat(); - player.line(targets); - event.targets=targets; + var target=result.targets[0]; + event.target=target; + player.line(target,'thunder'); + target.damage('thunder',2); + target.turnOver(); } + else event.finish(); 'step 2' - var target=targets.shift(); - target.turnOver(); - player.discardPlayerCard(target,true,'he'); - target.damage(); - game.delayex(); - if(targets.length>0) event.redo(); + var num=target.countCards('e'); + if(num>0) target.chooseToDiscard('e',true,num); + 'step 3' + var num=target.countCards('h'); + if(num>0) target.chooseToDiscard('h',true,Math.min(4,num)); + }, + ai:{ + sortCardByNum:true, + order:13, + result:{ + player:1, + }, }, - ai:{sortCardByNum:true}, subSkill:{ extra:{ charlotte:true, @@ -12379,6 +12729,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:['useCardAfter','respondAfter']}, forced:true, popup:false, + charlotte:true, filter:function(event,player){ return event.skill=='junktaoluan_backup'||event.skill=='junktaoluan5'||event.skill=='junktaoluan4'; }, @@ -12422,6 +12773,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseEnd'}, forced:true, popup:false, + charlotte:true, content:function(){ player.loseHp(); }, @@ -18151,11 +18503,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ iriya_haozhi:'豪掷', iriya_haozhi_info:'出牌阶段,你可以按照斗地主牌型弃置至少两张牌,且其他角色可以依次对其进行一轮响应。最后一名进行响应的角色可以根据对应牌型执行对应效果。' +'对子:其可以令至多两名角色各摸一张牌。' - +'三带:其使用的下一张牌可以多指定一个目标且无距离和次数限制。' - +'单顺:其可以对至多2名其他角色造成1点伤害。' - +'双顺:其可以弃置至多2名其他角色的一张牌并对其造成1点伤害。' - +'三顺/飞机:其可以令至多2名其他角色翻面,弃置其的一张牌并对其造成1点伤害。' - +'炸弹/四带二:其可以令至多2名其他角色翻面,弃置这些角色装备区内的所有牌和一张手牌,对这些角色造成1点伤害。', + +'三带:其可以弃置至多三名其他角色的各一张牌,然后摸一张牌。' + +'单顺:其可以弃置一名其他角色的一张牌。若其未以此法弃置过颜色相同的牌,则其可以重复此流程。然后其摸等量的牌。' + +'双顺:其可以获得一名其他角色的一张牌。若其未以此法获得过颜色相同的牌,则其可以重复此流程。然后其回复等量的体力。' + +'三顺/飞机:其可以令至多3名其他角色翻面,然后对其中一名角色造成1点火属性伤害。' + +'炸弹/四带二:其可以对一名角色造成2点雷属性伤害,然后目标角色翻面,弃置装备区的所有牌和四张手牌。', key_kud:'库特莉亚芙卡', kud_qiaoshou:'巧手', diff --git a/character/extra.js b/character/extra.js index e59893b73..804f8c995 100755 --- a/character/extra.js +++ b/character/extra.js @@ -843,7 +843,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return false; }, delay:false, - locked:true, + locked:false, filterTarget:function(card,player,target){ var event=_status.event,evt=event; if(event._backup) evt=event._backup; @@ -984,6 +984,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:'enterGame', }, forced:true, + locked:false, filter:function(event,player){ return event.name!='phase'||game.phaseNumber==0; }, @@ -4273,11 +4274,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:'judge'}, direct:true, filter:function(event,player){ - return player.countCards('he')>0&&player.hasMark('renjie'); + return player.countCards('hes')>0&&player.hasMark('renjie'); }, content:function(){ "step 0" - player.chooseCard('是否弃置一枚“忍”,并发动〖鬼才〗?','he',function(card){ + player.chooseCard('是否弃置一枚“忍”,并发动〖鬼才〗?','hes',function(card){ var player=_status.event.player; var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); if(mod2!='unchanged') return mod2; @@ -4774,6 +4775,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:'enterGame', }, forced:true, + locked:false, filter:function(event,player){ return (event.name!='phase'||game.phaseNumber==0); }, @@ -4807,8 +4809,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gains.removeArray(player.getCards('h')); if(!pushs.length||pushs.length!=gains.length) return; player.addToExpansion(pushs,player,'giveAuto').gaintag.add('qixing'); - game.log(player,'将',pushs,'作为“星”置于武将牌上'); - player.gain(gains,'gain2'); + //game.log(player,'将',pushs,'作为“星”置于武将牌上'); + player.gain(gains,'draw'); } }, intro:{ @@ -4873,7 +4875,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('qixing2'); player.addToExpansion(pushs,player,'giveAuto').gaintag.add('qixing'); game.log(player,'将',pushs,'作为“星”置于武将牌上'); - player.gain(gains,'gain2'); + player.gain(gains,'draw'); } }, }, @@ -6829,7 +6831,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shen_machao:'神马超', shouli:'狩骊', shouli_backup:'狩骊', - shouli_info:'锁定技。①游戏开始时,你令场上所有角色从你的下家起,依次使用牌堆中的一张不为赠物的坐骑牌。②你可以将场上的一张进攻坐骑牌当做【杀】(无任何次数限制),防御坐骑牌当做【闪】使用或打出。若此坐骑牌的拥有者不为你,则其非锁定技于本回合内失效。且当你或其于本回合内受到伤害时,此伤害+1且改为雷属性。', + shouli_info:'①游戏开始时,你令场上所有角色从你的下家起,依次使用牌堆中的一张不为赠物的坐骑牌。②你可以将场上的一张进攻坐骑牌当做【杀】(无任何次数限制),防御坐骑牌当做【闪】使用或打出。若此坐骑牌的拥有者不为你,则其非锁定技于本回合内失效。且当你或其于本回合内受到伤害时,此伤害+1且改为雷属性。', hengwu:'横骛', hengwu_info:'当你使用或打出有花色的牌时,若你的手牌区内没有与此牌花色相同的牌,则你可以摸X张牌(X为场上装备区内花色与此牌相同的牌数)。', hengwu_append:'棘手,怀念,摧毁!', diff --git a/character/mobile.js b/character/mobile.js index ff563f484..4ed30febf 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -97,7 +97,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_kongrong:['male','qun',3,['xinlirang','xinmingshi']], zhouchu:['male','wu',4,['xianghai','rechuhai']], wangfuzhaolei:['male','shu',4,['xunyi']], - wangling:['male','wei',4,['xingqi','xinzifu','mibei']], + wangling:['male','wei',4,['xingqi','xinzifu','mibei'],['clan:太原王氏']], zhouqun:['male','shu',3,['tiansuan']], re_zhurong:['female','shu',4,['juxiang','relieren']], re_jiangwei:['male','shu',4,['retiaoxin','zhiji']], @@ -172,7 +172,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_yuanshu:['male','qun',4,['xinyongsi','yjixi']], shenpei:["male","qun","2/3",["shouye","liezhi"]], - re_wangyun:['male','qun',3,['relianji','remoucheng']], + re_wangyun:['male','qun',3,['relianji','remoucheng'],['clan:太原王氏']], re_baosanniang:['female','shu',3,['meiyong','rexushen','rezhennan']], @@ -793,6 +793,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:3, trigger:{global:'phaseBefore',player:'enterGame'}, forced:true, + locked:false, global:'spdaming_give', filter:function(event,player){ return (event.name!='phase'||game.phaseNumber==0); @@ -3106,7 +3107,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{expose:10}, }, houfeng:{ - audio:2, + audio:3, trigger:{global:'phaseUseBegin'}, logTarget:'player', round:1, @@ -3145,7 +3146,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, //手杀皇甫嵩 spzhengjun:{ - audio:2, + audio:3, trigger:{player:'phaseUseBegin'}, direct:true, filter:function(event,player){ @@ -6020,11 +6021,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'phaseJieshuBegin'}, prompt2:'展示牌堆顶的三张牌,并可以根据其中红色牌的数量,令一名其他角色获得一种效果', - check:function(event,player){ - return game.hasPlayer(function(current){ - return current!=player&&get.attitude(player,current)>0; - }); - }, content:function(){ 'step 0' var cards=get.cards(3); @@ -6802,7 +6798,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, //糜夫人 xinguixiu:{ - audio:'spguixiu', + audio:2, trigger:{player:'phaseJieshuBegin'}, forced:true, filter:function(event,player){ @@ -6814,7 +6810,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, qingyu:{ - audio:2, + audio:3, dutySkill:true, trigger:{player:'damageBegin2'}, forced:true, @@ -10925,7 +10921,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' var eff=0; var target=game.findPlayer(function(current){ - return current!=player&&!current.hasMark('spshanxi'); + return current!=player&¤t.hasMark('spshanxi'); }); if(target) eff=(-get.attitude(player,target)/Math.sqrt(Math.max(1,target.hp))); player.chooseTarget(get.prompt('spshanxi'),'令一名其他角色获得“檄”',function(card,player,target){ @@ -12199,7 +12195,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else player.discardPlayerCard('he',target,true); 'step 2' player.chooseBool('是否令'+get.translation(target)+'获得一张【杀】?').set('ai',function(){ - var evt=status.event.getParent(); + var evt=_status.event.getParent(); return get.attitude(evt.player,evt.target)>0; }); 'step 3' @@ -12233,6 +12229,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'damageEnd'}, forced:true, popup:false, + charlotte:true, filter:function(event,player){ return event.card&&event.card.beizhu; }, @@ -15687,34 +15684,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, "xinfu_qianchong":{ audio:3, - mod:{ - targetInRange:function(card,player,target){ - if(player.storage.xinfu_qianchong.contains(get.type(card,'trick'))){ - return true; - } - }, - cardUsable:function(card,player,num){ - if(player.storage.xinfu_qianchong.contains(get.type(card,'trick'))) return Infinity; - }, - }, - group:["xinfu_qianchong_clear","qc_weimu","qc_mingzhe"], + group:["qc_weimu","qc_mingzhe"], subSkill:{ - clear:{ - sub:true, - forced:true, - silent:true, - popup:false, - trigger:{ - player:"phaseAfter", - }, - content:function(){ - player.storage.xinfu_qianchong=[]; + effect:{ + charlotte:true, + onremove:true, + mod:{ + cardUsable:function(card,player){ + var type=get.type2(card); + if(player.getStorage('xinfu_qianchong_effect').contains(type)) return Infinity; + }, + targetInRange:function(card,player){ + var type=get.type2(card); + if(player.getStorage('xinfu_qianchong_effect').contains(type)) return Infinity; + }, }, }, }, - init:function(event,player){ - event.storage[player]=[]; - }, trigger:{ player:"phaseUseBegin", }, @@ -15731,20 +15717,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' var list=['basic','trick','equip','cancel2']; - for(var i=0;i1){ player.chooseControl(list).set('ai',function(){ return list[0]; - }).set('prompt',get.prompt('xinfu_qianchong')).set('prompt2',get.translation('xinfu_qianchong_info')); + }).set('prompt',get.prompt('xinfu_qianchong')).set('prompt2','你可以选择一种类别的牌,然后你本回合内使用该类别的牌时没有次数和距离限制。'); } else event.finish(); 'step 1' if(result.control&&result.control!='cancel2'){ player.logSkill('xinfu_qianchong'); - player.storage.xinfu_qianchong.add(result.control); - var str=get.translation(result.control)+'牌'; + var type=result.control; + player.addTempSkill('xinfu_qianchong_effect'); + player.markAuto('xinfu_qianchong_effect',[type]); + var str=get.translation(type)+'牌'; game.log(player,'声明了','#y'+str); player.popup(str,'thunder'); } @@ -15826,6 +15812,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ var num=0; player.getHistory('lose',function(evt){ + var evt2=evt.getParent(); + if(evt2.name=='useCard'&&evt2.player==player&&get.type(evt2.card,null,false)=='equip') return; if(evt.cards2) num+=evt.cards2.length; }); return num>0&&num<=player.hp @@ -15835,6 +15823,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' var num=0; player.getHistory('lose',function(evt){ + var evt2=evt.getParent(); + if(evt2.name=='useCard'&&evt2.player==player&&get.type(evt2.card,null,false)=='equip') return; if(evt.cards2) num+=evt.cards2.length; }); if(num>0){ @@ -15844,7 +15834,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, "rw_bagua_skill":{ inherit:"bagua_skill", - audio:"bagua_skill", + audio:true, content:function(){ "step 0" player.judge('rewrite_bagua',function(card){return (get.suit(card)!='spade')?1.5:-0.5}).judge2=function(result){ @@ -15860,7 +15850,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, "rw_baiyin_skill":{ inherit:"baiyin_skill", - audio:"baiyin_skill", + audio:true, }, "rw_lanyinjia":{ inherit:"lanyinjia", @@ -15894,7 +15884,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, "rw_renwang_skill":{ inherit:"renwang_skill", - audio:"renwang_skill", + audio:true, filter:function(event,player){ if(player.hasSkillTag('unequip2')) return false; if(event.player.hasSkillTag('unequip',false,{ @@ -15924,14 +15914,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, "rw_tengjia1":{ inherit:"tengjia1", - audio:"tengjia1", + audio:true, }, "rw_tengjia2":{ inherit:"tengjia2", - audio:"tengjia1", + audio:true, }, "rw_tengjia3":{ - audio:"tengjia1", + audio:"rw_tengjia1", inherit:"rw_minguangkai_link", ai:{ effect:{ @@ -15945,7 +15935,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, rw_tengjia4:{ inherit:"tengjia3", - audio:"tengjia1", + audio:"rw_tengjia1", }, xinfu_pingcai:{ subSkill:{backup:{}}, @@ -17623,6 +17613,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gnjinfan:{ trigger:{player:'phaseDiscardBegin'}, direct:true, + locked:false, audio:2, filter:function(event,player){ var list=[]; @@ -17852,7 +17843,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yangbiao:['yangbiao','dc_yangbiao','jsrg_yangbiao'], qiaozhou:['yj_qiaozhou','qiaozhou'], sunhanhua:['dc_qiaozhou','sunhanhua'], - sp_duyu:['sp_duyu','pk_sp_duyu'], + duyu:['duyu','sp_duyu','pk_sp_duyu'], kongrong:['sp_kongrong','jsrg_kongrong','kongrong'], }, translate:{ @@ -17899,7 +17890,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "qc_mingzhe":"明哲", "qc_mingzhe_info":"", "xinfu_shangjian":"尚俭", - "xinfu_shangjian_info":"锁定技。一名角色的结束阶段开始时,若你于此回合内失去了X张或更少的牌,则你摸等量的牌(X为你的体力值)。", + "xinfu_shangjian_info":"锁定技。一名角色的结束阶段开始时,若你于此回合内不因使用装备牌而失去了X张或更少的牌,则你摸等量的牌(X为你的体力值)。", "rw_bagua_skill":"先天八卦阵", "rw_bagua_skill_info":"当你需要使用或打出一张【闪】时,你可以进行判定,若判定结果不为黑桃,视为你使用或打出了一张【闪】。", "rw_baiyin_skill":"照月狮子盔", @@ -18670,7 +18661,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tongduo_info:'每回合限一次。当你成为其他角色使用牌的唯一目标后,你可令一名角色重铸一张牌。', xin_jushou:'手杀沮授', xinjianying:'渐营', - xinjianying_info:'锁定技。①当你于出牌阶段内使用与此阶段你使用的上一张牌点数或花色相同的牌时,你可以摸一张牌。②出牌阶段限一次,你可以将一张牌当做任意基本牌使用(不计入次数限制)。若你于此阶段内使用的上一张牌有花色,则此牌的花色视为上一张牌的花色。', + xinjianying_info:'①当你于出牌阶段内使用与此阶段你使用的上一张牌点数或花色相同的牌时,你可以摸一张牌。②出牌阶段限一次,你可以将一张牌当做任意基本牌使用(不计入次数限制)。若你于此阶段内使用的上一张牌有花色,则此牌的花色视为上一张牌的花色。', re_xunyu:"手杀荀彧", rejieming:"节命", rejieming_info:"当你受到1点伤害后,你可以令一名角色摸两张牌。然后若其手牌数小于体力上限,则你摸一张牌。", @@ -18688,7 +18679,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chengye_append:'
  • 《诗经》:伤害类锦囊牌
  • 《尚书》:基本牌
  • 《仪礼》:无懈可击
  • 《易经》:无中生有
  • 《乐经》:乐不思蜀
  • 《春秋》:装备牌', buxu:'补叙', buxu_backup:'补叙', - buxu_info:'出牌阶段,若你的“六经”中有空缺的位置,则你可以弃置X+1张牌并选择一种空缺的“六经”。系统从牌堆或弃牌堆中检索一张对应的牌,然后你将此牌置于你武将牌上,填补“六经”的对应位置。', + buxu_info:'出牌阶段,若你的“六经”中有空缺的位置,则你可以弃置X+1张牌并选择一种空缺的“六经”(X为你本阶段内发动过〖补叙〗的次数)。系统从牌堆或弃牌堆中检索一张对应的牌,然后你将此牌置于你武将牌上,填补“六经”的对应位置。', re_dianwei:"手杀典韦", liuye:'手杀刘晔', sp_caosong:'手杀曹嵩', diff --git a/character/offline.js b/character/offline.js index 6da4eb4b7..63f962241 100644 --- a/character/offline.js +++ b/character/offline.js @@ -28,7 +28,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrg_kongrong:['male','qun',3,['jsrglirang','jsrgzhengyi']], jsrg_zhujun:['male','qun',4,['jsrgfendi','jsrgjuxiang']], jsrg_liubei:['male','qun',4,['jsrgjishan','jsrgzhenqiao']], - jsrg_wangyun:['male','qun',3,['jsrgshelun','jsrgfayi']], + jsrg_wangyun:['male','qun',3,['jsrgshelun','jsrgfayi'],['clan:太原王氏']], jsrg_liuyan:['male','qun',3,['xinfu_limu','jsrgtushe','jsrgtongjue'],['zhu']], jsrg_caocao:['male','qun',4,['jsrgzhenglve','jsrghuilie']], jsrg_nanhualaoxian:['male','qun',3,['jsrgshoushu','jsrgxundao','jsrglinghua']], @@ -62,7 +62,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ pe_sunchen:['male','wu',4,['zyshilu','zyxiongnve']], pe_mengda:['male','wei',4,['qiuan','liangfan']], pe_zhonghui:['male','wei',4,['zyquanji','zypaiyi']], - pe_wangyun:['male','qun',3,['zylianji','zymoucheng']], + pe_wangyun:['male','qun',3,['zylianji','zymoucheng'],['clan:太原王氏']], shen_jiaxu:['male','shen',3,['weimu','zybishi','zyjianbing'],['qun']], yj_zhenji:['female','wei',3,['yjluoshen','qingguo']], yj_jiaxu:['male','wei',3,['yjzhenlve','yjjianshu','yjyongdi']], @@ -242,7 +242,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, sbpingjian:{ - trigger:{player:['useSkillAfter','logSkill']}, + trigger:{player:['useSkill','logSkillBegin']}, forced:true, filter:function(event,player){ var skill=event.sourceSkill||event.skill; @@ -266,19 +266,43 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ lib.skill.sbyingmen.removeVisitors(result.links,player); game.log(player,'移去了','#y'+get.translation(result.links[0])); - if(event.drawers.contains(result.links[0])) player.draw(); + if(event.drawers.contains(result.links[0])){ + player.addTempSkill('sbpingjian_draw'); + player.storage.sbpingjian_draw.push(trigger.skill); + } } }, group:'sbpingjian_trigger', subSkill:{ + draw:{ + charlotte:true, + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + }, + onremove:true, + trigger:{player:['useSkillAfter','logSkill']}, + forced:true, + popup:false, + filter:function(event,player){ + return player.getStorage('sbpingjian_draw').contains(event.skill); + }, + content:function(){ + player.storage.sbpingjian_draw.remove(trigger.skill); + player.draw(); + if(!player.storage.sbpingjian_draw.length) player.removeSkill('sbpingjian_draw'); + }, + }, trigger:{ trigger:{player:'triggerInvisible'}, forced:true, forceDie:true, popup:false, + charlotte:true, priority:10, filter:function(event,player){ if(event.revealed) return false; + var info=get.info(event.skill); + if(info.charlotte) return false; var skills=lib.skill.sbyingmen.getSkills(player.getStorage('sbyingmen'),player); game.expandSkills(skills); return skills.contains(event.skill); @@ -1325,17 +1349,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrgrangjie:{ audio:'rangjie', trigger:{player:'damageEnd'}, - forced:true, - locked:false, - direct:true, filter:function(event,player){ return player.canMoveCard(); }, + check:function(event,player){ + return player.canMoveCard(true); + }, content:function(){ 'step 0' event.num=trigger.num; 'step 1' - player.logSkill('jsrgrangjie'); event.num--; if(player.canMoveCard()) player.moveCard(true); 'step 2' @@ -1368,7 +1391,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ player.gain(result.links,'gain2'); } - if(event.num>0) event.goto(1); + 'step 4' + if(event.num>0){ + player.chooseBool(get.prompt2('jsrgrangjie')).set('ai',()=>_status.event.bool).set('bool',lib.skill.jsrgrangjie.check(trigger,player)); + } + else event.finish(); + 'step 5' + if(result.bool){ + player.logSkill('jsrgrangjie'); + event.goto(1); + } }, ai:{ maixie:true, @@ -2895,7 +2927,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{global:['damageBegin1','damageBegin3']}, filter:function(event,player,name){ - return name=='damageBegin1'&&player.inRange(event.source)||name=='damageBegin3'&&player.inRange(event.player); + return name=='damageBegin1'&&event.source&&event.source.isIn()&&player.inRange(event.source)||name=='damageBegin3'&&event.player&&event.player.isIn()&&player.inRange(event.player); }, direct:true, content:function(){ @@ -3338,6 +3370,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ psliaozou:{ audio:2, enable:'phaseUse', + locked:false, filter:function(event,player){ return !player.hasSkill('psliaozou_blocker',null,null,false); }, @@ -4225,6 +4258,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterCard:true, selectCard:-1, position:'h', + locked:false, filter:function(event,player){ if(player.hasSkill('pssheji_used')) return false; var hs=player.getCards('h'); @@ -5063,7 +5097,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.gainMaxHp(true); target.recover(); var mode=get.mode(); - if(mode=='identity'||(mode=='versus'&&_status.mode=='four')){ + if(mode=='identity'||(mode=='versus'&&_status.mode=='four')||mode=='doudizhu'){ if(target.name&&lib.character[target.name]){ var skills=lib.character[target.name][3]; target.storage.zhuSkill_yjyongdi=[]; @@ -5410,6 +5444,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:'phaseUse', usable:1, + locked:false, filter:function(event,player){ for(var card of ui.discardPile.childNodes){ if(get.type(card)=='equip') return true; @@ -5474,6 +5509,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ skillAnimation:true, animationColor:'soil', filterTarget:true, + limited:true, selectTarget:()=>[1,game.roundNumber], contentBefore:function(){ 'step 0' @@ -6660,6 +6696,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spyicong:{ trigger:{player:'phaseDiscardEnd'}, direct:true, + locked:false, filter:function(event,player){ return player.countCards('he')>0; }, @@ -6697,6 +6734,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sptuji:{ trigger:{player:'phaseZhunbeiBegin'}, forced:true, + locked:false, filter:function(event,player){ return player.getExpansions('spyicong').length>0; }, @@ -6924,6 +6962,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'useCardToPlayered'}, silent:true, firstDo:true, + locked:false, content:function(){ trigger.target.addTempSkill('chixin3'); } @@ -6955,7 +6994,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, } }, - chixin3:{}, + chixin3:{charlotte:true}, suiren:{ trigger:{player:'phaseZhunbeiBegin'}, skillAnimation:true, @@ -7515,6 +7554,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{global:'phaseJieshuBegin'}, forced:true, + locked:false, filter:function(event,player){ return player.hasSkill('fenyong2')&&event.player.isAlive(); }, @@ -7573,6 +7613,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, trigger:{player:'loseEnd'}, forced:true, + locked:false, filter:function(event,player){ return player._mouduan_mark&&player._mouduan_mark.name=='武'&&player.countCards('h')<=2; }, @@ -7680,7 +7721,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, dahe:{ - audio:1, + audio:true, enable:'phaseUse', usable:1, filterTarget:function(card,player,target){ @@ -8239,8 +8280,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yjyongdi_info:'限定技。准备阶段,你可以令一名男性角色加1点体力上限并回复1点体力,然后若其武将牌上有主公技且其不为主公,其获得此主公技。', yj_zhugedan:'用间诸葛诞', yj_zhugedan_ab:'诸葛诞', - yj_zhenji:'用间甄姬', - yj_zhenji_ab:'甄姬', + yj_zhenji:'用间甄宓', + yj_zhenji_ab:'甄宓', yjluoshen:'洛神', yjluoshen_info:'准备阶段,你可以判定并获得判定牌,且可重复此流程直到结果的颜色不同。', //线下E系列 一战成名 战役篇官盗 @@ -8430,7 +8471,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrgzhaohan:'昭汉', jsrgzhaohan_info:'准备阶段,若本局游戏:未洗过牌,你回复1点体力;洗过牌,你失去1点体力。', jsrgrangjie:'让节', - jsrgrangjie_info:'当你受到1点伤害后,你移动场上的一张牌,然后你可以于弃牌堆中选择获得一张本回合进入弃牌堆且与此牌花色相同的牌。', + jsrgrangjie_info:'当你受到1点伤害后,你可以移动场上的一张牌,然后你可以于弃牌堆中选择获得一张本回合进入弃牌堆且与此牌花色相同的牌。', jsrgyizheng:'义争', jsrgyizheng_info:'出牌阶段限一次。你可以与一名手牌数大于你的角色拼点。若你:赢,其跳过下一个摸牌阶段;没赢,其可以对你造成至多2点伤害。', jsrg_kongrong:'起孔融', @@ -8483,7 +8524,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sbyingmen:'盈门', sbyingmen_info:'锁定技。①游戏开始时,你将武将牌堆中随机四张武将牌置于你的武将牌上,称为“访客”。②回合开始时,若你的“访客”数小于4,你随机从武将牌堆中将“访客”补至四张。', sbpingjian:'评鉴', - sbpingjian_info:'你可以于满足你“访客”上的一个无技能标签或仅有锁定技标签的技能条件的时机发动此技能。你发动的技能结算结束后,若此技能位于你的“访客”中,则你选择移去一张“访客”。若移去的是本次发动技能的“访客”,你摸一张牌。', + sbpingjian_info:'你可以于满足你“访客”上的一个无技能标签或仅有锁定技标签的技能条件的时机发动此技能,然后你选择移去一张“访客”。若移去的是本次发动技能的“访客”,则你于此技能结算结束时摸一张牌。', offline_star:'桌游志·SP', offline_sticker:'桌游志·贴纸', diff --git a/character/old.js b/character/old.js index bf4ad85cb..8ca79ef0d 100755 --- a/character/old.js +++ b/character/old.js @@ -45,7 +45,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_yuanshu:['male','qun',4,['wangzun','tongji']], pangde:['male','qun',4,['mashu','mengjin']], ol_huaxiong:["male","qun",6,["new_reyaowu"]], - old_wangyun:['male','qun',4,['wylianji','moucheng']], + old_wangyun:['male','qun',4,['wylianji','moucheng'],['clan:太原王氏']], xiaoqiao:['female','wu',3,['tianxiang','hongyan']], weiyan:['male','shu',4,['kuanggu']], xiahouyuan:['male','wei',4,['shensu']], @@ -567,6 +567,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ silent:true, popup:false, firstDo:true, + charlotte:true, filter:function(event,player){ return event.skill&&event.skill.indexOf('old_guhuo_')==0; }, diff --git a/character/refresh.js b/character/refresh.js index ff74c49eb..0e9b90794 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -12,21 +12,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_yijiang1:['xin_wuguotai','xin_gaoshun','dc_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua','dc_xushu','re_chengong'], refresh_yijiang2:['re_madai','re_wangyi','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','dc_bulianshi','xin_liubiao','re_xunyou','re_guanzhang'], 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','dc_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','re_zhangsong'], refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi','re_liuchen','re_zhuzhi'], refresh_yijiang6:['re_guohuanghou','re_sundeng'], - refresh_xinghuo:['re_duji','dc_gongsunzan','re_sp_taishici','re_caiyong','re_mazhong','re_wenpin'], + refresh_xinghuo:['re_duji','dc_gongsunzan','re_sp_taishici','re_caiyong','re_mazhong','re_wenpin','re_jsp_huangyueying'], }, }, connect:true, character:{ + re_jsp_huangyueying:['female','qun',3,['rejiqiao','relinglong']], + re_zhangsong:['male','shu',3,['qiangzhi','rexiantu']], re_zhuzhi:['male','wu',4,['reanguo']], dc_caozhi:['male','wei',3,['reluoying','dcjiushi']], ol_huangzhong:['male','shu',4,['xinliegong','remoshi']], re_wenpin:['male','wei',5,['rezhenwei'],['unseen']], re_guanzhang:['male','shu',4,['fuhun','retongxin']], re_mazhong:['male','shu',4,['refuman']], - dc_chenqun:['male','wei',3,['repindi','refaen']], + dc_chenqun:['male','wei',3,['repindi','dcfaen']], re_sundeng:['male','wu',4,['rekuangbi']], re_caiyong:['male','qun',3,['rebizhuan','retongbo']], re_chengong:['male','qun',3,['remingce','zhichi']], @@ -38,7 +40,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_liufeng:['male','shu',4,['rexiansi']], ol_xunyu:['male','wei',3,['quhu','oljieming'],['clan:颍川荀氏']], re_liuchen:['male','shu',4,['rezhanjue','reqinwang'],['zhu']], - dc_gongsunzan:['male','qun',4,['reyicong','dcqiaomeng']], + dc_gongsunzan:['male','qun',4,['dcyicong','dcqiaomeng']], re_duji:['male','wei',3,['reandong','reyingshi']], re_jushou:['male','qun',3,['dcjianying','dcshibei']], re_zhanghe:['male','wei',4,['reqiaobian']], @@ -143,6 +145,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_jianyong:['male','shu',3,['reqiaoshui','jyzongshi']], }, characterIntro:{ + jsp_huangyueying:'荆州沔南白水人,沔阳名士黄承彦之女,诸葛亮之妻,诸葛瞻之母。容貌甚丑,而有奇才:上通天文,下察地理,韬略近于诸书无所不晓,诸葛亮在南阳闻其贤而迎娶。', re_gongsunzan:'群雄之一。出身贵族,因母地位卑贱,只当了郡中小吏。他貌美,声音洪亮,机智善辩。后随卢植于缑氏山中读书,粗通经传。', re_lidian:'字曼成,曹操麾下将领。李典深明大义,不与人争功,崇尚学习与高贵儒雅,尊重博学之士,在军中被称为长者。李典有长者之风,官至破虏将军,三十六岁去世。魏文帝曹丕继位后追谥号为愍侯。', sunben:' ', @@ -158,6 +161,194 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_guohuai:['xiahouyuan','zhanghe'], }, skill:{ + //SP黄月英 + rejiqiao:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.chooseToDiscard(get.prompt2('jiqiao'),[1,player.countCards('he')],'he').set('ai',function(card){ + if(card.name=='bagua') return 10; + return 7-get.value(card); + }).set('logSkill','rejiqiao'); + 'step 1' + if(result.bool){ + var num=result.cards.length; + for(var i of result.cards){ + if(get.type(i,false)=='equip') num++; + } + event.cards=game.cardsGotoOrdering(get.cards(num)).cards; + player.showCards(event.cards); + } + else{ + event.finish(); + } + 'step 2' + var gained=[]; + var tothrow=[]; + for(var i=0;iget.subtype(i)=='equip5')) return false; + } + var skills=player.additionalSkills['relinglong']; + return skills&&skills.length&&player.getEquip(5)||!(skills&&skills.length)&&!player.getEquip(5); + }, + content:function(){ + player.removeAdditionalSkill('relinglong'); + if(!player.getEquip(5)){ + player.addAdditionalSkill('relinglong',['reqicai']); + } + }, + group:['linglong_bagua','relinglong_directhit'], + mod:{ + maxHandcard:function(player,num){ + if(player.getEquip(3)||player.getEquip(4)||player.getEquip(6)) return; + return num+2; + }, + }, + subSkill:{ + directhit:{ + audio:'relinglong', + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + if(event.card.name!='sha'&&get.type(event.card,false)!='trick') return false; + for(var i=2;i<=6;i++){ + if(player.getEquip(i)) return false; + } + return true; + }, + content:function(){ + trigger.directHit.addArray(game.players); + game.log(trigger.card,'不可被响应'); + }, + ai:{ + directHit_ai:true, + skillTagFilter:function(player,tag,arg){ + if(!arg||!arg.card||!arg.target||(arg.card.name!='sha'&&get.type(arg.card,false)!='trick')) return false; + for(var i=2;i<=6;i++){ + if(player.getEquip(i)) return false; + } + return true; + }, + }, + } + } + }, + //张松 + rexiantu:{ + audio:2, + trigger:{global:'phaseUseBegin'}, + filter:function(event,player){ + return event.player!=player; + }, + logTarget:'player', + check:function(event,player){ + if(get.attitude(player,event.player)<5) return false; + if(player.maxHp-player.hp>=2) return false; + if(player.hp==1) return false; + if(player.hp==2&&player.countCards('h')<2) return false; + if(event.player.countCards('h')>=event.player.hp) return false; + return true; + }, + content:function(){ + 'step 0' + player.draw(2); + 'step 1' + var cards=player.getCards('he'); + if(!cards.length) event.finish(); + else if(cards.length<=2) event._result={cards:cards}; + else player.chooseCard(2,'he',true,'交给'+get.translation(trigger.player)+'两张牌').set('ai',function(card){ + if(ui.selected.cards.length&&card.name==ui.selected.cards[0].name) return -1; + if(get.tag(card,'damage')) return 1; + if(get.type(card)=='equip') return 1; + return 0; + }); + 'step 2' + player.give(result.cards,trigger.player); + trigger.player.addSkill('rexiantu_check'); + trigger.player.markAuto('rexiantu_check',[player]); + }, + ai:{ + threaten:1.1, + expose:0.3 + }, + subSkill:{ + check:{ + charlotte:true, + trigger:{player:'phaseUseEnd'}, + forced:true, + popup:false, + onremove:true, + filter:function(event,player){ + return !player.getHistory('sourceDamage',evt=>{ + return evt.getParent('phaseUse')==event; + }).length; + }, + content:function(){ + var targets=player.getStorage('rexiantu_check'); + targets.sortBySeat(); + for(var i of targets){ + if(i.isIn()){ + i.loseHp(); + } + } + player.removeSkill('rexiantu_check'); + } + } + } + }, + //新服公孙瓒 + dcyicong:{ + trigger:{ + player:["changeHp"], + }, + audio:2, + forced:true, + filter:function(event,player){ + return get.sgn(player.getDamagedHp()-1.5)!=get.sgn(player.getDamagedHp()-1.5+event.num); + }, + content:function (){}, + mod:{ + globalFrom:function(from,to,current){ + return current-1; + }, + globalTo:function(from,to,current){ + if(to.getDamagedHp()>=2) return current+1; + }, + }, + ai:{ + threaten:0.8 + } + }, //朱治 reanguo:{ audio:2, @@ -3234,6 +3425,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:'phaseUse', group:'rejiaozhao_base', + locked:false, mod:{ targetEnabled:function(card,player,target){ if(player==target&&card.storage&&card.storage.rejiaozhao) return false; @@ -5220,6 +5412,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audioname:['dc_chenqun'], trigger:{global:['turnOverAfter','linkAfter']}, logTarget:'player', + filter:function(event,player){ + if(event.name=='link') return event.player.isLinked(); + return true; + }, + check:function(event,player){ + return get.attitude(player,event.player)>0; + }, + content:function(){ + trigger.player.draw(); + }, + }, + dcfaen:{ + audio:'refaen', + audioname:['dc_chenqun'], + trigger:{global:['turnOverAfter','linkAfter']}, + logTarget:'player', filter:function(event,player){ if(event.name=='link') return event.player.isLinked(); return !event.player.isTurnedOver(); @@ -5311,6 +5519,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return false; }, audio:'lihuo', + locked:false, prompt2:function(event){ return '将'+get.translation(event.card)+'改为火属性'; }, @@ -9150,15 +9359,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, olxueyi:{ audio:2, - trigger:{global:'phaseBefore'}, + trigger:{global:'phaseBefore',player:'enterGame'}, forced:true, zhuSkill:true, unique:true, filter:function(event,player){ - return !player.storage.olxueyi_inited&&player.hasZhuSkill('olxueyi'); + return (event.name!='phase'||game.phaseNumber==0)&&player.hasZhuSkill('olxueyi'); }, content:function(){ - player.storage.olxueyi_inited=true; + // player.storage.olxueyi_inited=true; var num=game.countPlayer(function(current){ return current.group=='qun'; }) @@ -9596,6 +9805,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } },player,list); }, + mark:true, intro:{ onunmark:function(storage,player){ _status.characterlist.addArray(storage.character); @@ -9871,6 +10081,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, silent:true, popup:false, + charlotte:true, firstDo:true, filter:function(event,player){ return event.skill&&event.skill.indexOf('reguhuo_')==0; @@ -10774,7 +10985,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, locked:false, audio:"wusheng", - audioname:['re_guanyu','guanzhang','jsp_guanyu','guansuo','re_guanzhang'], + audioname:['re_guanyu','guanzhang','jsp_guanyu','guansuo','re_guanzhang','dc_jsp_guanyu'], enable:["chooseToRespond","chooseToUse"], filterCard:function(card,player){ if(get.zhu(player,'shouyue')) return true; @@ -11069,7 +11280,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, onremove:true, }, - "new_reqingnang":{ + new_reqingnang:{ subSkill:{ off:{ sub:true, @@ -11078,7 +11289,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sub:true, }, }, - audio:"qingnang", + audio:2, enable:"phaseUse", filterCard:true, check:function (card){ @@ -13267,7 +13478,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.finish(); } else if(get.mode()=='guozhan'){ - player.chooseBool('是否将'+get.translation(card)+'作为【田】置于武将牌上?').set('frequentSkill','retuntian').ai=function(){ + player.chooseBool('是否将'+get.translation(card)+'作为“田”置于武将牌上?').set('frequentSkill','retuntian').ai=function(){ return true; }; } @@ -13868,7 +14079,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_baosanniang:'手杀鲍三娘', retuntian:'屯田', rebeige:'悲歌', - retuntian_info:'当你于回合外失去牌时,你可以进行一次判定。若判定结果为♥,你获得此判定牌。否则你将此牌置于你的武将牌上,称之为【田】。锁定技,你计算与其他角色的距离时-X(X为你武将牌上【田】的数目)', + retuntian_info:'①当你于回合外失去牌后,你可以判定。若判定结果为♥,你获得此判定牌。否则你将此牌置于你的武将牌上,称为“田”。②你计算与其他角色的距离时-X(X为你武将牌上“田”的数目)。', rebeige_info:'当有角色受到【杀】造成的伤害后,你可以弃一张牌,并令其进行一次判定,若判定结果为:♥该角色回复X点体力(X为伤害点数);♦︎该角色摸三张牌;♣伤害来源弃两张牌;♠伤害来源将其武将牌翻面', re_liushan:'手杀刘禅', re_sunben:'界孙笨', @@ -14004,8 +14215,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_dengai:'界邓艾', oltuntian:'屯田', olzaoxian:'凿险', - oltuntian_info:'当你于回合外失去牌后,或于回合内因弃置而失去【杀】后,你可以进行判定。若判定结果不为♥,则你将此牌置于你的武将牌上,称之为【田】。锁定技,你计算与其他角色的距离时-X(X为你武将牌上【田】的数目)', - olzaoxian_info:'觉醒技,准备阶段,若你武将牌上【田】的数量达到3张或更多,则你减1点体力上限,并获得技能〖急袭〗。你于当前回合结束后进行一个额外的回合。', + oltuntian_info:'①当你于回合外失去牌后,或于回合内因弃置而失去【杀】后,你可以判定。若判定结果不为♥,则你将此牌置于你的武将牌上,称为“田”。②你计算与其他角色的距离时-X(X为你武将牌上“田”的数目)。', + olzaoxian_info:'觉醒技,准备阶段,若你武将牌上“田”的数量达到3张或更多,则你减1点体力上限,并获得技能〖急袭〗。你于当前回合结束后进行一个额外的回合。', re_sunxiu:'界孙休', re_caoxiu:'界曹休', xin_lingtong:'界凌统', @@ -14070,7 +14281,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ redingpin:'定品', redingpin_info:'出牌阶段,你可以弃置一张本回合未使用过/弃置过的类型的牌并选择一名角色。其进行判定,若结果为:黑色,其摸X张牌(X为其体力值且至多为3)且本回合内不能再成为〖定品〗的目标;红桃,你令此次弃置的牌不计入〖定品〗弃置牌合法性的检测;方片,你将武将牌翻面。', refaen:'法恩', - refaen_info:'一名角色翻至正面或横置后,你可令其摸一张牌。', + refaen_info:'一名角色翻面或横置后,你可令其摸一张牌。', + dcfaen:'法恩', + dcfaen_info:'一名角色翻至正面或横置后,你可令其摸一张牌。', reshizhi:'矢志', reshizhi_info:'锁定技,若你的体力值为1,则你的【闪】视为【杀】,且当你使用对应的实体牌为一张【闪】的非转化普通杀造成伤害后,你回复1点体力。', re_guotufengji:'界郭图逢纪', @@ -14111,7 +14324,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rebingyi_info:'结束阶段,你可展示所有手牌。若这些牌:颜色均相同,则你可以令至多X名角色各摸一张牌(X为你的手牌数);点数均相同,则你摸一张牌。', re_jiaxu:'界贾诩', rewansha:'完杀', - rewansha_info:'锁定技。①你的回合内,不处于濒死状态的角色不能使用【桃】。②当有角色于你的回合内进入濒死状态时,你令其以外的所有其他角色的非锁定技失效直到此濒死状态结算结束。', + rewansha_info:'锁定技。①你的回合内,不处于濒死状态的其他角色不能使用【桃】。②当有角色于你的回合内进入濒死状态时,你令其以外的所有其他角色的非锁定技失效直到此濒死状态结算结束。', reluanwu:'乱武', reluanwu_info:'限定技,出牌阶段,你可令所有其他角色依次选择一项:①对距离最近(或之一)的角色使用一张【杀】;②失去1点体力。结算完成后,你可视为使用一张【杀】(无距离限制)。', reweimu:'帷幕', @@ -14280,6 +14493,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_zhuzhi:'界朱治', reanguo:'安国', reanguo_info:'出牌阶段限一次。你可以选择一名其他角色,若其:手牌数为全场最少,其摸一张牌;体力值为全场最低,其回复1点体力;装备区内牌数为全场最少,其随机使用一张装备牌。然后若该角色有未执行的效果且你满足条件,你执行之。若你与其执行了全部分支,你可以重铸任意张牌。', + dcyicong:'义从', + dcyicong_info:'锁定技。①你至其他角色的距离-1。②若你已损失的体力值不小于2,则其他角色至你的距离+1。', + re_zhangsong:'界张松', + rexiantu:'献图', + rexiantu_info:'其他角色的出牌阶段开始时,你可以摸两张牌,然后将两张牌交给该角色。然后此阶段结束时,若其于此阶段没有造成过伤害,你失去1点体力。', + re_jsp_huangyueying:'界SP黄月英', + re_jsp_huangyueying_ab:'黄月英', + rejiqiao:'机巧', + rejiqiao_info:'出牌阶段开始时,你可以弃置任意张牌,然后亮出牌堆顶X张牌(X为你以此法弃置的牌数与其中装备牌数之和),你获得其中所有非装备牌。', + relinglong:'玲珑', + relinglong_info:'锁定技。若你的装备区:没有防具牌,视为你装备【八卦阵】;没有坐骑牌,你的手牌上限+2;没有宝物牌,你视为拥有〖奇才〗;以上均满足:你使用的【杀】或普通锦囊牌不可被响应。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/sb.js b/character/sb.js index 3aa3c3148..78a4310d3 100644 --- a/character/sb.js +++ b/character/sb.js @@ -32,9 +32,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sb_diaochan:['female','qun',3,['sblijian','sbbiyue']], sb_yuanshao:['male','qun',4,['sbluanji','sbxueyi'],['zhu']], sb_pangtong:['male','shu',3,['sblianhuan','sbniepan']], - sb_sunce:['male','wu','2/4',['sbjiang','sbhunzi','sbzhiba'],['zhu','unseen']], - sb_daqiao:['female','wu',3,['sbguose','sbliuli'],['unseen']], - sb_liubiao:['male','qun',3,['sbzishou','sbzongshi'],['unseen']], + sb_sunce:['male','wu','2/4',['sbjiang','sbhunzi','sbzhiba'],['zhu']], + sb_daqiao:['female','wu',3,['sbguose','sbliuli']], + sb_liubiao:['male','qun',3,['sbzishou','sbzongshi']], }, characterSort:{ sb:{ @@ -202,13 +202,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.awakenSkill('sbzhiba'); - var num=game.countPlayer(current=>current.group=='wu'); - if(num>0) player.recover(num); - player.addMark('sbjiang',1,false); event.targets=game.filterPlayer(current=>{ return current.group=='wu'&¤t!=player; }).sortBySeat(_status.currentPhase); + var num=event.targets.length+1; + if(num>0) player.recover(num); + player.addMark('sbjiang',1,false); player.addTempSkill('sbzhiba_draw'); + if(!event.targets.length) event.finish(); 'step 1' var target=targets.shift(); target.damage('nosource'); @@ -292,6 +293,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return evtx.getParent(2)==evt&&get.suit(evtx.cards[0])=='heart'; }); }, + direct:true, content:function(){ 'step 0' var sourcex=trigger.log_event.getTrigger().player; @@ -304,7 +306,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ var target=result.targets[0]; player.line(target,'green'); - game.player.forEach(i=>i.removeSkill('sbliuli_dangxian')); + game.countPlayer(i=>i.removeSkill('sbliuli_dangxian')); target.addSkill('sbliuli_dangxian'); player.addTempSkill('sbliuli_used'); } @@ -395,14 +397,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ return game.countPlayer(current=>{ return current!=player; - }); + })>1; }, filterCard:true, selectCard:[1,Infinity], + position:'he', filterTarget:lib.filter.notMe, selectTarget:function(){ return ui.selected.cards.length+1; }, + filterOk:function(){ + return ui.selected.targets.length==ui.selected.cards.length+1; + }, multiline:true, content:function(){ var targetx=targets.slice().sortBySeat(target)[1]; @@ -636,8 +642,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', filterCard:{suit:'club'}, filter:function(event,player){ - var num=(player.getStat('skill').spjungong||0); - return (numlib.filter.canBeGained(card,target,player)); - if(hs.length) player.gain(hs.randomGet(),target,'giveAuto'); + if(hs.length){ + player.gain(hs.randomGet(),target,'giveAuto'); + if(!player.storage.sbxuanhuo) player.storage.sbxuanhuo={}; + player.storage.sbxuanhuo[target.playerid]=lib.skill.sbxuanhuo.getNum(target,'sbxuanhuo_rob')+1; + player.markSkill('sbxuanhuo'); + } if(targets.length>0) event.redo(); }, } @@ -964,9 +991,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.target=target; player.logSkill('sbenyuan',target); target.removeMark('sbxuanhuo_mark',target.countMark('sbxuanhuo_mark')); + game.players.forEach(current=>{ + var storage=current.storage.sbxuanhuo; + if(storage&&storage[target.playerid]) delete storage[target.playerid]; + if(storage&&get.is.empty(storage)){ + delete current.storage.sbxuanhuo; + current.unmarkSkill('sbxuanhuo'); + } + }); var num=lib.skill.sbxuanhuo.getNum(target,player); if(num>=3){ - player.chooseCard('恩怨:交给'+get.translation(target)+'两张牌',true,2,'he'); + var cards=player.getCards('he'); + if(!cards.length) event._result={bool:false}; + else if(cards.length<=2) event._result={bool:true,cards:cards}; + else player.chooseCard('恩怨:交给'+get.translation(target)+'两张牌',true,2,'he'); } else{ target.loseHp(); @@ -1367,7 +1405,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(target==player) return false; return player.getStorage('sbrende_givenx').contains(target); }, - selectTarget:-1, + selectTarget:[-1,-2], multiline:true, content:function(){ 'step 0' @@ -1817,7 +1855,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, //徐晃 sbduanliang:{ - audio:2, + audio:1, enable:'phaseUse', usable:1, filterTarget:lib.filter.notMe, @@ -1855,6 +1893,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:1, target:-1 } + }, + subSkill:{ + true1:{audio:true}, + true2:{audio:true}, + false:{audio:true}, } }, sbshipo:{ @@ -1975,7 +2018,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, //马超 sbtieji:{ - audio:2, + audio:1, trigger:{player:'useCardToPlayered'}, logTarget:'target', filter:function(event,player){ @@ -2011,6 +2054,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!arg.skill||!lib.skill[arg.skill]||lib.skill[arg.skill].charlotte||get.is.locked(arg.skill)||!arg.target.getSkills(true,false).contains(arg.skill)) return false; }, directHit_ai:true, + }, + subSkill:{ + true1:{audio:true}, + true2:{audio:true}, + false:{audio:true}, } }, //甘宁 @@ -2068,9 +2116,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.goto(1); } 'step 5' - if(event.num>0&&target.countDiscardableCards(player,'hej')){ + if(target.countDiscardableCards(player,'hej')){ player.line(target); - player.discardPlayerCard(target,event.num,true,'hej'); + player.discardPlayerCard(target,event.num+1,true,'hej'); } }, ai:{ @@ -2475,8 +2523,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return target!=player&&target.group=='wei'&&player.hasZhuSkill('sbhujia',target); }).set('ai',target=>{ var player=_status.event.player,evt=_status.event.getTrigger(); - return get.damageEffect(target,evt.source,player,evt.nature); - }); + return get.damageEffect(target,evt.source,player,evt.nature)-_status.event.eff; + }).set('eff',get.damageEffect(player,trigger.source,player,trigger.nature)); 'step 1' if(result.bool){ var target=result.targets[0]; @@ -3669,7 +3717,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{expose:0.2}, }, sbjieyue:{ - audio:2, + audio:4, trigger:{player:'phaseJieshuBegin'}, direct:true, content:function(){ @@ -3770,6 +3818,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return str; }, logTarget:'target', + locked:false, check:function(event,player){ var target=event.target; if(get.attitude(player,target)>0) return false; @@ -4216,7 +4265,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sbluoshen_info:'准备阶段,你可以选择一名角色。从其开始按逆时针方向的X名其他角色依次执行(X为角色数的一半,向上取整):展示一张手牌,若此牌为黑色,你获得之且此牌不计入本回合手牌上限;若此牌为红色,其弃置之。', sb_ganning:'谋甘宁', sbqixi:'奇袭', - sbqixi_info:'出牌阶段限一次。若你有手牌,你可以令一名其他角色猜测你手牌中最多的花色。若其猜对,你展示所有手牌;若其猜错,你可令其从其未选择过的花色中再次猜测,重复此流程。然后你弃置其区域内的X张牌(X为其于本次〖奇袭〗中猜错的次数)。', + sbqixi_info:'出牌阶段限一次。若你有手牌,你可以令一名其他角色猜测你手牌中最多的花色。若其猜对,你展示所有手牌;若其猜错,你可令其从其未选择过的花色中再次猜测,重复此流程。然后你弃置其区域内的X张牌(X为其于本次〖奇袭〗中猜错的次数+1)。', sbfenwei:'奋威', sbfenwei_info:'限定技。①出牌阶段,你可以将至多三张牌分别置于等量名角色的武将牌上,称为“威”,然后你摸等量牌。②当一名角色成为锦囊牌的目标时,若其有“威”,你须选择:1.令其获得其“威”;2.令其移去“威”,并取消此目标。', sb_machao:'谋马超', @@ -4224,7 +4273,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sbtieji_info:'当你使用【杀】指定其他角色为目标后,你可以令目标角色不能响应此【杀】,且其所有非锁定技失效直到回合结束。然后你与其进行谋弈。若你赢,且你选择的选项为:“直取敌营”,则你获得其一张牌;“扰阵疲敌”,你摸两张牌。', sb_xuhuang:'谋徐晃', sbduanliang:'断粮', - sbduanliang_info:'出牌阶段限一次。你可以与一名其他角色进行谋奕。若你赢,且你选择的选项为:“围城断粮”,若其判定区没有【兵粮寸断】,你将牌堆顶牌当【兵粮寸断】对其使用,否则你获得其一张牌;“擂鼓进军”,你视为对其使用一张【决斗】。', + sbduanliang_info:'出牌阶段限一次。你可以与一名其他角色进行谋弈。若你赢,且你选择的选项为:“围城断粮”,若其判定区没有【兵粮寸断】,你将牌堆顶牌当【兵粮寸断】对其使用,否则你获得其一张牌;“擂鼓进军”,你视为对其使用一张【决斗】。', sbshipo:'势迫', sbshipo_info:'结束阶段,你可以令一名体力少于你的角色或所有判定区有【兵粮寸断】的其他角色选择一项:1.交给你一张手牌;2.受到1点伤害。所有目标角色选择完成后,你可以将任意张你以此法获得的牌交给一名其他角色。', sb_zhangfei:'谋张飞', diff --git a/character/shenhua.js b/character/shenhua.js index d88b507d4..953b2c541 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -256,7 +256,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, filter:function(event,player,name){ if(event.name=='lose'||event.name=='loseAsync') return event.getlx!==false&&event.toStorage==true; - if(event.name=='cardGotoSpecial') return !event.notrigger; + if(event.name=='cardsGotoSpecial') return !event.notrigger; return true; }, direct:true, @@ -1139,6 +1139,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "drlt_yongsi":{ audio:2, group:["drlt_yongsi_1","drlt_yongsi_2"], + locked:true, subSkill:{ '1':{ audio:"drlt_yongsi", @@ -1486,7 +1487,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, filter:function(event,player,name){ if(event.name=='lose'||event.name=='loseAsync') return event.getlx!==false&&event.toStorage==true; - if(event.name=='cardGotoSpecial') return !event.notrigger; + if(event.name=='cardsGotoSpecial') return !event.notrigger; return true; }, direct:true, @@ -3194,6 +3195,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audioname:['re_huangzhong','ol_huangzhong'], trigger:{player:'useCardToTargeted'}, logTarget:'target', + locked:false, check:function(event,player){ return get.attitude(player,event.target)<=0; }, @@ -3655,7 +3657,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return; } event.card=result.card; - player.chooseBool('是否将'+get.translation(event.card)+'作为【田】置于武将牌上?').ai=function(){ + player.chooseBool('是否将'+get.translation(event.card)+'作为“田”置于武将牌上?').ai=function(){ return true; }; 'step 2' @@ -4159,7 +4161,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, duanchang:{ audio:2, - audioname:['re_caiwenji'], + audioname:['re_caiwenji','ol_caiwenji'], forbid:['boss'], trigger:{player:'die'}, forced:true, @@ -6374,7 +6376,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, jushou:{ - audio:'jushou_audio', + audio:2, trigger:{player:'phaseJieshuBegin'}, check:function(event,player){ return event.player.hp+player.countCards('h')<4; @@ -6390,9 +6392,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - subSkill:{ - audio:{audio:2} - } }, moon_jushou:{ audio:'xinjushou', @@ -7528,6 +7527,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ silent:true, popup:false, firstDo:true, + charlotte:true, filter:function(event,player){ return event.skill&&(event.skill.indexOf('guhuo_')==0||event.skill.indexOf('xinfu_guhuo_')==0); }, @@ -7739,6 +7739,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhugezhan:['zhugezhan','old_zhugezhan'], ol_lusu:['ol_lusu','re_lusu'], zhanghe:['re_zhanghe','zhanghe'], + yl_luzhi:['yl_luzhi','tw_yl_luzhi'], }, translate:{ re_yuanshao:'袁绍', @@ -7904,7 +7905,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ retianxiang_info:'当你受到伤害时,你可以弃置一张红桃手牌,防止此次伤害并选择一名其他角色,然后你选择一项:1.令其受到伤害来源对其造成的1点伤害,然后摸X张牌(X为其已损失体力值且至多为5);2.令其失去1点体力,然后获得你弃置的牌。', xinjiewei_info:'你可以将装备区里的牌当【无懈可击】使用;当你的武将牌从背面翻至正面时,你可以弃置一张牌,然后移动场上的一张牌', xinjushou_info:'结束阶段,你可以翻面并摸四张牌,然后弃置一张手牌,若以此法弃置的是装备牌,则你改为使用之', - jixi_info:'出牌阶段,你可以将任意一张【田】当作【顺手牵羊】使用', + jixi_info:'出牌阶段,你可以将任意一张“田”当作【顺手牵羊】使用', xinqiangxi_info:'出牌阶段各限一次,你可以选择一项:1. 失去一点体力并对你攻击范围内的一名其他角色造成一点伤害;2. 弃置一张装备牌并对你攻击范围内的一名其他角色造成一点伤害 ', qimou_info:'限定技,出牌阶段,你可以失去任意点体力,然后直到回合结束,你计算与其他角色的距离时-X,且你可以多使用X张【杀】(X为你失去的体力值)', tiaoxin_info:'出牌阶段限一次,你可以指定一名攻击范围内包含你的角色,该角色需对你使用一张【杀】,否则你弃置其一张牌。', @@ -7913,11 +7914,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fangquan_info:'你可跳过你的出牌阶段,若如此做,回合结束时,你可以弃置一张手牌并令一名其他角色进行一个额外的回合。', ruoyu_info:'主公技,觉醒技,准备阶段,若你的体力是全场最少的(或之一),你须增加1点体力上限并回复1点体力,然后获得技能〖激将〗。', qiaobian_info:'你可以弃置一张手牌并跳过自己的一个阶段(准备阶段和结束阶段除外);若你以此法跳过了摸牌阶段,则你可以获得至多两名其他角色的各一张手牌;若你以此法跳过了出牌阶段,则你可以移动场上的一张牌。', - tuntian_info:'当你于回合外失去牌时,你可以进行一次判定。若判定结果不为♥,则你将此牌置于你的武将牌上,称之为【田】。锁定技,你计算与其他角色的距离时-X(X为你武将牌上【田】的数目)', - zaoxian_info:'觉醒技,准备阶段,若你武将牌上【田】的数量达到3张或更多,则你减1点体力上限,并获得技能〖急袭〗', + tuntian_info:'①当你于回合外失去牌后,你可以判定。若判定结果不为♥,则你将此牌置于你的武将牌上,称为“田”。②你计算与其他角色的距离时-X(X为你武将牌上“田”的数目)', + zaoxian_info:'觉醒技,准备阶段,若你武将牌上“田”的数量达到3张或更多,则你减1点体力上限,并获得技能〖急袭〗', jiang_info:'每当你使用(指定目标后)或被使用(成为目标后)一张【决斗】或红色的【杀】时,你可以摸一张牌。', hunzi_info:'觉醒技,准备阶段,若你的体力值为1,你减1点体力上限,并获得技能〖英姿〗和〖英魂〗。', - zhiba_info:'主公技,其他吴势力角色的出牌阶段限一次,其可与你进行一次拼点。若该角色没赢,你可以获得双方拼点的牌;你的觉醒技发动后,你可以拒绝此拼点。', + zhiba_info:'主公技,其他吴势力角色的出牌阶段限一次,其可与你进行一次拼点。若该角色没赢,你可以获得双方拼点的牌。若你已发动过〖魂姿〗,你可以拒绝此拼点。', zhijian_info:'出牌阶段,你可以将手牌中的一张装备牌置于一名其他角色装备区里(不得替换原装备),然后摸一张牌。', guzheng_info:'其他角色的弃牌阶段结束时,你可以令其获得本阶段内进入弃牌堆的牌中的一张,然后你获得其余的牌。', beige_info:'当有角色受到【杀】造成的伤害后,你可以弃一张牌,并令其进行一次判定,若判定结果为:♥该角色回复1点体力;♦︎该角色摸两张牌;♣伤害来源弃两张牌;♠伤害来源将其武将牌翻面', @@ -7985,7 +7986,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yinghun_old_info:'准备阶段,若你已受伤,则你可以令一名其他角色执行下列两项中的一项: 1.摸X张牌,然后弃一张牌。 2.摸一张牌,然后弃X张牌。 (X为你已损失的体力值)', jiuchi_info:'你可以将一张♠手牌当作【酒】使用。', roulin_info:'锁定技。你对女性角色、女性角色对你使用【杀】时,都需连续使用两张【闪】才能抵消。', - benghuai_info:'结束阶段,若你的体力不是全场最少的(或之一),你须减1点体力或体力上限。', + benghuai_info:'锁定技。结束阶段,若你的体力不为全场最少,你失去1点体力或减1点体力上限。', baonue_info:'主公技,其他群雄角色造成伤害后,可进行一次判定,若为♠,你回复1点体力。', luanwu_info:'限定技,出牌阶段,你可令除你外的所有角色依次对与其距离最近的另一名角色使用一张【杀】,否则失去1点体力。', wansha_info:'锁定技,你的回合内,除你以外,不处于濒死状态的角色不能使用【桃】。', diff --git a/character/sp.js b/character/sp.js index 21f94a707..40d196a0e 100755 --- a/character/sp.js +++ b/character/sp.js @@ -6,14 +6,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterSort:{ sp:{ sp_tianji:["sunhao","liuxie","caoang","hetaihou","sunluyu",'ol_wangrong',"zuofen","ganfuren","ol_bianfuren","qinghegongzhu","tengfanglan","ruiji",'caoxiancaohua'], - sp_sibi:["yangxiu","chenlin","chengyu","shixie","fuwan","wangyun","zhugejin","simalang","maliang","buzhi","dongyun","kanze","sunqian","xizhicai","sunshao",'duxi',"jianggan",'ol_dengzhi','ol_yangyi','ol_dongzhao','ol_chendeng','jin_yanghu','wangyan','xiahouxuan','quhuang','zhanghua'], + sp_sibi:["yangxiu","chenlin","chengyu","shixie","fuwan","wangyun","zhugejin","simalang","maliang","buzhi","dongyun","kanze","sunqian","xizhicai","sunshao",'duxi',"jianggan",'ol_dengzhi','ol_yangyi','ol_dongzhao','ol_chendeng','jin_yanghu','wangyan','xiahouxuan','quhuang','zhanghua','wangguan'], sp_tianzhu:["wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda","ahuinan","dongtuna"], sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao","jin_guohuai"], sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','ol_puyuan','zhangzhi'], - sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie'], - sp_liesi:['mizhu','weizi','ol_liuba'], + sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie','luoxian'], + sp_liesi:['mizhu','weizi','ol_liuba','zhangshiping'], sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'], - sp_waitforsort:['sunhong','luoxian','ol_huban','wangguan'], + sp_waitforsort:['sunhong','ol_huban','lushi'], sp_qifu:["caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv','jin_zhouchu'], sp_wanglang:['wanglang'], sp_tongque:["sp_fuwan","sp_fuhuanghou","sp_jiben"], @@ -29,6 +29,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + lushi:['female','qun',3,['olzhuyan','olleijie']], + zhangshiping:['male','shu',3,['olhongji','olxinggu']], sunhong:['male','wu',3,['olxianbi','olzenrun']], luoxian:['male','shu',4,['oldaili']], ol_huban:['male','wei',4,['olhuiyun']], @@ -178,7 +180,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zangba:['male','wei',4,['rehengjiang']], zhangren:['male','qun',4,['chuanxin','zfengshi']], - wangyun:['male','qun',4,['xinlianji','xinmoucheng']], + wangyun:['male','qun',4,['xinlianji','xinmoucheng'],['clan:太原王氏']], sunqian:['male','shu',3,['qianya','shuimeng']], xizhicai:['male','wei',3,['tiandu','xianfu','chouce']], quyi:['male','qun',4,['fuqi','jiaozi']], @@ -188,6 +190,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //kaisa:["male","western",4,["zhengfu"]], }, characterIntro:{ + ol_zhanghe:'字儁乂,河间鄚人。三国时期魏国名将。官渡之战时,本为袁绍部将的张郃投降了曹操,并在曹操帐下多立功勋,于曹魏建立后加封为征西车骑将军。诸葛亮六出祁山之间,张郃多次抵御蜀军的进攻,于公元231年在木门道被诸葛亮设伏射死。后谥曰壮侯。为曹魏“五子良将”之一。', + zhangshiping:'张世平是东汉末期的中山商人,曾与苏双同路,资助刘备组织武装、建立政权。于《三国演义》第一回出场,刘关张桃园三结义时资助刘备良马五十匹,金银五百两,镔铁一千斤。刘备所使用的“双股剑”、关羽所使用的“青龙偃月刀(又名‘冷艳锯’)”、张飞所使用的“丈八点钢矛(又名‘丈八蛇矛’)”皆由这一千斤上好镔铁打造而成。', luoxian:'罗宪(218年—270年),字令则,荆州襄阳(今湖北襄阳)人。西晋开国将领,巴东太守(郡府在永安白帝城)。于蜀汉灭亡后降魏,成功抵御孙吴的入侵,守住入魏国的要冲永安。后仕晋官至冠军将军、假节,封西鄂县侯。泰始六年(270年)去世,谥烈侯。', sunhong:'孙弘(?—252年),三国时期吴国大臣,扬州会稽(今浙江省绍兴市)人。官至吴国中书令、少傅。鲁王孙霸与太子孙和各植党羽,孙弘即依附孙霸。孙权病笃,而太子年少,于是以孙弘领少傅。孙权临终,召他与诸葛恪、孙峻等嘱以后事,孙弘与诸葛恪同为顾命大臣。孙权死后,孙弘因素来与诸葛恪不和,怕为所治,故而隐瞒了孙权的死讯,欲矫诏除掉诸葛恪,被孙峻告发。后诸葛恪请孙弘议事,于座中将其诛杀。', wangguan:'《三国演义》中虚构人物,历史上不曾记载。在114回出场,曾为邓艾手下参谋,献反间计与邓艾,被姜维识破,兵败自投江而死。', @@ -633,6 +637,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, equipDelay:false, loseDelay:false, + ai:{ + equipValue:5, + basic:{ + equipValue:5 + } + } }, zhuangshu_trick:{ fullskin:true, @@ -677,6 +687,372 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //卢氏 + olzhuyan:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + init:function(player){ + player.addSkill('olzhuyan_record'); + }, + onremove:['olzhuyan_true','olzhuyan_false'], + direct:true, + filter:function(event,player){ + for(var bool of [true,false]){ + var targeted=player.getStorage('olzhuyan_'+bool); + if(game.hasPlayer(current=>{ + return !targeted.contains(current)&&lib.skill.olzhuyan.getNum(current,bool); + })) return true; + } + return false; + }, + getNum:function(player,status){ + if(!_status.olzhuyan||!_status.olzhuyan[player.playerid]) return 0; + var num=_status.olzhuyan[player.playerid][status?1:0]; + if(status){ + num-=player.countCards('h'); + if(num+player.countCards('h')>5) num=5-player.countCards('h'); + } + else{ + num-=player.hp; + if(num+player.hp<1) num=1-player.hp; + } + return num; + }, + content:function(){ + 'step 0' + var map={}; + for(var bool of [true,false]){ + var targeted=player.getStorage('olzhuyan_'+bool); + game.countPlayer(current=>{ + if(targeted.contains(current)) return false; + if(!map[current.playerid]) map[current.playerid]=[]; + map[current.playerid][bool?1:0]=lib.skill.olzhuyan.getNum(current,bool); + }); + } + event.map=map; + player.chooseTarget(get.prompt('olzhuyan'),'令一名角色将{体力值/手牌数}调整至与其上个准备阶段相同(“--”表示已对其发动过该分支)',(card,player,target)=>{ + var list=_status.event.map[target.playerid]; + return list&&(list[0]||list[1]); + }).set('map',map).set('targetprompt',target=>{ + var list=_status.event.map[target.playerid]; + var str=''; + for(var i=0;i<2;i++){ + if(list[i]===undefined) str+='--'; + else{ + str+=(list[i]>0?'+':'')+list[i]; + } + str+='/'; + } + return str.slice(0,-1); + }).set('ai',target=>{ + var list=_status.event.map[target.playerid]; + var att=get.attitude(_status.event.player,target); + var v1=list[0],v2=get.sgn(list[1])*Math.sqrt(Math.abs(list[1])); + return Math[att>0?'max':'min'](v1,v2)*att; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('olzhuyan',target); + event.target=target; + var list=event.map[target.playerid]; + var choices=['体力值','手牌数']; + if(list[0]&&list[1]){ + player.chooseControl(choices).set('choiceList',[ + '令'+get.translation(target)+(list[0]>0?'回复':'失去')+Math.abs(list[0])+'点体力'+(list[0]<0?'(至多失去至1)':''), + '令'+get.translation(target)+(list[1]>0?'摸':'弃置')+get.cnNumber(Math.abs(list[1]))+'张'+(list[1]>0?'':'手')+'牌'+(list[1]>0?'(至多摸至5)':''), + ]).set('prompt','驻颜:请选择一项').set('ai',()=>_status.event.choice).set('choice',function(){ + var v1=list[0],v2=get.sgn(list[1])*Math.sqrt(Math.abs(list[1])); + if(get.attitude(player,target)>0){ + return v1>v2?0:1; + } + return v1>v2?1:0; + }()); + } + else{ + event._result={index:list[0]?0:1}; + } + } + else event.finish(); + 'step 2' + var ind=result.index; + player.markAuto('olzhuyan_'+Boolean(ind),[target]); + var num=event.map[target.playerid][ind]; + if(ind==0){ + if(num>0){ + target.recover(num); + } + else{ + num=Math.min(target.hp-1,-num); + target.loseHp(num); + } + } + else{ + if(num>0){ + num=Math.min(5-target.countCards('h'),num); + if(num>0) target.draw(num); + } + else{ + num=-num; + target.chooseToDiscard(num,true).set('prompt','驻颜:请弃置'+get.cnNumber(Math.abs(num))+'张手牌'); + } + } + }, + subSkill:{ + record:{ + trigger:{ + global:['phaseZhunbeiAfter','phaseBefore','enterGame'], + }, + lastDo:true, + charlotte:true, + forced:true, + popup:false, + forceDie:true, + filter:function(event,player){ + return (event.name!='phase'||game.phaseNumber==0); + }, + content:function(){ + if(!_status.olzhuyan) _status.olzhuyan={}; + if(event.triggername=='phaseBefore'){ + game.countPlayer(current=>{ + _status.olzhuyan[current.playerid]=[current.hp,current.countCards('h')]; + }) + } + else{ + _status.olzhuyan[trigger.player.playerid]=[trigger.player.hp,trigger.player.countCards('h')]; + } + }, + } + } + }, + olleijie:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('olleijie'),'令一名角色判定。若结果为♠2~9,其受到2点雷电伤害,否则其摸两张牌。').set('ai',target=>{ + var player=_status.event.player,sgn=_status.event.sgn; + if(sgn>0){ + return get.damageEffect(target,target,player,'thunder'); + } + else if(sgn==0){ + return get.attitude(player,target); + } + return 0; + }).set('sgn',function(){ + var sgn=0; + game.countPlayer(current=>{ + if(!current.hasSkillTag('rejudge')) return; + sgn=get.sgnAttitude(player,current); + }); + return sgn; + }()) + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('olleijie',target); + target.judge(card=>{ + var number=get.number(card); + if(get.suit(card)=='spade'&&number>=2&&number<=9) return -4; + return 2; + }).set('judge2',result=>{ + return result.bool===false?true:false; + }); + } + else event.finish(); + 'step 2' + if(result.bool){ + target.draw(2); + } + else{ + target.damage(2,'thunder'); + } + } + }, + //张世平 + olhongji:{ + audio:2, + trigger:{global:'phaseZhunbeiBegin'}, + filter:function(event,player){ + if(event.player.isMinHandcard()&&!player.hasSkill('olhongji_min')) return true; + if(event.player.isMaxHandcard()&&!player.hasSkill('olhongji_max')) return true; + return false; + }, + direct:true, + content:function(){ + 'step 0' + var target=trigger.player; + event.target=target; + var bool1=target.isMinHandcard()&&!player.hasSkill('olhongji_min'),str1='其手牌数为全场最少。你可以令其于本回合摸牌阶段结束后执行一个额外的摸牌阶段,然后本轮你不能再发动该分支。'; + var bool2=target.isMaxHandcard()&&!player.hasSkill('olhongji_max'),str2='其手牌数为全场最多。你可以令其于本回合出牌阶段结束后执行一个额外的出牌阶段,然后本轮你不能再发动该分支。'; + if(bool1&&!bool2){ + event.branch=0; + player.chooseBool(get.prompt('olhongji',target),str1).set('ai',()=>{ + return _status.event.bool; + }).set('bool',get.attitude(player,trigger.player)>1); + } + else if(!bool1&&bool2){ + event.branch=1; + player.chooseBool(get.prompt('olhongji',target),str2).set('ai',()=>{ + return _status.event.bool; + }).set('bool',get.attitude(player,trigger.player)>1); + } + else if(bool1&&bool2){ + player.chooseControl('摸牌阶段','出牌阶段','cancel2').set('prompt',get.prompt('olhongji',target)).set('choiceList',[ + str1.slice(13), + str2.slice(13) + ]).set('ai',()=>[0,1].randomGet()); + } + 'step 1' + var choice=-1; + if(event.branch==0&&result.bool||result.control=='摸牌阶段') choice=0; + if(event.branch==1&&result.bool||result.control=='出牌阶段') choice=1; + if(choice==0){ + player.logSkill('olhongji',target); + player.addTempSkill('olhongji_min','roundStart'); + target.addTempSkill('olhongji_draw'); + } + else if(choice==1){ + player.logSkill('olhongji',target); + player.addTempSkill('olhongji_max','roundStart'); + target.addTempSkill('olhongji_use'); + } + }, + ai:{expose:0.25}, + subSkill:{ + min:{charlotte:true}, + max:{charlotte:true}, + draw:{ + trigger:{player:'phaseDrawAfter'}, + charlotte:true, + forced:true, + popup:false, + content:function(){ + var next=trigger.player.phaseDraw(); + event.next.remove(next); + trigger.getParent('phase').next.push(next); + player.removeSkill('olhongji_draw'); + } + }, + use:{ + trigger:{player:'phaseUseAfter'}, + charlotte:true, + forced:true, + popup:false, + content:function(){ + var next=trigger.player.phaseUse(); + event.next.remove(next); + trigger.getParent('phase').next.push(next); + player.removeSkill('olhongji_use'); + } + } + } + }, + olxinggu:{ + audio:2, + trigger:{global:'phaseBefore',player:'enterGame'}, + forced:true, + locked:false, + filter:function(event,player){ + return (event.name!='phase'||game.phaseNumber==0); + }, + onremove:function(player,skill){ + var cards=player.getExpansions(skill); + if(cards.length) player.loseToDiscardpile(cards); + }, + group:'olxinggu_trade', + content:function(){ + 'step 0' + var cards=[]; + for(var i=0;i<3;i++){ + var card=get.cardPile2(function(card){ + if(cards.contains(card)) return false; + var type=get.subtype(card); + return type=='equip3'||type=='equip4'||type=='equip6'; + }); + if(card) cards.add(card); + else break; + } + if(cards.length) player.addToExpansion(cards,'draw').gaintag.add('olxinggu'); + }, + marktext:'贾', + intro:{ + markcount:'expansion', + mark:function(dialog,content,player){ + var content=player.getExpansions('olxinggu'); + if(content&&content.length){ + if(player==game.me||player.isUnderControl()){ + dialog.addAuto(content); + } + else{ + return '剩余'+get.cnNumber(content.length)+'匹马'; + } + } + } + }, + subSkill:{ + trade:{ + audio:'olxinggu', + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.getExpansions('olxinggu').length; + }, + direct:true, + content:function(){ + 'step 0' + var cards=player.getExpansions('olxinggu'); + if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true}); + player.chooseButton([get.prompt('olxinggu'),cards]).set('ai',button=>{ + if(_status.event.toChoose==button.link) return 1; + return 0; + }).set('toChoose',!event.aiCancel&&cards.find(card=>{ + return game.hasPlayer(current=>{ + if(!lib.skill.zhijian.filterTarget(card,player,current)) return false; + return get.effect(current,card,player,player)>0; + }); + })); + 'step 1' + if(result.bool){ + var card=result.links[0]; + event.card=card; + player.chooseTarget('将'+get.translation(card)+'置入一名其他角色的装备区',lib.skill.zhijian.filterTarget).set('ai',target=>{ + var player=_status.event.player; + return get.effect(target,_status.event.card,player,player); + }).set('card',card); + } + else{ + if(_status.connectMode){game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});} + event.finish(); + } + 'step 2' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + if(_status.connectMode){game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});} + player.logSkill('olxinggu',target); + player.$give(card,target,false); + } + else{ + if(!event.isMine()&&!event.isOnline()) event.aiCancel=true; + event.goto(0); + } + 'step 3' + target.equip(card); + 'step 4' + var card=get.cardPile2(cardx=>{ + return get.suit(cardx)=='diamond'; + }); + if(card) player.gain(card,'gain2'); + else{ + game.log('但是牌堆中并没有♦牌了!'); + player.chat('做了个亏本买卖…'); + } + } + } + } + }, //孙弘 olxianbi:{ audio:2, @@ -804,6 +1180,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ })%2==0; }, group:'oldaili_record', + locked:false, check:function(event,player){ if(get.distance(event.player,player,'absolute')==1&&!player.isTurnedOver()) return false; return true; @@ -931,26 +1308,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.chooseBool('是否摸一张牌?').set('ai',()=>true); event.goto(5); } - else if(cards.length){ - if(event.index==1){ - target.chooseToUse({ - filterCard:function(card){ - if(get.itemtype(card)!='card'||!card.hasGaintag('olhuiyun_tag')) return false; - return lib.filter.filterCard.apply(this,arguments); - }, - prompt:'是否使用一张展示牌,然后重铸所有手牌?' - }); - } - else{ - target.chooseToUse({ - filterCard:function(card){ - if(get.itemtype(card)!='card'||get.position(card)!='h'&&get.position(card)!='s') return false; - return lib.filter.filterCard.apply(this,arguments); - }, - prompt:'是否使用一张手牌,然后重铸展示牌?' - }); - event.goto(4); - } + else if(event.index==1&&cards.length){ + target.chooseToUse({ + filterCard:function(card){ + if(get.itemtype(card)!='card'||!card.hasGaintag('olhuiyun_tag')) return false; + return lib.filter.filterCard.apply(this,arguments); + }, + prompt:'是否使用一张展示牌,然后重铸所有手牌?' + }); + } + else if(event.index==2){ + target.chooseToUse({ + filterCard:function(card){ + if(get.itemtype(card)!='card'||get.position(card)!='h'&&get.position(card)!='s') return false; + return lib.filter.filterCard.apply(this,arguments); + }, + prompt:'是否使用一张手牌,然后重铸展示牌?' + }); + event.goto(4); } else event.goto(6); } @@ -1207,8 +1582,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.chooseControl('cancel2').set('choiceList',[ - '令'+get.translation(trigger.player)+'回复1点体力', - '令'+get.translation(trigger.player)+'于本回合下次造成的伤害+1,且造成伤害后本回合手牌上限为0', + '令'+get.translation(trigger.player)+'回复1点体力,且造成伤害时本回合手牌上限为0', + '令'+get.translation(trigger.player)+'于本回合下次造成的伤害+1,且造成伤害时本回合手牌上限为0', ]).set('prompt',get.prompt('olkangrui',trigger.player)).set('ai',()=>{ return _status.event.choice; }).set('choice',function(){ @@ -1235,11 +1610,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.control!='cancel2'){ player.logSkill('olkangrui',trigger.player); player.draw(); - if(result.index==0) trigger.player.recover(); + if(result.index==0){ + trigger.player.recover(); + trigger.player.addTempSkill('olkangrui_nil'); + } else{ trigger.player.addTempSkill('olkangrui_add'); trigger.player.addMark('olkangrui_add',1,false); - trigger.player.addTempSkill('olkangrui_nil'); } } }, @@ -1258,11 +1635,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ trigger.num+=player.countMark('olkangrui_add'); - player.removeSkill('olkangrui_add'); + player.removeMark('olkangrui_add',player.countMark('olkangrui_add'),false); + player.storage.olkangrui_nil=true; + game.log(player,'本回合手牌上限基数为','#g0'); + }, + mod:{ + maxHandcardBase:function(player,num){ + if(player.storage.olkangrui_nil) return 0; + }, } }, nil:{ - trigger:{source:'damageSource'}, + trigger:{source:'damageBegin1'}, charlotte:true, forced:true, onremove:true, @@ -3012,7 +3396,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.group==target.group; }, subSkill:{ - temp:{}, + temp:{charlotte:true}, use:{ trigger:{ global:"useCard", @@ -3768,6 +4152,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ huamu:{ audio:2, trigger:{player:'useCardAfter'}, + locked:false, filter:function(event,player){ var color=get.color(event.card); if(color=='none') return false; @@ -9052,6 +9437,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ source:'damageSource', }, forced:true, + locked:false, content:function(){ player.addMark('reluanzhan',1,false); }, @@ -9107,6 +9493,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:'luanzhan', trigger:{player:'useCardToPlayered'}, forced:true, + locked:false, filter:function(event,player){ if(!event.isFirstTarget||(event.card.name!='sha'&&(get.color(event.card)!='black'||get.type(event.card)!='trick'))||!player.countMark('reluanzhan')) return false; var info=get.info(event.card); @@ -10297,7 +10684,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('yuxu'); player.draw(); player.addMark('yuxu_used',1,false); - player.addTempSkill('yuxu_used','phaseUse'); + player.addTempSkill('yuxu_used','phaseUseAfter'); } event.finish(); 'step 2' @@ -11060,6 +11447,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.removeAdditionalSkill('new_luoyan'); }, derivation:['oltianxiang','liuli'], + locked:true, }, //新孙鲁育 "new_meibu":{ @@ -13701,6 +14089,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, xinyongsi:{ group:['xinyongsi1','xinyongsi2'], + locked:true, }, xinyongsi1:{ audio:'yongsi1', @@ -14470,7 +14859,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.gainMaxHp(true); target.recover(); var mode=get.mode(); - if(mode=='identity'||(mode=='versus'&&_status.mode=='four')){ + if(mode=='identity'||(mode=='versus'&&_status.mode=='four')||mode=='doudizhu'){ if(target.name&&lib.character[target.name]){ var skills=lib.character[target.name][3]; target.storage.zhuSkill_yongdi=[]; @@ -15400,6 +15789,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, linglong_bagua:{ audio:'linglong', + audioname2:{re_jsp_huangyueying:'relinglong'}, inherit:'bagua_skill', filter:function(event,player){ if(!lib.skill.bagua_skill.filter(event,player)) return false; @@ -15533,6 +15923,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xunzhi:{ audio:2, trigger:{player:'phaseZhunbeiBegin'}, + locked:false, init:function(player){ player.storage.xunzhi=0; }, @@ -16109,6 +16500,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, unique:true, juexingji:true, + derivation:['mashu','nuzhan'], filter:function(event,player){ var zhu=get.zhu(player); if(zhu&&zhu.isZhu){ @@ -16565,7 +16957,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yuhua:{ trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']}, forced:true, - locked:false, audio:2, content:function(){ "step 0" @@ -17293,6 +17684,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guiming:{ unique:true, zhuSkill:true, + locked:true, }, canshi:{ audio:2, @@ -19847,6 +20239,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, yongsi:{ group:['yongsi1','yongsi2'], + locked:true, ai:{ threaten:2.2 } @@ -21769,11 +22162,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lisu:['ol_lisu','lisu'], fuwan:['dc_fuwan','fuwan','sp_fuwan','tw_fuwan'], huaxin:['ol_huaxin','huaxin','sp_huaxin'], - xujing:['xujing','tw_sp_xujing','sp_xujing'], + xujing:['xujing','tw_xujing','sp_xujing'], zhaoxiang:['zhaoxiang','tw_zhaoxiang'], dengzhi:['ol_dengzhi','re_dengzhi','tw_dengzhi','dengzhi'], wangrong:['wangrong','ol_wangrong'], - zongyu:['tw_sp_zongyu','sp_zongyu','zongyu'], + zongyu:['tw_zongyu','sp_zongyu','zongyu'], ol_dongzhao:['ol_dongzhao','tw_dongzhao'], mayunlu:['tw_mayunlu','mayunlu'], zhuling:['ol_zhuling','dc_zhuling','zhuling'], @@ -21795,7 +22188,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tengfanglan:['dc_tengfanglan','tengfanglan'], zhangyì:['ol_zhangyì','zhangyì'], yuantanyuanshang:['yuantanyuanshang','yuantanyuanxiyuanshang'], - ruiji:['dc_ruiji','ruiji'] + ruiji:['dc_ruiji','ruiji'], + jsp_huangyueying:['jsp_huangyueying','re_jsp_huangyueying'], }, translate:{ "xinfu_lingren":"凌人", @@ -22254,7 +22648,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ nuzhan2:'怒斩', nuzhan_info:'锁定技,你使用的由一张锦囊牌转化的【杀】不计入出牌阶段的次数限制;锁定技,你使用的由一张装备牌转化的【杀】的伤害值基数+1', danji:'单骑', - danji_info:'觉醒技,准备阶段开始时,若你的手牌数大于你的体力值且本局游戏的主公不为刘备,你减1点体力上限,然后获得〖马术〗和〖怒斩〗', + danji_info:'觉醒技,准备阶段开始时,若你的手牌数大于你的体力值且本局游戏的主公不为刘备,你减1点体力上限,然后获得〖马术〗和〖怒斩〗。', jieyuan:'竭缘', jieyuan_more:'竭缘', jieyuan_less:'竭缘', @@ -22490,7 +22884,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chongzhen_info:'当你因发动〖龙胆〗而使用或打出【杀】或【闪】时,你可以获得对方的一张手牌。', bifa_info:'结束阶段开始时,你可以将一张手牌移出游戏并指定一名其他角色。该角色的准备阶段开始时,其观看你移出游戏的牌并选择一项:交给你一张与此牌类型相同的手牌并获得此牌;或将此牌置入弃牌堆,然后失去1点体力。', songci_info:'①出牌阶段,你可以选择一名未以此法选择过的角色。若其手牌数:大于其体力值,其弃置两张牌;不大于其体力值,其摸两张牌。②弃牌阶段结束时,若你已对场上所有存活角色发动过〖颂词①〗,则你摸一张牌。', - yongsi_info:'锁定技,摸牌阶段,你多摸X张牌。弃牌阶段开始时,你弃置X张牌。(X为场上势力数)', + yongsi_info:'锁定技。①摸牌阶段,你多摸X张牌。②弃牌阶段开始时,你弃置X张牌。(X为场上势力数)', yicong_info:'锁定技,当你的体力值大于2时,你计算与其他角色的距离时-1;当你的体力值不大于2时,其他角色计算与你的距离时+1。', baobian_info:'锁定技,若你的体力值为3或更少,你视为拥有技能〖挑衅〗;若你的体力值为2或更少;你视为拥有技能〖咆哮〗;若你的体力值为1,你视为拥有技能〖神速〗。', rebaobian:'豹变', @@ -22639,7 +23033,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lisi_info:'当你于回合外使用的牌结算结束后,你可将其交给一名手牌数不大于你的其他角色。', ol_yangyi:'杨仪', oljuanxia:'狷狭', - oljuanxia_info:'锁定技。结束阶段,你选择一名其他角色。你依次视为对其使用至多三种单目标普通锦囊牌。然后其下回合结束时,可视为对你使用等量的【杀】。', + oljuanxia_info:'结束阶段,你可以选择一名其他角色。你依次视为对其使用至多三种单目标普通锦囊牌。然后其下回合结束时,可视为对你使用等量的【杀】。', oldingcuo:'定措', oldingcuo_info:'每回合限一次。当你受到或造成伤害后,你可摸两张牌。若这两张牌颜色不同,则你弃置一张手牌。', fengfangnv:'OL冯妤', @@ -22832,7 +23226,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olnishou_info:'锁定技。当你装备区里的牌进入弃牌堆后,你选择一项:1.将这些牌中第一张能当【闪电】对你使用的牌当【闪电】使用;2.本阶段结束时,你与一名手牌数最少的角色交换手牌。', zhanghua:'张华', olbihun:'弼昏', - olbihun_info:'锁定技。当你使用牌指定其他角色为目标时:若其不为你且你的手牌数大于手牌上限,取消此目标;若此牌目标数为1,则其获得此牌。', + olbihun_info:'锁定技。当你使用牌指定其他角色为目标时,若你的手牌数大于手牌上限且若此牌的目标数:大于1,取消此目标;为1,其获得此牌。', olchuanwu:'穿屋', olchuanwu_info:'锁定技。当你造成或受到伤害后,你令武将牌上的前X个未失效的技能失效直到回合结束。然后你摸等同于你此次失效的技能数张牌(X为你的攻击范围)。', oljianhe:'剑合', @@ -22852,7 +23246,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ oldianjun:'殿军', oldianjun_info:'锁定技。回合结束时,你受到1点无来源伤害,然后执行一个额外的出牌阶段。', olkangrui:'亢锐', - olkangrui_info:'当一名角色于其回合内首次受到伤害后,你可以摸一张牌并选择一项:1.令其回复1点体力;2.令其于本回合下次造成的伤害+1,然后当其于本回合造成伤害后,其本回合手牌上限基数为0。', + olkangrui_info:'当一名角色于其回合内首次受到伤害后,你可以摸一张牌并选择一项:1.令其回复1点体力;2.令其于本回合下次造成的伤害+1。然后当其于本回合造成伤害时,其本回合手牌上限基数为0。', wangguan:'王瓘', olmiuyan:'谬焰', olmiuyan_tag:'invisible', @@ -22872,6 +23266,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ oldaili:'带砺', oldaili_tag:'带砺', oldaili_info:'一名角色的回合结束时,若你被展示过的手牌数为偶数,则你可以翻面,摸三张牌并展示之。', + zhangshiping:'张世平', + olhongji:'鸿济', + olhongji_info:'每轮每项各限一次。一名角色的准备阶段,若其手牌数最少/最多,你可以令其于本回合第一个摸牌阶段/出牌阶段后执行一个额外的摸牌阶段/出牌阶段(若其条件同时满足则只能选择一项)。', + olxinggu:'行贾', + olxinggu_info:'①游戏开始时,你将牌堆中的三张坐骑牌扣置于武将牌上。②结束阶段,你可以将一张〖行贾①〗牌置于一名其他角色的装备区,然后你从牌堆获得一张♦牌。', + lushi:'卢氏', + olzhuyan:'驻颜', + olzhuyan_info:'每名角色每项各限一次。结束阶段,你可以令一名角色将以下一项调整至与其上一个准备阶段结束后相同:1.体力值;2.手牌数(体力值至多失去至1,手牌数至多摸至5;若其未执行过准备阶段则改为游戏开始时)。', + olleijie:'雷劫', + olleijie_info:'准备阶段,你可以令一名角色判定,若结果为♠2~9,其受到2点雷电伤害,否则其摸两张牌。', sp_tianji:'天极·皇室宗亲', sp_sibi:'四弼·辅国文曲', diff --git a/character/sp2.js b/character/sp2.js index 73e5354f2..46a2465e7 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + ruanji:['male','wei',3,['dczhaowen','dcjiudun']], + wu_zhugeliang:['male','shu','4/7',['dcjincui','dcqingshi','dczhizhe']], + sunwukong:['male','qun',3,['dcjinjing','dccibei','dcruyi']], + longwang:['male','qun',3,['dclonggong','dcsitian']], + taoshen:['male','qun',3,['dcnutao']], + dc_jsp_guanyu:['male','wei',4,['new_rewusheng','dcdanji']], duanqiaoxiao:['female','wei',3,['dccaizhuang','dchuayi']], zhangjinyun:['female','shu',3,['dchuizhi','dcjijiao']], dc_mengda:['male','wei',4,['dclibang','dcwujie']], @@ -30,7 +36,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dc_fuwan:['male','qun',4,['dcmoukui']], dc_yangbiao:['male','qun',3,['dczhaohan','dcjinjie','dcjue']], dc_huojun:['male','shu',4,['dcgue','dcsigong']], - guānning:['male','shu',3,['dcxiuwen','dclongsong'],['unseen']], + guānning:['male','shu',3,['dcxiuwen','dclongsong']], dc_sunhanhua:['female','wu',3,['dchuiling','dcchongxu'],['unseen']], dc_sunziliufang:['male','wei',3,['dcqinshen','dcweidang']], dc_tengfanglan:['female','wu',3,['dcluochong','dcaichen']], @@ -38,15 +44,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunhuan:['male','wu',4,['dcniji'],['unseen']], qiaorui:['male','qun',4,['dcaishou','dcsaowei']], yanghong:['male','qun',3,['dcjianji','dcyuanmo']], - xianglang:['male','shu',3,['dckanji','dcqianzheng'],['unseen']], + xianglang:['male','shu',3,['dckanji','dcqianzheng']], qinlang:['male','wei',4,['dchaochong','dcjinjin']], furongfuqian:['male','shu','4/6',['dcxuewei','dcyuguan']], - zhenghun:['male','wei',3,['dcqiangzhi','dcpitian'],['unseen']], + zhenghun:['male','wei',3,['dcqiangzhi','dcpitian']], dc_zhaotongzhaoguang:['male','shu',4,['yizan_use','dcqingren','dclongyuan']], dc_huanghao:['male','shu',3,['dcqinqing','huisheng','dccunwei']], xuelingyun:['female','wei',3,['dcxialei','dcanzhi']], liupi:['male','qun',4,['dcjuying']], - dc_wangyun:['male','qun',4,['dclianji','dcmoucheng']], + dc_wangyun:['male','qun',4,['dclianji','dcmoucheng'],['clan:太原王氏']], dc_sp_jiaxu:['male','wei',3,['zhenlue','dcjianshu','dcyongdi']], dc_zhouxuān:['male','wei',3,['dcwumei','dczhanmeng']], leibo:['male','qun',4,['dcsilve','dcshuaijie']], @@ -89,7 +95,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhangxun:['male','qun',4,['suizheng']], zongyu:['male','shu',3,['zyqiao','chengshang']], fengfang:['male','qun',3,['dcditing','dcbihuo']], - dc_wangchang:['male','wei',3,['dckaiji','dcpingxi']], + dc_wangchang:['male','wei',3,['dckaiji','dcpingxi'],['clan:太原王氏']], zhaoang:['male','wei','3/4',['dczhongjie','dcsushou']], dc_sunru:['female','wu',3,['xiecui','youxu']], dc_jiling:['male','qun',4,['dcshuangren']], @@ -234,7 +240,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou","xinping","hanmeng"], sp_qihuan:['zhaozhong','re_hejin','fengfang','mushun','dc_fuwan'], sp_binglin:['re_niujin',"sp_mifangfushiren",'licaiwei','dc_zhaoyan','shiyi','sunlang','sunhuan','dc_mengda'], - sp_danqi:['dufuren','qinyilu','bianxi','dc_huban','dc_hujinding','dc_zhaoyǎn','wangwei','liyixiejing','guānning'], + sp_danqi:['dufuren','qinyilu','bianxi','dc_huban','dc_hujinding','dc_zhaoyǎn','wangwei','liyixiejing','guānning','dc_jsp_guanyu'], sp_fenghuo:['re_nanhualaoxian','tongyuan','zhangning','re_pangdegong'], sp_baigei:['re_panfeng','xingdaorong','caoxing','re_chunyuqiong','xiahoujie','dc_caiyang','zhoushan'], sp_caizijiaren:['re_dongbai','re_sunluyu','heyan','zhaoyan','wangtao','wangyue','zhangxuan','tengyin','zhangyao','xiahoulingnv','dc_sunru'], @@ -255,7 +261,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_xiaohu:['haomeng','yanfuren','yanrou','dc_zhuling'], sp2_huben:['wangshuang','wenyang','re_liuzan','dc_huangzu','wulan','leitong','chentai'], sp2_shengun:["puyuan","guanlu","gexuan",'wufan','re_zhangbao','dukui','zhaozhi','zhujianping','dc_zhouxuān','zerong'], - sp2_bizhe:['dc_luotong','dc_wangchang','chengbing','dc_yangbiao'], + sp2_bizhe:['dc_luotong','dc_wangchang','chengbing','dc_yangbiao','ruanji'], sp2_huangjia:['caomao','liubian','dc_liuyu','quanhuijie','dingshangwan','yuanji','xielingyu','sunyu'], sp2_zhangtai:['guozhao','fanyufeng','ruanyu','yangwan','re_panshu'], sp2_jinse:['caojinyu','re_sunyi','re_fengfangnv','caohua','laiyinger','zhangfen'], @@ -263,10 +269,1173 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp2_doukou:['re_xinxianying','huaman','xuelingyun','dc_ruiji','duanqiaoxiao'], sp2_jichu:['zhaoang','dc_liuye','dc_wangyun','yanghong','huanfan','xizheng'], sp2_yuxiu:['dongguiren','dc_tengfanglan','zhangjinyun'], + sp2_wumiao:['wu_zhugeliang'], + sp2_xiyouji:['taoshen','sunwukong','longwang'], sp_decade:['caobuxing','re_maliang','xin_baosanniang','dongxie','liuhui'], } }, skill:{ + //阮籍 + dczhaowen:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + filter:function(event,player){ + return player.countCards('h'); + }, + check:function(event,player){ + return player.hasCard(card=>{ + return get.color(card)=='black'||get.color(card)=='red'&&player.hasValueTarget(card); + }); + }, + content:function(){ + 'step 0' + player.showHandcards(); + 'step 1' + player.addTempSkill('dczhaowen_effect'); + game.broadcastAll(function(cards){ + cards.forEach(card=>card.addGaintag('dczhaowen_tag')); + },player.getCards('h')); + }, + ai:{ + threaten:3 + }, + subSkill:{ + effect:{ + audio:'dczhaowen', + enable:'chooseToUse', + charlotte:true, + onremove:function(player){ + player.removeGaintag('dczhaowen_tag'); + }, + hiddenCard:function(player,name){ + return get.type(name)=='trick'&&!player.getStorage('dczhaowen_viewed').contains(name)&&player.countCards('h',card=>{ + return get.color(card)=='black'&&card.hasGaintag('dczhaowen_tag'); + })>0; + }, + filter:function(event,player){ + if(!player.hasCard(card=>{ + return get.color(card)=='black'&&card.hasGaintag('dczhaowen_tag'); + })) return false; + var storage=player.getStorage('dczhaowen_viewed'); + for(var i of lib.inpile){ + if(!storage.contains(i)&&get.type(i)=='trick'&&event.filterCard({name:i},player,event)) return true; + } + return false; + }, + chooseButton:{ + dialog:function(event,player){ + var cards=player.getCards('h',card=>{ + return get.color(card)=='black'&&card.hasGaintag('dczhaowen_tag'); + }); + var storage=player.getStorage('dczhaowen_viewed'); + var list=[]; + for(var i of lib.inpile){ + if(!storage.contains(i)&&get.type(i)=='trick'&&event.filterCard({name:i},player,event)){ + list.push(['锦囊','',i]); + } + } + return ui.create.dialog('昭文',[list,'vcard'],'hidden'); + }, + check:function(button){ + var player=_status.event.player; + return player.getUseValue({name:button.link[2]})+1; + }, + backup:function(links,player){ + return { + audio:'dczhaowen', + popname:true, + filterCard:function(card,player){ + return get.color(card)=='black'&&card.hasGaintag('dczhaowen_tag'); + }, + selectCard:1, + position:'h', + viewAs:{ + name:links[0][2], + }, + onuse:function(links,player){ + player.addTempSkill('dczhaowen_viewed'); + player.markAuto('dczhaowen_viewed',[links.card.name]); + }, + } + }, + prompt:function(links,player){ + return '将一张展示过的黑色手牌当做'+get.translation(links[0][2])+'使用'; + }, + }, + group:'dczhaowen_draw', + mod:{ + aiOrder:function(player,card,num){ + var cards=[]; + if(card.cards) cards.addArray(cards); + if(get.itemtype(card)=='card') cards.push(card); + for(var cardx of cards){ + if(get.color(cardx)!='red') continue; + if(cardx.hasGaintag('dczhaowen_tag')) return num+0.2; + } + }, + }, + ai:{ + order:12, + result:{ + player:1, + }, + }, + }, + draw:{ + audio:'dczhaowen', + forced:true, + charlotte:true, + trigger:{player:'useCard'}, + filter:function(event,player){ + var cards=event.cards.filter(card=>get.color(card,player)=='red'); + return player.hasHistory('lose',evt=>{ + if(event!=evt.getParent()) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('dczhaowen_tag')){ + if(cards.some(card=>card.cardid==i)) return true; + } + } + }); + }, + content:function(){ + var num=0; + var cards=trigger.cards.filter(card=>get.color(card,player)=='red'); + player.getHistory('lose',evt=>{ + if(trigger!=evt.getParent()) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('dczhaowen_tag')){ + if(cards.some(card=>card.cardid==i)) num++; + } + } + }); + while(num--) player.draw(); + }, + }, + viewed:{ + onremove:true, + charlotte:true, + }, + effect_backup:{ + audio:'dczhaowen', + }, + } + }, + dcjiudun:{ + audio:2, + trigger:{target:'useCardToTargeted'}, + filter:function(event,player){ + if(event.player==player||get.color(event.card)!='black') return false; + if(player.hasSkill('jiu')) return player.countCards('h',card=>{ + return _status.connectMode||lib.filter.cardDiscardable(card,player,'dcjiudun'); + }); + return true; + }, + direct:true, + content:function(){ + 'step 0' + if(player.hasSkill('jiu')){ + player.chooseToDiscard(get.prompt('dcjiudun'),'
    弃置一张手牌,令'+get.translation(trigger.card)+'对你无效
    ').set('logSkill','dcjiudun').set('ai',card=>{ + if(_status.event.goon) return 4.5+Math.max(0,3-player.hp)-get.value(card); + return 0; + }).set('goon',function(){ + if(get.effect(player,trigger.card,trigger.player,player)<-4*Math.max(0,5-Math.sqrt(player.countCards('h')))) return true; + return false; + }()); + event.goto(2); + } + else{ + player.chooseBool(get.prompt('dcjiudun'),'摸一张牌,然后视为使用一张【酒】').set('ai',()=>1); + } + 'step 1' + if(result.bool){ + player.draw(); + player.chooseUseTarget('jiu',true); + } + event.finish(); + 'step 2' + if(result.bool){ + trigger.excluded.add(player); + game.log(trigger.card,'对',player,'无效'); + } + }, + ai:{ + jiuSustain:true, + skillTagFilter:function(player,tag,name){ + if(name!='phase') return false; + } + } + }, + //龙王 + dclonggong:{ + audio:2, + trigger:{player:'damageBegin4'}, + usable:1, + filter:function(event,player){ + return event.source&&event.source.isAlive(); + }, + logTarget:'source', + check:function(event,player){ + return get.attitude(player,event.source)>=0||player.hp<=Math.max(2,event.num); + }, + content:function(){ + 'step 0' + trigger.cancel(); + 'step 1' + var card=get.cardPile2(function(card){ + return get.type(card,null,false)=='equip'; + }),source=trigger.source; + if(card&&source&&source.isAlive()) source.gain(card,'gain2'); + }, + ai:{ + filterDamage:true, + skillTagFilter:function(player){ + return !player.storage.counttrigger||!player.storage.counttrigger.dclonggong; + }, + }, + }, + dcsitian:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + var colorx=false,hs=player.getCards('he'); + if(hs.length<2) return false; + for(var card of hs){ + if(!lib.filter.cardDiscardable(card,player)) continue; + var color=get.color(card,player); + if(color=='none') continue; + if(!colorx) colorx=color; + else if(colorx!=color) return true; + } + return false; + }, + filterCard:function(card,player){ + var color=get.color(card,player); + if(color=='none') return false; + return !ui.selected.cards.length||get.color(ui.selected.cards[0])!=color; + }, + selectCard:2, + complexCard:true, + prompt:'弃置两张颜色不同的牌并改变天气', + check:(card)=>4.5-get.value(card), + content:function(){ + 'step 0' + var list=['烈日','雷电','大浪','暴雨','大雾'].randomGets(2); + player.chooseButton(true,[ + '请选择执行一个天气', + [list.map(i=>[ + i, + '', + ]),'textbutton'], + ]).set('ai',function(button){ + return lib.skill.dcsitian.weathers[button.link].ai(_status.event.player); + }) + 'step 1' + if(result.bool){ + var choice=result.links[0]; + game.log(player,'将当前天气变更为','#g'+choice); + var next=game.createEvent('dcsitian_weather',false); + next.player=player; + next.setContent(lib.skill.dcsitian.weathers[choice].content); + } + }, + ai:{ + order:8, + result:{ + player:function(player){ + var num1=0,num2=0; + game.countPlayer(function(current){ + if(player==current) return; + var att=get.attitude(player,current); + if(att>0) num1++; + else num2++; + }); + return num2-num1; + }, + }, + }, + subSkill:{ + dawu:{ + trigger:{player:'useCard'}, + forced:true, + charlotte:true, + filter:function(event,player){ + return get.type2(event.card,false)=='basic'; + }, + content:function(){ + trigger.targets.length=0; + trigger.all_excluded=true; + player.removeSkill('dcsitian_dawu'); + }, + mark:true, + marktext:'雾', + intro:{ + name:'司天 - 大雾', + content:'使用的下一张基本牌无效', + }, + }, + }, + weathers:{ + 烈日:{ + description:'你对其他角色造成1点火属性伤害。', + content:function(){ + var targets=game.filterPlayer(current=>current!=player).sortBySeat(); + player.line(targets,'fire'); + for(var target of targets){ + target.damage('fire'); + } + }, + ai:function(player){ + var effect=0; + game.countPlayer(function(current){ + if(current==player) return; + effect+=get.damageEffect(current,player,player,'fire'); + }); + return effect; + }, + }, + 雷电:{ + description:'你令其他角色各进行一次判定。若结果为♠2~9,则其受到3点无来源雷属性伤害。', + content:function(){ + 'step 0' + var targets=game.filterPlayer(current=>current!=player).sortBySeat(); + player.line(targets,'thunder'); + event.targets=targets; + 'step 1' + var target=targets.shift(); + if(!target.isIn()){ + if(targets.length>0) event.redo(); + else{ + event.finish(); + return; + } + } + event.target=target; + event.judgestr=get.translation('shandian'); + target.judge(lib.card.shandian.judge,event.judgestr).judge2=lib.card.shandian.judge2; + //game.delayx(1.5); + 'step 2' + var name='shandian'; + if(event.cancelled&&!event.direct){ + if(lib.card[name].cancel){ + var next=game.createEvent(name+'Cancel'); + next.setContent(lib.card[name].cancel); + next.cards=[]; + next.card=get.autoViewAs({name:name}); + next.player=target; + } + } + else{ + var next=game.createEvent(name); + next.setContent(function(){ + if(result.bool==false){ + player.damage(3,'thunder','nosource'); + } + }); + next._result=result; + next.cards=[]; + next.card=get.autoViewAs({name:name}); + next.player=target; + } + if(targets.length>0) event.goto(1); + }, + ai:function(player){ + var effect=0; + game.countPlayer(function(current){ + if(current==player) return; + effect+=get.damageEffect(current,current,player,'thunder')/5; + }); + return effect; + }, + }, + 大浪:{ + description:'你弃置其他角色装备区内的所有牌(装备区内没有牌的角色改为失去1点体力)。', + content:function(){ + 'step 0' + var targets=game.filterPlayer(current=>current!=player).sortBySeat(); + player.line(targets,'green'); + event.targets=targets; + 'step 1' + var target=targets.shift(); + if(target.isIn()){ + var num=target.countCards('e'); + if(num>0){ + player.discardPlayerCard(target,true,'e',num) + } + else{ + target.loseHp(); + game.delayex(); + } + } + if(targets.length>0) event.redo(); + }, + ai:function(player){ + var effect=0; + game.countPlayer(function(current){ + if(current==player) return; + var es=current.getCards('e'); + if(es.length>0){ + var att=get.attitude(player,current),val=get.value(es,current); + effect-=Math.sqrt(att)*val; + } + else effect+=get.effect(current,{name:'losehp'},player,player); + }); + return effect; + }, + }, + 暴雨:{ + description:'你弃置一名角色的所有手牌。若其没有手牌,则改为令其失去1点体力。', + content:function(){ + 'step 0' + player.chooseTarget('请选择【暴雨】的目标','令目标角色弃置所有手牌。若其没有手牌,则其改为失去1点体力。').set('ai',function(current){ + var es=current.getCards('h'),player=_status.event.player; + if(es.length>0){ + var att=get.attitude(player,current),val=get.value(es,current); + return -Math.sqrt(att)*val; + } + return get.effect(current,{name:'losehp'},player,player); + }) + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + var num=target.countCards('h'); + if(num>0){ + player.discardPlayerCard(target,true,'h',num) + } + else{ + target.loseHp(); + game.delayex(); + } + } + }, + ai:function(player){ + return Math.max.apply(Math,game.filterPlayer(function(current){ + return current!=player + }).map(function(current){ + var es=current.getCards('h'); + if(es.length>0){ + var att=get.attitude(player,current),val=get.value(es,current); + return -Math.sqrt(att)*val; + } + return get.effect(current,{name:'losehp'},player,player); + })); + }, + }, + 大雾:{ + description:'你令所有其他角色获得如下效果:当其使用下一张基本牌时,取消之。', + content:function(){ + var targets=game.filterPlayer(current=>current!=player).sortBySeat(); + player.line(targets); + for(var target of targets) target.addSkill('dcsitian_dawu'); + }, + ai:function(player){ + var effect=0; + game.countPlayer(function(current){ + if(current==player||current.hasSkill('dcsitian_dawu')) return; + effect-=0.5*get.attitude(player,current); + }); + return effect; + }, + }, + }, + }, + //武诸葛 + dcjincui:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + filter:function(event,player){ + return true; + }, + forced:true, + content:function(){ + 'step 0' + var num=0; + for(var i=0;i=player.maxHp) break; + } + } + if(num<1) num=1; + if(num>player.hp) player.recover(num-player.hp); + else if(num0)) break; + top.unshift(cards.shift()); + } + } + bottom=cards; + return [top,bottom]; + } + 'step 2' + var top=result.moved[0]; + var bottom=result.moved[1]; + top.reverse(); + for(var i=0;i=target.hp){ + bool=true; + break; + } + } + } + if(bool) return 0.2; + } + }, + threaten:0.6, + }, + }, + dcqingshi:{ + audio:2, + trigger:{player:'useCard'}, + filter:function(event,player){ + if(!player.isPhaseUsing()||player.hasSkill('dcqingshi_blocker')) return false; + if(player.hasCard(card=>{ + return get.name(card)==event.card.name; + })) return true; + return false; + }, + direct:true, + content:function(){ + 'step 0' + var choices=[]; + var choiceList=[ + '令'+get.translation(trigger.card)+'对其中一个目标角色造成的伤害+1', + '令任意名其他角色各摸一张牌', + '摸'+get.cnNumber(player.hp)+'张牌,然后〖情势〗于本回合失效' + ]; + if(trigger.targets&&trigger.targets.length) choices.push('选项一'); + else choiceList[0]=''+choiceList[0]+'(无目标角色)'; + if(game.countPlayer(i=>i!=player)) choices.push('选项二'); + else choiceList[1]=''+choiceList[1]+''; + if(player.hp>0) choices.push('选项三'); + else choiceList[2]=''+choiceList[1]+'(体力值为0)'; + player.chooseControl(choices,'cancel2').set('choiceList',choiceList).set('prompt',get.prompt('dcqingshi')).set('ai',()=>{ + return _status.event.choice; + }).set('choice',(()=>{ + var choicesx=choices.slice(); + var cards=player.getCards('hs'); + for(var i=0;iget.attitude(player,current)>0); + if(cnt>2){ + return '选项二'; + } + else if(!cnt) choicesx.remove('选项二'); + } + if(get.tag(trigger.card,'damage')&&choicesx.contains('选项一')&&trigger.targets.some(current=>{ + return get.attitude(player,current)<0; + })) return '选项一'; + return 0; + })()); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('dcqingshi'); + game.log(player,'选择了','#y'+result.control); + var index=['选项一','选项二','选项三'].indexOf(result.control)+1; + player.storage.dcqingshi=index; + var next=game.createEvent('dcqingshi_after'); + next.player=player; + next.card=trigger.card; + next.setContent(lib.skill.dcqingshi['content'+index]); + } + }, + content1:function(){ + 'step 0' + player.chooseTarget('令'+get.translation(card)+'对其中一个目标造成的伤害+1',true,(card,player,target)=>{ + return _status.event.targets.contains(target); + }).set('ai',target=>{ + return 2-get.attitude(_status.event.player,target); + }).set('targets',event.getParent().getTrigger().targets); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + player.addTempSkill('dcqingshi_ex'); + if(!player.storage.dcqingshi_ex) player.storage.dcqingshi_ex=[]; + player.storage.dcqingshi_ex.push([target,card]); + } + }, + content2:function(){ + 'step 0' + player.chooseTarget('令任意名其他角色各摸一张牌',[1,Infinity],true,lib.filter.notMe).set('ai',target=>{ + return get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + var targets=result.targets; + targets.sortBySeat(); + player.line(targets); + game.asyncDraw(targets); + game.delayex(); + } + }, + content3:function(){ + 'step 0' + player.draw(player.hp); + player.addTempSkill('dcqingshi_blocker'); + }, + subSkill:{ + ex:{ + trigger:{source:'damageBegin1'}, + filter:function(event,player){ + return player.storage.dcqingshi_ex&&player.storage.dcqingshi_ex.some(info=>{ + return info[0]==event.player&&info[1]==event.card; + }); + }, + forced:true, + charlotte:true, + popup:false, + onremove:true, + content:function(){ + trigger.num++; + for(var i=0;i{ + return get.position(card,true)=='o'&&card.cardid==i; + })) return true; + } + } + return false; + }); + }, + content:function(){ + 'step 0' + var cards=[]; + player.getHistory('lose',function(evt){ + if(evt.getParent()!=trigger) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('dczhizhe')){ + var cardsx=trigger.cards.filter(card=>{ + return get.position(card,true)=='o'&&card.cardid==i; + }); + if(cardsx.length) cards.addArray(cardsx); + } + } + }); + if(cards.length){ + player.gain(cards,'gain2').gaintag.addArray(['dczhizhe','dczhizhe_clear']); + player.addTempSkill('dczhizhe_clear'); + } + }, + mod:{ + ignoredHandcard:function(card,player){ + if(card.hasGaintag('dczhizhe')){ + return true; + } + }, + cardDiscardable:function(card,player,name){ + if(name=='phaseDiscard'&&card.hasGaintag('dczhizhe')){ + return false; + } + }, + }, + }, + clear:{ + charlotte:true, + onremove:function(player){ + player.removeGaintag('dczhizhe_clear'); + }, + mod:{ + cardEnabled2:function(card,player){ + var cards=[]; + if(card.cards) cards.addArray(cards); + if(get.itemtype(card)=='card') cards.push(card); + for(var cardx of cards){ + if(cardx.hasGaintag('dczhizhe_clear')) return false; + } + }, + cardRespondable:function(card,player){ + var cards=[]; + if(card.cards) cards.addArray(cards); + if(get.itemtype(card)=='card') cards.push(card); + for(var cardx of cards){ + if(cardx.hasGaintag('dczhizhe_clear')) return false; + } + }, + cardSavable:function(card,player){ + var cards=[]; + if(card.cards) cards.addArray(cards); + if(get.itemtype(card)=='card') cards.push(card); + for(var cardx of cards){ + if(cardx.hasGaintag('dczhizhe_clear')) return false; + } + }, + } + } + } + }, + //美猴王 + dcjinjing:{ + locked:true, + ai:{ + viewHandcard:true, + skillTagFilter:function(player,tag,arg){ + if(player==arg) return false; + }, + }, + }, + dccibei:{ + audio:2, + trigger:{source:'damageBegin2'}, + logTarget:'player', + filter:function(event,player){ + return player!=event.player&&!player.hasHistory('useSkill',function(evt){ + return evt.skill=='dccibei'&&evt.targets.contains(event.player); + }); + }, + check:function(event,player){ + var target=event.player; + if(get.attitude(player,target)>=0) return true; + return (!player.getStat('skill').ruyijingubang_skill||player.storage.ruyijingubang_skill==1); + }, + content:function(){ + trigger.cancel(); + player.draw(5); + }, + ai:{ + threaten:4.5, + }, + }, + dcruyi:{ + audio:2, + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, + forced:true, + filter:function(event,player){ + return (event.name!='phase'||game.phaseNumber==0)&&!player.isDisabled(1); + }, + content:function(){ + var card=game.createCard2('ruyijingubang','heart',9); + player.$gain2(card,false); + player.equip(card); + }, + mod:{ + canBeGained:function(card,source,player){ + if(card==player.getEquip(1)&&card.name=='ruyijingubang') return false; + }, + canBeDiscarded:function(card,source,player){ + if(card==player.getEquip(1)&&card.name=='ruyijingubang') return false; + }, + cardname:function(card){ + if(get.subtype(card,false)=='equip1') return 'sha'; + }, + cardnature:function(card){ + if(get.subtype(card,false)=='equip1') return false; + }, + targetEnabled:function(card){ + if(get.subtype(card)=='equip1') return false; + }, + cardDiscardable:function(card,player){ + if(card==player.getEquip(1)&&card.name=='ruyijingubang') return false; + }, + cardEnabled2:function(card,player){ + if(card==player.getEquip(1)&&card.name=='ruyijingubang') return false; + }, + }, + group:'dcruyi_blocker', + subSkill:{ + blocker:{ + trigger:{player:['loseBefore','equipBefore','disableEquipBefore']}, + forced:true, + filter:function(event,player){ + if(event.name=='disableEquip') return (event.pos=='equip1'); + var card=player.getEquip(1); + if(!card||card.name!='ruyijingubang') return false; + if(event.name=='equip'){ + return get.subtype(event.card)=='equip1'; + } + return event.cards.contains(card); + }, + content:function(){ + if(trigger.name=='lose') trigger.cards.remove(player.getEquip(1)); + else trigger.cancel(); + }, + }, + }, + }, + ruyijingubang_skill:{ + equipSkill:true, + enable:'phaseUse', + usable:1, + chooseButton:{ + dialog:function(){ + var dialog=ui.create.dialog( + '如意金箍棒:选择变化攻击范围', + [[ + [1,'   ⒈【杀】无次数限制   '], + [2,'   ⒉【杀】的伤害值+1   '], + ],'tdnodes'], + [[ + [3,'   ⒊【杀】不可被响应   '], + [4,'   ⒋【杀】的目标数+1   '], + ],'tdnodes'] + ); + return dialog; + }, + filter:function(button,player){ + return button.link!=player.storage.ruyijingubang_skill; + }, + check:function(button){ + if(button.link==1||button.link==3) return 1; + return 0; + }, + backup:function(links,player){ + return { + audio:'dcruyi', + num:links[0], + popup:'如意金箍棒', + content:function(){ + var num=lib.skill.ruyijingubang_skill_backup.num; + player.storage.ruyijingubang_skill=num; + var card=player.getEquip(1); + if(card&&card.name=='ruyijingubang'){ + card.storage.ruyijingubang_skill=num; + game.log(player,'将',card,'的攻击范围改为'+num) + } + player.markSkill('ruyijingubang_skill'); + }, + } + }, + }, + mod:{ + attackRange:function(player,range){ + if(player.storage.ruyijingubang_skill) return range-3+player.storage.ruyijingubang_skill; + }, + cardUsable:function(card,player,num){ + if(player.storage.ruyijingubang_skill==1&&card.name=='sha') return Infinity; + }, + }, + ai:{ + order:1, + directHit_ai:true, + skillTagFilter:function(player,tag,arg){ + return player.storage.ruyijingubang_skill==3; + }, + effect:{ + player:function(card,player,target,current){ + if(get.tag(card,'damage')>0&&player!=target){ + if(player.getStat('skill').ruyijingubang_skill&&player.storage.ruyijingubang_skill!=1) return; + if(player.hasSkill('dccibei')&&!player.hasHistory('useSkill',function(evt){ + return evt.skill=='dccibei'&&evt.targets.contains(target); + })){ + return [1,3]; + } + } + }, + }, + result:{ + player:function(player){ + if(player.storage.ruyijingubang_skill==1){ + if(!player.hasSha()) return 1; + return 0; + } + else{ + if(player.hasSha()&&player.getCardUsable('sha')<=0) return 1; + return 0; + } + }, + } + }, + intro:{ + name:'如意金箍棒', + content:function(storage){ + if(!storage) storage=3; + return '
  • 攻击范围:'+storage+'
  • '+['你使用【杀】无次数限制。','你使用的【杀】伤害+1。','你使用的【杀】不可被响应。','你使用【杀】选择目标后,可以增加一个额外目标。'][storage-1] + }, + }, + subSkill:{ + backup:{}, + }, + }, + ruyijingubang_effect:{ + equipSkill:true, + trigger:{player:'useCard2'}, + direct:true, + locked:true, + filter:function(event,player){ + if(event.card.name!='sha') return false; + var num=player.storage.ruyijingubang_skill; + if(!num||num==1) return false; + if(num!=4) return true; + var card=event.card; + if(game.hasPlayer(function(current){ + return !event.targets.contains(current)&&lib.filter.targetEnabled2(card,player,current)&&lib.filter.targetInRange(card,player,current); + })){ + return true; + } + return false; + }, + content:function(){ + 'step 0' + var num=player.storage.ruyijingubang_skill; + if(num==4){ + player.chooseTarget(get.prompt('ruyijingubang_effect'),'为'+get.translation(trigger.card)+'额外指定一个目标',function(card,player,target){ + return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target,false); + }).set('sourcex',trigger.targets).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,_status.event.card,player,player); + }).set('card',trigger.card); + } + else{ + player.logSkill('ruyijingubang_effect'); + if(num==2){ + trigger.baseDamage++; + game.log(trigger.card,'的伤害+1'); + } + else if(num==3){ + trigger.directHit.addArray(game.filterPlayer()); + game.log(trigger.card,'不可被响应'); + } + event.finish(); + } + 'step 1' + if(result.bool){ + if(!event.isMine()&&!event.isOnline()) game.delayx(); + event.targets=result.targets; + } + else{ + event.finish(); + } + 'step 2' + player.logSkill('ruyijingubang_effect',event.targets); + trigger.targets.addArray(event.targets); + }, + }, + //涛神 + dcnutao:{ + audio:4, + trigger:{player:'useCardToPlayer'}, + forced:true, + group:'dcnutao_add', + filter:function(event,player){ + if(get.type2(event.card)!='trick') return false; + return event.isFirstTarget&&event.targets.some(i=>i!=player); + }, + content:function(){ + var target=trigger.targets.filter(i=>i!=player).randomGet(); + player.line(target,'thunder'); + target.damage('thunder'); + }, + subSkill:{ + add:{ + audio:'dcnutao', + trigger:{source:'damageSource'}, + filter:function(event,player){ + return event.nature=='thunder'&&player.isPhaseUsing(); + }, + forced:true, + content:function(){ + player.addTempSkill('dcnutao_sha','phaseUseAfter'); + player.addMark('dcnutao_sha',1,false); + } + }, + sha:{ + charlotte:true, + onremove:true, + marktext:'涛', + intro:{ + content:'此阶段使用【杀】的次数上限+#', + }, + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.countMark('dcnutao_sha'); + }, + } + } + } + }, + //魏关羽 + dcdanji:{ + audio:'danji', + skillAnimation:true, + animationColor:'water', + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + juexingji:true, + derivation:['mashu','dcnuzhan'], + filter:function(event,player){ + return player.countCards('h')>player.hp; + }, + content:function(){ + 'step 0' + player.loseMaxHp(); + 'step 1' + player.recover(player.maxHp-player.hp); + player.addSkill('mashu'); + player.addSkill('dcnuchen'); + player.awakenSkill('dcdanji'); + } + }, + dcnuchen:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target.countCards('h')&&target!=player; + }, + content:function(){ + 'step 0' + player.choosePlayerCard(target,true,'h'); + 'step 1' + if(result.bool){ + var card=result.cards[0]; + event.card=card; + player.showCards(card,get.translation(player)+'对'+get.translation(target)+'发动了【怒嗔】'); + } + else event.finish(); + 'step 2' + var suit=get.suit(card); + var str=get.translation(suit); + player.chooseToDiscard('怒嗔:是否弃置至少一张'+str+'牌?','若如此做,你对其造成等量伤害;或点击“取消”,获得其所有'+str+'手牌','he',{suit:suit},[1,Infinity]).set('ai',card=>{ + if(ui.selected.cards.length>=_status.event.num) return 0; + return 6-get.value(card); + }).set('num',function(){ + var eff=get.damageEffect(target,player,player); + if(eff>0){ + if(get.attitude(player,target)>0){ + return 1; + } + var cards=target.getCards('h',{suit:suit}); + if(cards.length>2||get.value(cards)>=6){ + return 0; + } + if(!player.hasSkillTag('jueqing',false,target)&&target.hasSkillTag('filterDamage',null,{player:player})) return 1; + return Infinity; + } + return 0; + }()); + 'step 3' + if(result.bool){ + target.damage(result.cards.length); + } + else{ + var cards=target.getCards('h',{suit:get.suit(card)}); + if(cards.length) player.gain(cards,target,'giveAuto','bySelf'); + } + }, + ai:{ + expose:0.4, + order:10, + result:{ + target:function(player,target){ + return -Math.sqrt(target.countCards('h')); + } + } + } + }, //段巧笑 dccaizhuang:{ audio:2, @@ -660,7 +1829,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:'dcwujie_inf', logTarget:'player', filter:function(event,player){ - return event.getParent().name=='die'&&event.getParent().source==event.player&&event.player!=player; + return event.getParent().name=='die'&&event.getParent().source==event.player&&event.player!=player&&event.getParent().player==player; }, content:function(){ trigger.cancel(); @@ -2679,9 +3848,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'phaseZhunbeiBegin'}, forced:true, - direct:true, content:function(){ 'step 0' + player.recover(); player.chooseTarget('残肆:选择一名其他角色',true,lib.filter.notMe).set('ai',target=>{ var player=_status.event.player; var list=['recover','sha','juedou','huogong']; @@ -2693,8 +3862,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ var target=result.targets[0]; event.target=target; - player.logSkill('dccansi',target); - player.recover(); + player.line(target,'fire'); target.recover(); event.list=['sha','juedou','huogong']; player.addTempSkill('dccansi_draw'); @@ -3127,29 +4295,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, //关宁 - dcxiuwen:{ + dcxiuwen:{ audio:2, - trigger:{player:'useCard'}, - filter:function(event,player){ - return !player.hasAllHistory('useCard',evt=>{ - return event!=evt&&evt.card.name==event.card.name; - }); + trigger:{player:'useCard'}, + filter:function(event,player){ + return !player.getStorage('dcxiuwen').contains(event.card.name); }, - forced:true, - locked:false, + frequent:true, content:function(){ player.draw(); - player.markAuto('dec_xiuwen',player.getAllHistory('useCard').map(evt=>evt.card.name)); + player.markAuto('dcxiuwen',[trigger.card.name]); }, intro:{content:'已使用:$'} - }, - dclongsong:{ - audio:2, - trigger:{player:'phaseUseBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0; - }, + }, + oldlongsong:{ + audio:'dclongsong', + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, getSkills:function(target,player,trigger){ return target.getSkills(null,false).filter(skill=>{ var skills=game.expandSkills([skill]); @@ -3177,35 +4342,121 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return false; }); }, - content:function(){ - 'step 0' - player.chooseCardTarget({ - filterCard:true, - selectCard:1, - filterTarget:function(card,player,target){ - return player!=target; - }, - ai1:function(card){ - return 6-get.value(card); - }, - ai2:function(target){ - var att=get.attitude(_status.event.player,target),trigger=_status.event.getTrigger(),player=_status.event.player; - return lib.skill.dclongsong.getSkills(target,player,trigger).length*3+att/3; - }, - prompt:get.prompt2('dclongsong') - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('dclongsong',target); - event.target=target; - player.line(target,'green'); - player.give(result.cards,target); - var skills=lib.skill.dclongsong.getSkills(target,player,trigger); - if(skills.length){ + content:function(){ + 'step 0' + player.chooseCardTarget({ + filterCard:true, + selectCard:1, + filterTarget:function(card,player,target){ + return player!=target; + }, + ai1:function(card){ + return 6-get.value(card); + }, + ai2:function(target){ + var att=get.attitude(_status.event.player,target),trigger=_status.event.getTrigger(),player=_status.event.player; + return lib.skill.oldlongsong.getSkills(target,player,trigger).length*3+att/3; + }, + prompt:get.prompt2('oldlongsong') + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('oldlongsong',target); + event.target=target; + player.line(target,'green'); + player.give(result.cards,target); + var skills=lib.skill.oldlongsong.getSkills(target,player,trigger); + if(skills.length){ + if(!event.isMine()&&!event.isOnline()) game.delayx(); + target.disableSkill('oldlongsong_back',skills); + target.markAuto('oldlongsong_back',skills); + target.addTempSkill('oldlongsong_back',['phaseUseAfter','phaseAfter']); + var str=''; + for(var i=0; i0; + }, + getSkills:function(target){ + return target.getSkills(null,false).filter(skill=>{ + var str=get.skillInfoTranslation(skill,target); + if(str.indexOf('当你于出牌阶段')!=-1) return true; + var skills=game.expandSkills([skill]); + if(skills.some(skillx=>{ + var info=get.info(skillx); + if(!info||!info.enable) return false; + if(info.enable!='phaseUse'&&info.enable!='chooseToUse'&&(!Array.isArray(info.enable)||!info.enable.contains('phaseUse')&&!info.enable.contains('chooseToUse'))) return false; + if(info.juexingji||info.hiddenSkill||info.charlotte||info.limited||info.dutySkill) return false; + if(info.ai&&info.ai.notemp) return false; + return true; + })) return true; + return false; + }); + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + filterCard:{color:'red'}, + selectCard:1, + position:'he', + filterTarget:function(card,player,target){ + return player!=target; + }, + ai1:function(card){ + return 6-get.value(card); + }, + ai2:function(target){ + var att=get.attitude(_status.event.player,target); + return lib.skill.dclongsong.getSkills(target).length*2+att/2.5; + }, + prompt:get.prompt2('dclongsong') + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('dclongsong',target); + event.target=target; + player.line(target,'green'); + player.give(result.cards,target); + var skills=lib.skill.dclongsong.getSkills(target); + if(skills.length){ if(!event.isMine()&&!event.isOnline()) game.delayx(); target.disableSkill('dclongsong_back',skills); target.markAuto('dclongsong_back',skills); + player.addTempSkill('dclongsong_remove',['phaseUseAfter','phaseAfter']); + player.markAuto('dclongsong_remove',skills); target.addTempSkill('dclongsong_back',['phaseUseAfter','phaseAfter']); var str=''; for(var i=0; iblack){ player.logSkill('dchuiling'); player.recover(); - player.addMark('dchuiling',1); event.finish(); + if(get.color(trigger.card)=='black') mark=true; + event.logged=true; } - else { + else{ if(!event.isMine()&&!event.isOnline()) game.delayx(); - player.chooseTarget(get.prompt('dchuiling'),'弃置一名角色区域里的一张牌',(card,player,target)=>{ - return target.countDiscardableCards(player,'hej')>0; + player.chooseTarget(get.prompt('dchuiling'),'弃置一名角色的一张牌',(card,player,target)=>{ + return target.countDiscardableCards(player,'he')>0; }).set('ai',target=>{ - return get.effect(target,{name:'guohe'},_status.event.player); + return get.effect(target,{name:'guohe_copy2'},_status.event.player); }); + if(get.color(trigger.card)=='red') mark=true; + } + if(mark){ + if(!event.logged) player.logSkill('dchuiling'); + player.addMark('dchuiling',1); + event.logged=true; } 'step 1' if(result.bool){ var target=result.targets[0]; - player.logSkill('dchuiling',target); - player.discardPlayerCard(target,'hej',true); + if(!event.logged) player.logSkill('dchuiling',target); + else player.line(target); + player.discardPlayerCard(target,'he',true); } }, mod:{ @@ -3288,19 +4565,34 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var len=ui.discardPile.childNodes.length; if(!len){ var type=get.type(card); - if(type=='basic'||type=='trick') return num+(get.color(card)=='red'?15:10); + if(type=='basic'||type=='trick'){ + if(player.getDamagedHp()>0){ + return num+(get.color(card)=='red'?15:10); + } + return num+10; + } return; } - if(len>20) return; + if(len>40) return; var red=0,black=0; - for(var card of ui.discardPile.childNodes){ - var color=get.color(card); + for(var i=0;i0){ + return num+(get.color(card)=='red'?15:10); + } + return num+10; + } + return; + } + else{ + var color=get.color(card); + if(color=='red'&&redblack) return num+10; } }, } @@ -3312,6 +4604,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ skillAnimation:true, animationColor:'wood', derivation:['dctaji','dcqinghuang'], + filterCard:()=>false, + selectCard:[0,1], + prompt:function(){ + return '限定技。你可以失去〖汇灵〗,增加'+_status.event.player.countMark('dchuiling')+'点体力上限,然后获得〖踏寂〗和〖清荒〗。' + }, filter:function(event,player){ return player.countMark('dchuiling')>=4; }, @@ -3351,18 +4648,37 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return evt&&evt.hs&&evt.hs.length; }, content:function(){ + 'step 0' var evt=trigger.getParent(); var effects=[ - ['useCard',()=>{ - evt.directHit.addArray(game.players); - game.log(evt.card,'不可被响应'); + ['useCard',function(){ + 'step 0' + var targets=game.filterPlayer(current=>{ + return current.countDiscardableCards(player,'he')&¤t!=player; + }); + if(!targets.length) event.finish(); + else player.chooseTarget('踏寂:弃置其他角色一张牌',true,(card,player,target)=>{ + return _status.event.targets.contains(target); + }).set('targets',targets).set('ai',target=>{ + return get.effect(target,{name:'guohe_copy2'},_status.event.player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + player.discardPlayerCard(target,'he',true); + } }], - ['respond',()=>player.draw()], - ['discard',()=>player.recover()], - ['other',()=>{ + ['respond',function(){ + player.draw(); + }], + ['discard',function(){ + player.recover(); + }], + ['other',function(){ player.addSkill('dctaji_damage'); player.addMark('dctaji_damage',1,false); - game.log(player,'下一次对其他角色造成的伤害+1'); + game.log(player,'下一次对其他角色造成的伤害','#g+1'); }] ]; @@ -3376,7 +4692,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var effect of effects){ if(effect[0]==name){ list.remove(name); - effect[1](); + var next=game.createEvent('dctaji_'+name); + next.player=player; + next.setContent(effect[1]); break; } } @@ -3401,35 +4719,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - dcqinghuang:{ - audio:2, - trigger:{player:'phaseUseBegin'}, - filter:function(event,player){ - return player.maxHp>1; - }, - check:function(event,player){ - var num1=player.countCards('h'); - var num2=player.countCards('h',card=>player.hasValueTarget(card)); - var num3=player.getHandcardLimit(); - if(player.isDamaged()){ - return num2>1||num1-num2-num3>0; - } - else{ - return num2>2+Math.max(0,3-player.hp)||player.hp>2&&num1-num2-num3>2; - } - }, - content:function(){ - player.loseMaxHp(); - player.addTempSkill('dcqinghuang_add'); - player.addMark('dcqinghuang_add',1,false); - }, - subSkill:{ - add:{ - charlotte:true, - onremove:true, - } - } - }, //孟节 dcyinlu:{ audio:2, @@ -4117,7 +5406,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, //伏完 dcmoukui:{ - audio:2, + audio:'moukui', trigger:{player:'useCardToPlayered'}, direct:true, filter:function(event,player){ @@ -4595,8 +5884,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:['damageEnd','phaseZhunbeiBegin']}, direct:true, - group:'dcyuanmo_add', - init:function(player){player.storage.dcyuanmo_range=0}, + group:'dcyuanmo_add', + init:function(player){player.storage.dcyuanmo_range=0}, change:function(player,num){ player.addSkill('dcyuanmo_range'); if(typeof player.storage.dcyuanmo_range!=='number') player.storage.dcyuanmo_range=0; @@ -4667,19 +5956,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - subSkill:{ - add:{ - audio:'dcyuanmo', - trigger:{player:'phaseJieshuBegin'}, - filter:function(event,player){ - return !game.hasPlayer(current=>player.inRange(current)); - }, - prompt2:'令你的攻击范围+1', - check:()=>true, - content:function(){ - lib.skill.dcyuanmo.change(player,1); - }, - }, + subSkill:{ + add:{ + audio:'dcyuanmo', + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return !game.hasPlayer(current=>player.inRange(current)); + }, + prompt2:'令你的攻击范围+1', + check:()=>true, + content:function(){ + lib.skill.dcyuanmo.change(player,1); + }, + }, range:{ charlotte:true, intro:{ @@ -4694,13 +5983,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, } - }, + }, }, //向朗 dckanji:{ audio:2, enable:'phaseUse', usable:2, + filter:function(event,player){ + return player.countCards('h'); + }, content:function(){ 'step 0' player.showHandcards(); @@ -4747,15 +6039,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, dcqianzheng:{ audio:2, - trigger:{target:'useCardToTarget'}, + trigger:{target:'useCardToTargeted'}, usable:2, direct:true, filter:function(event,player){ - return event.player!=player&&(get.type(event.card)=='trick'||event.card.name=='sha'); + return event.player!=player&&(get.type(event.card)=='trick'||event.card.name=='sha')&&player.countCards('he')>1; }, content:function(){ 'step 0' - player.chooseCard(get.prompt2('dcqianzheng'),2,'he',(card,player,target)=>{ + var str=',若重铸的牌中没有'+get.translation(get.type2(trigger.card))+'牌,你于'+get.translation(trigger.cards)+'进入弃牌堆后获得之'; + player.chooseCard(get.prompt('dcqianzheng'),'重铸两张牌'+(trigger.cards.length?str:'')+'。',2,'he',(card,player,target)=>{ var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); return mod=='unchanged'; }).set('ai',card=>{ @@ -4766,6 +6059,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(result.bool){ var cards=result.cards; + player.logSkill('dcqianzheng'); player.loseToDiscardpile(cards); player.draw(cards.length); if(cards.every(card=>get.type2(card)!=get.type2(trigger.card))){ @@ -4800,6 +6094,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.getHandcardLimit()!=player.countCards('h'); }, direct:true, + locked:false, content:function(){ 'step 0' var del=player.getHandcardLimit()-player.countCards('h'); @@ -5102,10 +6397,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return event.type=='discard'&&event.getl(player).cards2.length>0; }, content:function(){ - player.addMark('dcpitian',1,false); + player.addMark('dcpitian_handcard',1,false); + player.addSkill('dcpitian_handcard'); game.log(player,'的手牌上限','#y+1'); }, - intro:{content:'手牌上限+#'}, subSkill:{ draw:{ audio:'dcpitian', @@ -5120,14 +6415,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.getHandcardLimit()-player.countCards('h')>Math.min(2,player.hp-1); }, content:function(){ - player.draw(Math.min(5,player.getHandcardLimit()-player.countCards('h'))); - player.removeMark('dcpitian',player.countMark('dcpitian'),false); + 'step 0' + var num=Math.min(5,player.getHandcardLimit()-player.countCards('h')); + if(num>0) player.draw(num); + 'step 1' + player.removeMark('dcpitian_handcard',player.countMark('dcpitian_handcard'),false); + game.log(player,'重置了','#g【辟田】','增加的手牌上限'); } - } - }, - mod:{ - maxHandcard:function(player,num){ - return num+player.countMark('dcpitian'); + }, + handcard:{ + markimage:'image/card/handcard.png', + intro:{ + content:function(storage,player){ + return '手牌上限+'+storage; + } + }, + charlotte:true, + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('dcpitian_handcard'); + } + }, } }, ai:{ @@ -5971,6 +7279,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ global:'phaseBefore', }, forced:true, + locked:false, direct:true, onremove:['dcsilve','dcsilve_self'], filter:function(event,player){ @@ -6265,6 +7574,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'dying'}, usable:1, forced:true, + locked:false, derivation:'dcshouze', group:['dclianzhi_connect','dclianzhi_reproach'], filter:function(event,player){ @@ -6355,6 +7665,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:'chooseToUse', group:'dcfengying_record', + locked:false, filter:function(event,player){ return player.storage.dcfengying&&player.storage.dcfengying.length&&player.storage.dcfengying.filter(name=>{ return event.filterCard({name:name},player,event); @@ -6731,6 +8042,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:'phaseUse', usable:1, + filter:function(event,player){ + return game.hasPlayer(current=>lib.skill.dcxiangmian.filterTarget(null,player,current)); + }, filterTarget:function(card,player,target){ return !player.getStorage('dcxiangmian').contains(target)&&player!=target; }, @@ -7252,7 +8566,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.delayx(); event.goto(1); 'step 4' - if(game.hasPlayer(target=>target!=player&&target.isDamaged())) player.chooseTarget('梦解:令一名角色回复1点体力',true,function(card,player,target){ + if(game.hasPlayer(target=>target!=player&&target.isDamaged())) player.chooseTarget('梦解:令一名其他角色回复1点体力',true,function(card,player,target){ return target!=player&&target.isDamaged(); }).set('ai',target=>get.recoverEffect(target,player,player)); else event._result={bool:false}; @@ -7888,6 +9202,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gain:{ trigger:{global:'useCardAfter'}, charlotte:true, + forced:true, + popup:false, filter:function(event,player){ return event._dcchongwang; }, @@ -8915,7 +10231,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:'enterGame', }, forced:true, - locked:true, + locked:false, filter:function(event,player){ return (event.name!='phase'||game.phaseNumber==0)&&game.hasPlayer((current)=>current!=player); }, @@ -9422,13 +10738,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 2' var card=result.cards[0]; player.line(targets[0]); - player.showCards(card,get.translation(player)+'对'+get.translation(targets[0])+'发动了【媵语】') + player.showCards(card,get.translation(player)+'对'+get.translation(targets[0])+'发动了【媵予】') event.cards.push(card); player.choosePlayerCard(targets[1],true,'h'); 'step 3' var card=result.cards[0]; player.line(targets[1]); - player.showCards(card,get.translation(player)+'对'+get.translation(targets[1])+'发动了【媵语】') + player.showCards(card,get.translation(player)+'对'+get.translation(targets[1])+'发动了【媵予】') event.cards.push(card); if(get.suit(cards[0],targets[0])==get.suit(cards[1],targets[1])) event.finish(); 'step 4' @@ -9963,6 +11279,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return ui.cardPile.childNodes.length>0; }, frequent:true, + locked:false, content:function(){ 'step 0' var card=false; @@ -11019,8 +12336,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.player.loseHp(); var evt=trigger.getParent('phaseUse'); if(evt&&evt.player==trigger.player) evt.skipped=true; - var num=trigger.player.countMark('dunxi'); - if(num>0) trigger.player.removeMark('dunxi',num); } }, }, @@ -12275,13 +13590,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mark:true, logTarget:function(event,player){ return game.filterPlayer(function(current){ - return current!=player&¤t.hasSkill('dczimu',null,null,false); + return current.hasSkill('dczimu',null,null,false); }).sortBySeat(); }, content:function(){ 'step 0' var list=game.filterPlayer(function(current){ - return current!=player&¤t.hasSkill('dczimu',null,null,false); + return current.hasSkill('dczimu',null,null,false); }); if(list.length>0){ if(list.length==1) list[0].draw(); @@ -12295,7 +13610,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(event.delay) game.delayx(); }, marktext:'牧', - intro:{content:'锁定技。当你受到伤害后,你令所有拥有〖自牧〗的其他角色各摸一张牌,然后你失去〖自牧〗。'}, + intro:{content:'锁定技。当你受到伤害后,你令所有拥有〖自牧〗的角色各摸一张牌,然后你失去〖自牧〗。'}, }, //秦宜禄 piaoping:{ @@ -12636,6 +13951,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcjinggong:{ audio:2, enable:'chooseToUse', + locked:false, mod:{ targetInRange:function(card){ if(card.storage&&card.storage.dcjinggong) return true; @@ -12674,7 +13990,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return event.skill=='dcjinggong'&&event.targets.length>0; }, content:function(){ - trigger.baseDamage=Math.min(3,get.distance(player,trigger.targets[0])); + trigger.baseDamage=Math.min(5,get.distance(player,trigger.targets[0])); }, }, }, @@ -12713,8 +14029,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else event.finish(); 'step 2' - var num=Math.floor(player.countCards('h')/2); - if(num>0) player.chooseToDiscard('h',num,true); + if(player.countCards('h')>0) player.chooseToDiscard('h',1,true); }, }, //蔡瑁张允 @@ -14876,7 +16191,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var hs=player.getCards('h'); player.discard(hs); player.recover(); - player.draw(hs.length+1); + player.draw(hs.length+2); }, }, //马日磾 @@ -15157,6 +16472,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ derivation:'refenyin', trigger:{global:'roundStart'}, forced:true, + locked:false, content:function(){ 'step 0' var next=player.chooseTarget('请选择【预言】的目标',true).set('animate',false).set('ai',function(){ @@ -15309,7 +16625,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.countCards('hs')>0; }, selectCard:function(){ - return [Math.max(1,ui.selected.targets.length),4]; + return [1,4]; }, selectTarget:function(){ var card=get.card(),player=get.player(); @@ -15327,6 +16643,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return true; }, + filterOk:function(){ + if(!ui.selected.targets.length) return false; + var card=get.card(),player=get.player(); + if(card==undefined) return; + var range=[1,Math.max(1,ui.selected.cards.length)] + game.checkMod(card,player,range,'selectTarget',player); + if(range[0]<=ui.selected.targets.length&&range[1]>=ui.selected.targets.length||range[0]==-1) return true; + return false; + }, check:function(card){ var player=_status.event.player,card=get.autoViewAs({name:'sha'},ui.selected.cards.concat(card)); if(game.countPlayer(function(current){ @@ -16667,10 +17992,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!game.hasPlayer(function(current){ return get.distance(target,current,'attack')>2; })){ - var usf=Math.max.apply(Math,function(current){ + var usf=Math.max.apply(Math,game.filterPlayer().map(function(current){ if(target.canUse('sha',current,false)) return get.effect(current,{name:'sha'},target,player); return 0; - }); + })); return att+usf; } return att; @@ -18590,7 +19915,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return game.hasPlayer((current)=>lib.skill.reqingcheng.filterTarget(null,player,current)); }, filterTarget:function(card,player,target){ - return target!=player&&target.hasSex('male')&&target.countCards('h')
  • ⑴你使用【杀】无次数限制。
  • ⑵你使用的【杀】伤害+1。
  • ⑶你使用的【杀】不可被响应。
  • ⑷你使用【杀】选择目标后,可以增加一个额外目标。', + longwang:'龙王', + dclonggong:'龙宫', + dclonggong_info:'每回合限一次。当你受到伤害时,你可以防止此伤害,然后令伤害来源从牌堆中获得一张装备牌。', + dcsitian:'司天', + dcsitian_info:'出牌阶段,你可以弃置两张颜色不同的手牌。系统从所有天气中随机选择两个,你观看这些天气并选择一个执行。
  • 烈日:你对其他角色依次造成1点火属性伤害。
  • 雷电:你令其他角色各进行一次判定。若结果为♠2~9,则其受到3点无来源雷属性伤害。
  • 大浪:你弃置其他角色装备区内的所有牌(装备区内没有牌的角色改为失去1点体力)。
  • 暴雨:你弃置一名角色的所有手牌。若其没有手牌,则改为令其失去1点体力。
  • 大雾:你令所有其他角色获得如下效果:当其使用下一张锦囊牌时,取消之。', + wu_zhugeliang:'武诸葛亮', + dcjincui:'尽瘁', + dcjincui_info:'锁定技。准备阶段,你将体力值回复或失去至等同于牌堆中点数为7的牌数(你的体力值最低因此调整至1)。然后你观看牌堆顶X张牌,将这些牌以任意顺序置于牌堆顶或牌堆底(X为你的体力值)。', + dcqingshi:'情势', + dcqingshi_info:'当你于出牌阶段使用牌时,若你手牌中有同名牌,你可以选择一项:1.令此牌对其中一个目标角色造成的伤害+1;2.令任意名其他角色各摸一张牌;3.摸X张牌,然后〖情势〗于本回合无效(X为你的体力值)。', + dczhizhe:'智哲', + dczhizhe_clear:'invisible', + dczhizhe_info:'限定技。出牌阶段,你可以选择一张手牌并复制之。该复制牌不计入你的手牌上限,且当你使用或打出此牌结算结束后,你获得之,然后你本回合不能再使用或打出此牌。', + ruanji:'阮籍', + dczhaowen:'昭文', + dczhaowen_tag:'昭文', + dczhaowen_info:'出牌阶段开始时,你可以展示所有手牌。然后你于本回合获得如下效果:1.你可以将其中一张黑色牌当做任意一张普通锦囊牌使用(每回合每种牌名限一次);2.当你使用其中的一张红色牌时,你摸一张牌。', + dcjiudun:'酒遁', + dcjiudun_info:'①以你为目标的【酒】(使用方法①)的作用效果改为“目标对应的角色使用的下一张【杀】的伤害基数+1”。②当你成为其他角色使用黑色牌的目标后,若你:未处于【酒】状态,你可以摸一张牌并视为使用一张【酒】;处于【酒】状态,你可以弃置一张手牌令此牌对你无效。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", @@ -29670,6 +31061,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_raoting:'荟萃·绕庭之鸦', sp_yijun:'荟萃·异军突起', sp2_yuxiu:'限定·钟灵毓秀', + sp2_xiyouji:'神话传说', + sp2_wumiao:'限定·武庙', sp_decade:'其他新服武将', }, }; diff --git a/character/standard.js b/character/standard.js index 9aded0138..aec00f645 100755 --- a/character/standard.js +++ b/character/standard.js @@ -1012,7 +1012,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wusheng:{ audio:2, audioname2:{old_guanzhang:'old_fuhun'}, - audioname:['re_guanyu','guanzhang','jsp_guanyu','guansuo','re_guanzhang'], + audioname:['re_guanyu','guanzhang','jsp_guanyu','guansuo','re_guanzhang','dc_jsp_guanyu'], enable:['chooseToRespond','chooseToUse'], filterCard:function(card,player){ if(get.zhu(player,'shouyue')) return true; @@ -1735,7 +1735,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, liuli:{ audio:2, - audioname:['re_daqiao','daxiaoqiao','sb_daqiao'], + audioname:['re_daqiao','daxiaoqiao'], trigger:{target:'useCardToTarget'}, direct:true, preHidden:true, diff --git a/character/tw.js b/character/tw.js index 7ba7f1b5a..21d6c268b 100644 --- a/character/tw.js +++ b/character/tw.js @@ -49,7 +49,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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_wangling:['male','wei',4,['twmibei','twxingqi'],['clan:太原王氏']], tw_zhugeguo:['female','shu',3,['twqirang','twyuhua'],[]], tw_fanchou:['male','qun',4,['twxingluan'],[]], tw_xujing:['male','shu',3,['twboming','twejian'],[]], @@ -82,7 +82,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_quancong:['male','wu',4,['zhenshan']], tw_wujing:['male','wu',4,['twfenghan','twcongji']], tw_wangcan:['male','wei',3,['twdianyi','twyingji','twshanghe']], - tw_wangchang:['male','wei',3,['twkaiji','twshepan']], + tw_wangchang:['male','wei',3,['twkaiji','twshepan'],['clan:太原王氏']], tw_caozhao:['male','wei',4,['twfuzuan','twchongqi']], tw_guohuai:["male","wei",4,["twjingce","yuzhang"]], tw_chengpu:['male','wu',4,['twlihuo','twchunlao']], @@ -534,6 +534,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ effect:{ target:function(card,player,target){ if(!get.tag(card,'damage')) return; + if(target.hp>1) return; var num=0; game.filterPlayer(current=>{ if(current.getStorage('twyanshi').some(i=>target==i)){ @@ -544,6 +545,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var targetx of targets){ num+=targetx.hp; } + if(num>=player.hp) return 0; if(num>0) return [1,0,0,0.5-1.5*num]; } } @@ -2207,8 +2209,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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); + for(var i=0;ilib.filter.cardDiscardable(card,player,'tweqianxi'),'he')) player.chooseToDiscard('he',true); else event.finish(); 'step 2' - if(!result.bool){ + if(!result.bool||!game.hasPlayer(target=>{ + return player!=target&&get.distance(player,target)<=1; + })){ event.finish(); return; } @@ -5828,14 +5836,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseZhunbeiBegin'}, filter:function(event,player){ return game.hasPlayer(function(current){ - return current!=player&¤t.countDiscardableCards('hej',player)>0; + return current!=player&¤t.countDiscardableCards(player,'hej')>0; }); }, direct:true, content:function(){ 'step 0' player.chooseTarget(get.prompt2('twtanfeng'),function(card,player,target){ - return target!=player&&target.countDiscardableCards('hej',player)>0; + return target!=player&&target.countDiscardableCards(player,'hej')>0; }).set('ai',function(target){ var player=_status.event.player,num=1; if(get.attitude(player,target)>0) num=3; @@ -6415,6 +6423,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'phaseZhunbeiBegin'}, direct:true, + locked:false, group:['twxiawei_init','twxiawei_lose','twxiawei_unmark'], content:function(){ 'step 0' @@ -7839,7 +7848,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ '令此牌对'+get.translation(target)+'造成的伤害+'+(num-1)+',此伤害结算完成后,其回复等量的体力值' ]; list.push('摸牌'); - if(target.countDiscardableCards('he',player)) list.push('拆牌'); + if(target.countDiscardableCards(player,'he')) 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(){ @@ -11160,7 +11169,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, twhengjiang:{ - audio:2, + audio:'hengjiang', trigger:{player:'useCardToPlayer'}, filter:function(event,player){ return !player.hasSkill('twhengjiang2')&&event.targets.length==1&&['basic','trick'].contains(get.type(event.card,false))&&player.isPhaseUsing()&&game.hasPlayer(function(current){ @@ -11573,7 +11582,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, twdaoji:{ - audio:2, + audio:'daoji', enable:'phaseUse', usable:1, filter:function(event,player){ @@ -12154,7 +12163,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!lib.inpile.contains('dz_mantianguohai')) lib.inpile.add('dz_mantianguohai'); if(!_status.dz_mantianguohai_suits) _status.dz_mantianguohai_suits=lib.suit.slice(0); var list=_status.dz_mantianguohai_suits.randomRemove(2).map(function(i){ - return game.createCard2('dz_mantianguohai',i,get.rand(1,13)); + return game.createCard2('dz_mantianguohai',i,5); }); if(list.length) player.gain(list,'gain2','log'); }, @@ -12181,7 +12190,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(name=='dz_mantianguohai'){ if(!lib.inpile.contains('dz_mantianguohai')) lib.inpile.add('dz_mantianguohai'); if(!_status.dz_mantianguohai_suits) _status.dz_mantianguohai_suits=lib.suit.slice(0); - if(_status.dz_mantianguohai_suits.length) player.gain(game.createCard2('dz_mantianguohai',_status.dz_mantianguohai_suits.randomRemove(),get.rand(1,13)),'gain2'); + if(_status.dz_mantianguohai_suits.length) player.gain(game.createCard2('dz_mantianguohai',_status.dz_mantianguohai_suits.randomRemove(),5),'gain2'); else{ var card=get.cardPile(function(card){ return card.name==name; @@ -13153,7 +13162,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twtijin:'替巾', twtijin_info:'当你攻击范围内的一名其他角色使用【杀】指定另一名其他角色为目标时,你可以将此【杀】的目标改为你。若如此做,此【杀】结算完成后,你弃置该角色的一张牌。', twxiaolian:'孝廉', - twxiaolian_info:'当一名其他角色使用【杀】指定另一名其他角色为目标时,你可以将此【杀】的目标改为你。若如此做,当你受到此【杀】的伤害后,你可以将一张牌放在此【杀】原目标的武将牌旁,称之为“马”。锁定技,场上的一名角色每有一张“马”,其他角色计算与其的距离便+1。', + twxiaolian_info:'当一名其他角色使用【杀】指定另一名其他角色为目标时,你可以将此【杀】的目标改为你。若如此做,当你受到此【杀】的伤害后,你可以将一张牌置于此【杀】原目标的武将牌旁,称为“马”,且令其获得如下效果:其他角色计算至其的距离+X(X为其武将牌旁的“马”数)。', twqijia:'弃甲', twqijia_info:'出牌阶段,你可以弃置一张装备区内的牌(每种类型的装备牌限一次),然后视为对攻击范围内的一名其他角色使用了一张【杀】。', twzhuchen:'诛綝', @@ -13303,7 +13312,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twchongqi:'宠齐', twchongqi_info:'锁定技。游戏开始时,你令所有角色获得〖非服〗。然后你可减1点体力上限,令一名其他角色获得〖复纂〗。', twfeifu:'非服', - twfeifu_info:'转换技。阴:当你成为【杀】的唯一目标后;阳:当你使用【杀】指定唯一目标后;目标角色须交给使用者一张牌。若此牌为装备牌,则使用者可使用此牌。', + twfeifu_info:'锁定技,转换技。阴:当你成为【杀】的唯一目标后;阳:当你使用【杀】指定唯一目标后;目标角色须交给使用者一张牌。若此牌为装备牌,则使用者可使用此牌。', tw_wangchang:'TW王昶', twkaiji:'开济', twkaiji_info:'准备阶段,你可令至多X名角色各摸一张牌(X为本局游戏内进入过濒死状态的角色数+1)。若有角色以此法获得了非基本牌,则你摸一张牌。', diff --git a/character/xinghuoliaoyuan.js b/character/xinghuoliaoyuan.js index c78b8a349..8de5a6648 100755 --- a/character/xinghuoliaoyuan.js +++ b/character/xinghuoliaoyuan.js @@ -882,7 +882,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, xinfu_gongqing_gz_panjun:{audio:2}, "xinfu_gongqing":{ - audio:true, + audio:2, audioname2:{gz_panjun:'xinfu_gongqing_gz_panjun'}, trigger:{ player:["damageBegin3","damageBegin4"], @@ -1302,7 +1302,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, "xinfu_kannan":{ - audio:true, + audio:2, subSkill:{ phase:{ sub:true, diff --git a/character/yijiang.js b/character/yijiang.js index fa792cbc3..8affc8995 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -569,20 +569,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:['eventNeutralized','shaMiss']}, filter:function(event,player){ if(player.hasSkill('diezhang_used')) return false; - if(event.type!='card'&&event.name!='_wuxie') return false; + if(event.type!='card') return false; var evt=event._neutralize_event; var user,responder; - if(event.name=='_wuxie'){ - var list=game.getGlobalHistory('useCard',evtx=>evtx.getParent()==event).slice(-2); - if(list.length<=1) return false; - user=list[0].player;responder=list[1].player; - } - else if(evt&&evt.name=='_wuxie'){ - var evtx=game.getGlobalHistory('useCard',evtx=>evtx.getParent()==evt)[0]; - user=event.player;responder=evtx.player; + if(event.name=='sha'){ + user=event.player;responder=event.target; } else{ - user=event.player;responder=event.target; + if(evt.type!='card') return false; + user=event.player; + responder=evt.player; } if(!player.storage.diezhang){ if(user!=player||responder==player) return false; @@ -598,16 +594,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' var evt=trigger._neutralize_event; var user,responder; - if(trigger.name=='_wuxie'){ - var list=game.getGlobalHistory('useCard',evtx=>evtx.getParent()==trigger).slice(-2); - user=list[0].player;responder=list[1].player; - } - else if(evt&&evt.name=='_wuxie'){ - var evtx=game.getGlobalHistory('useCard',evtx=>evtx.getParent()==evt)[0]; - user=trigger.player;responder=evtx.player; + if(trigger.name=='sha'){ + user=trigger.player;responder=trigger.target; } else{ - user=trigger.player;responder=trigger.target; + user=trigger.player; + responder=evt.player; } var num=player.storage.duanwan?2:1; event.num=num; @@ -2281,12 +2273,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, xinzongzuo:{ - trigger:{global:'phaseBefore'}, + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, forced:true, - priority:10, audio:'zongzuo', filter:function(event,player){ - return game.phaseNumber==0; + return (event.name!='phase'||game.phaseNumber==0); }, content:function(){ 'step 0' @@ -2413,6 +2407,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:['useCardAfter','respondAfter']}, forced:true, popup:false, + charlotte:true, filter:function(event,player){ return event.skill=='xintaoluan_backup'||event.skill=='xintaoluan5'||event.skill=='xintaoluan4'; }, @@ -2457,7 +2452,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - xintaoluan3:{}, + xintaoluan3:{charlotte:true}, xintaoluan4:{ audio:'taoluan', prompt:'将一张牌当做闪使用', @@ -2554,6 +2549,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xintaoluan6:{ trigger:{global:'phaseAfter'}, silent:true, + charlotte:true, content:function(){ player.storage.xintaoluan=[]; player.storage.xintaoluan2=0; @@ -5084,6 +5080,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:['useCardAfter','respondAfter']}, forced:true, popup:false, + charlotte:true, filter:function(event,player){ return event.skill=='taoluan_backup'||event.skill=='taoluan5'||event.skill=='taoluan4'; }, @@ -5127,7 +5124,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - taoluan3:{}, + taoluan3:{charlotte:true}, taoluan4:{ prompt:'将一张牌当做闪使用', enable:'chooseToUse', @@ -5771,12 +5768,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, zongzuo:{ - trigger:{global:'phaseBefore'}, + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, forced:true, - priority:10, audio:2, filter:function(event,player){ - return game.phaseNumber==0; + return (event.name!='phase'||game.phaseNumber==0); }, content:function(){ 'step 0' @@ -7793,7 +7792,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhaofu:{ unique:true, global:'zhaofu2', - zhuSkill:true + zhuSkill:true, + locked:true, }, zhaofu2:{ mod:{ @@ -9214,7 +9214,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, youdi:{ - audio:true, + audio:2, trigger:{player:'phaseJieshuBegin'}, direct:true, filter:function(event,player){ @@ -10285,6 +10285,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, qiangzhi:{ audio:2, + audioname:['re_zhangsong'], trigger:{player:'phaseUseBegin'}, direct:true, filter:function(event,player){ @@ -12096,6 +12097,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, olddanshou:{ + audio:'danshou', trigger:{source:'damageSource'}, //priority:9, check:function(event,player){ @@ -12887,6 +12889,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, oldrenxin:{ + audio:'renxin', trigger:{global:'dying'}, //priority:6, filter:function(event,player){ @@ -12908,7 +12911,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, renxin:{ trigger:{global:'damageBegin4'}, - audio:3, + audio:2, //priority:6, filter:function(event,player){ return event.player!=player&&event.player.hp==1&&player.countCards('he',{type:'equip'})>0; @@ -13051,7 +13054,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xiansi2:{ enable:'chooseToUse', audio:2, - audioname:['re_liufeng'], + audioname2:{re_liufeng:'rexiansi'}, viewAs:{name:'sha',isCard:true}, filter:function(event,player){ return game.hasPlayer(function(current){ @@ -13580,6 +13583,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caorui:['caorui','old_caorui'], sunziliufang:['dc_sunziliufang','sunziliufang'], liyan:['liyan','old_liyan'], + zhangsong:['re_zhangsong','zhangsong'], }, translate:{ old_huaxiong:'华雄', diff --git a/character/yingbian.js b/character/yingbian.js index d74a3bab0..caec4d51e 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -237,6 +237,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ return player!=event.target&&event.targets.length==1&&(event.card.name=='sha'||get.type(event.card,false)=='trick')&&event.target.countCards('he')>0; }, + locked:false, logTarget:'target', check:function(event,player){ return get.effect(event.target,{name:'guohe_copy2'},player,player)>0; @@ -523,6 +524,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); }, forced:true, + locked:false, content:function(){ 'step 0' var num=0; @@ -578,6 +580,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:['huaiyuan_init','huaiyuan_die'], subSkill:{ init:{ + audio:'huaiyuan', trigger:{ global:'phaseBefore', player:'enterGame', @@ -1182,7 +1185,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, filterCard:()=>false, selectCard:-1, - prompt:'将武将牌横置并视为使用【杀】', + prompt:'将武将牌重置并视为使用【杀】', log:false, check:()=>1, precontent:function(){ @@ -2569,6 +2572,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ taoyin:{ audio:2, trigger:{player:'showCharacterAfter'}, + hiddenSkill:true, logTarget:function(){ return _status.currentPhase; }, @@ -2734,6 +2738,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'showCharacterAfter'}, forced:true, + hiddenSkill:true, filter:function(event,player){ return event.toShow&&event.toShow.contains('jin_xiahouhui'); }, @@ -2843,6 +2848,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'showCharacterAfter'}, forced:true, + locked:false, + hiddenSkill:true, filter:function(event,player){ var target=_status.currentPhase; return player!=target&&target&&target.isAlive()&&event.toShow&&event.toShow.contains('jin_simazhao'); @@ -2854,6 +2861,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tuishi2:{ trigger:{global:'phaseEnd'}, direct:true, + charlotte:true, filter:function(event,player){ var target=_status.currentPhase; return target!=player&&target&&target.isAlive()&&game.hasPlayer(function(current){ @@ -3728,7 +3736,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xuanbei:'选备', xuanbei_info:'①游戏开始时,你从牌堆中获得两张具有应变标签的牌。②每回合限一次。当你使用的具有应变标签的牌结算结束后,你可将此牌对应的所有实体牌交给一名其他角色。', xianwan:'娴婉', - xianwan_info:'①当你需要使用【闪】时,若你的武将牌未横置,则你可以横置武将牌并视为使用【闪】。②当你需要使用【杀】时,若你的武将牌横置,则你可以横置武将牌并视为使用【杀】。', + xianwan_info:'①当你需要使用【闪】时,若你的武将牌未横置,则你可以横置武将牌并视为使用【闪】。②当你需要使用【杀】时,若你的武将牌横置,则你可以重置武将牌并视为使用【杀】。', yangzhi:'杨芷', wanyi:'婉嫕', wanyi_info:'每回合每项限一次。出牌阶段,你可以将一张具有应变效果的牌当做【逐近弃远】/【出其不意】/【水淹七军】/【洞烛先机】使用。', diff --git a/game/asset.js b/game/asset.js index 1c7770b27..51c91e7b2 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.122.2', + 'v1.9.122.3', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -263,6 +263,7 @@ window.noname_asset_list=[ 'audio/die/dc_liuyu.mp3', 'audio/die/dc_luotong.mp3', 'audio/die/dc_lvkuanglvxiang.mp3', + 'audio/die/dc_mengda.mp3', 'audio/die/dc_ruiji.mp3', 'audio/die/dc_sp_jiaxu.mp3', 'audio/die/dc_sunru.mp3', @@ -294,6 +295,7 @@ window.noname_asset_list=[ 'audio/die/dongyun.mp3', 'audio/die/dongzhao.mp3', 'audio/die/dongzhuo.mp3', + 'audio/die/duanqiaoxiao.mp3', 'audio/die/duanwei.mp3', 'audio/die/dufuren.mp3', 'audio/die/duji.mp3', @@ -325,8 +327,10 @@ window.noname_asset_list=[ 'audio/die/gongsunkang.mp3', 'audio/die/gongsunyuan.mp3', 'audio/die/gongsunzan.mp3', + 'audio/die/guanhai.mp3', 'audio/die/guanlu.mp3', 'audio/die/guanning.mp3', + 'audio/die/guānning.mp3', 'audio/die/guanping.mp3', 'audio/die/guanqiujian.mp3', 'audio/die/guanxingzhangbao.mp3', @@ -352,6 +356,7 @@ window.noname_asset_list=[ 'audio/die/gz_liuba.mp3', 'audio/die/gz_liuqi.mp3', 'audio/die/gz_lukang.mp3', + 'audio/die/gz_luxun.mp3', 'audio/die/gz_miheng.mp3', 'audio/die/gz_panjun.mp3', 'audio/die/gz_pengyang.mp3', @@ -457,6 +462,7 @@ window.noname_asset_list=[ 'audio/die/liuhong.mp3', 'audio/die/liuhui.mp3', 'audio/die/liupi.mp3', + 'audio/die/liuqi.mp3', 'audio/die/liushan.mp3', 'audio/die/liuxie.mp3', 'audio/die/liuyan.mp3', @@ -469,11 +475,13 @@ window.noname_asset_list=[ 'audio/die/liwan.mp3', 'audio/die/liyan.mp3', 'audio/die/liyixiejing.mp3', + 'audio/die/longwang.mp3', 'audio/die/luboyan.mp3', 'audio/die/luji.mp3', 'audio/die/lukai.mp3', 'audio/die/lukang.mp3', 'audio/die/luotong.mp3', + 'audio/die/luoxian.mp3', 'audio/die/lusu.mp3', 'audio/die/luxun.mp3', 'audio/die/luyi.mp3', @@ -507,10 +515,12 @@ window.noname_asset_list=[ 'audio/die/mifuren.mp3', 'audio/die/miheng.mp3', 'audio/die/mizhu.mp3', + 'audio/die/mushun.mp3', 'audio/die/nanhualaoxian.mp3', 'audio/die/nashime.mp3', 'audio/die/neo_xuchu.mp3', 'audio/die/neo_zhouyu.mp3', + 'audio/die/new_caoren.mp3', 'audio/die/niufu.mp3', 'audio/die/niujin.mp3', 'audio/die/ns_zanghong.mp3', @@ -543,6 +553,7 @@ window.noname_asset_list=[ 'audio/die/ol_xuhuang.mp3', 'audio/die/ol_xunyu.mp3', 'audio/die/ol_yangyi.mp3', + 'audio/die/ol_yanwen.mp3', 'audio/die/ol_yuanshao.mp3', 'audio/die/ol_yujin.mp3', 'audio/die/ol_zhangyì.mp3', @@ -553,6 +564,7 @@ window.noname_asset_list=[ 'audio/die/old_madai.mp3', 'audio/die/old_quancong.mp3', 'audio/die/old_wangyi.mp3', + 'audio/die/old_zhuhuan.mp3', 'audio/die/panfeng.mp3', 'audio/die/pangde.mp3', 'audio/die/pangdegong.mp3', @@ -625,6 +637,7 @@ window.noname_asset_list=[ 'audio/die/re_jiangwei.mp3', 'audio/die/re_jianyong.mp3', 'audio/die/re_jiaxu.mp3', + 'audio/die/re_jsp_huangyueying.mp3', 'audio/die/re_jsp_pangtong.mp3', 'audio/die/re_jushou.mp3', 'audio/die/re_liaohua.mp3', @@ -692,6 +705,7 @@ window.noname_asset_list=[ 'audio/die/re_zhangjiao.mp3', 'audio/die/re_zhangliang.mp3', 'audio/die/re_zhangliao.mp3', + 'audio/die/re_zhangsong.mp3', 'audio/die/re_zhangyi.mp3', 'audio/die/re_zhangzhang.mp3', 'audio/die/re_zhaoyun.mp3', @@ -703,6 +717,8 @@ window.noname_asset_list=[ 'audio/die/re_zhuhuan.mp3', 'audio/die/re_zhuran.mp3', 'audio/die/re_zhurong.mp3', + 'audio/die/re_zhuzhi.mp3', + 'audio/die/re_zoushi.mp3', 'audio/die/re_zuoci.mp3', 'audio/die/ruanhui.mp3', 'audio/die/ruanyu.mp3', @@ -710,6 +726,7 @@ window.noname_asset_list=[ 'audio/die/sb_caocao.mp3', 'audio/die/sb_caoren.mp3', 'audio/die/sb_chengong.mp3', + 'audio/die/sb_daqiao.mp3', 'audio/die/sb_diaochan.mp3', 'audio/die/sb_fazheng.mp3', 'audio/die/sb_ganning.mp3', @@ -718,9 +735,11 @@ window.noname_asset_list=[ 'audio/die/sb_huaxiong.mp3', 'audio/die/sb_jiangwei.mp3', 'audio/die/sb_liubei.mp3', + 'audio/die/sb_liubiao.mp3', 'audio/die/sb_lvmeng.mp3', 'audio/die/sb_machao.mp3', 'audio/die/sb_pangtong.mp3', + 'audio/die/sb_sunce.mp3', 'audio/die/sb_sunquan.mp3', 'audio/die/sb_sunshangxiang.mp3', 'audio/die/sb_xiahoushi.mp3', @@ -731,6 +750,7 @@ window.noname_asset_list=[ 'audio/die/sb_zhangjiao.mp3', 'audio/die/sb_zhenji.mp3', 'audio/die/sb_zhouyu.mp3', + 'audio/die/shamoke.mp3', 'audio/die/shen_caocao.mp3', 'audio/die/shen_caopi.mp3', 'audio/die/shen_diaochan.mp3', @@ -763,6 +783,7 @@ window.noname_asset_list=[ 'audio/die/shiyi.mp3', 'audio/die/simafu.mp3', 'audio/die/simahui.mp3', + 'audio/die/simalang.mp3', 'audio/die/simashi.mp3', 'audio/die/simayi.mp3', 'audio/die/simazhao.mp3', @@ -795,6 +816,7 @@ window.noname_asset_list=[ 'audio/die/sp_mifuren.mp3', 'audio/die/sp_ol_zhanghe.mp3', 'audio/die/sp_pangde.mp3', + 'audio/die/sp_pangtong.mp3', 'audio/die/sp_pengyang.mp3', 'audio/die/sp_shenpei.mp3', 'audio/die/sp_sufei.mp3', @@ -827,8 +849,10 @@ window.noname_asset_list=[ 'audio/die/sundeng.mp3', 'audio/die/sunhanhua.mp3', 'audio/die/sunhao.mp3', + 'audio/die/sunhong.mp3', 'audio/die/sunjian.mp3', 'audio/die/sunlang.mp3', + 'audio/die/sunliang.mp3', 'audio/die/sunluban.mp3', 'audio/die/sunluyu.mp3', 'audio/die/sunqian.mp3', @@ -836,6 +860,7 @@ window.noname_asset_list=[ 'audio/die/sunru.mp3', 'audio/die/sunshangxiang.mp3', 'audio/die/sunshao.mp3', + 'audio/die/sunwukong.mp3', 'audio/die/sunxiu.mp3', 'audio/die/sunyi.mp3', 'audio/die/sunziliufang.mp3', @@ -844,6 +869,7 @@ window.noname_asset_list=[ 'audio/die/tangji.mp3', 'audio/die/tangzi.mp3', 'audio/die/taoqian.mp3', + 'audio/die/taoshen.mp3', 'audio/die/tengfanglan.mp3', 'audio/die/tenggongzhu.mp3', 'audio/die/tengyin.mp3', @@ -855,18 +881,20 @@ window.noname_asset_list=[ 'audio/die/tw_bingyuan.mp3', 'audio/die/tw_caocao.mp3', 'audio/die/tw_caozhao.mp3', + 'audio/die/tw_chenzhen.mp3', 'audio/die/tw_dongzhao.mp3', - 'audio/die/tw_fengxi.mp3', + 'audio/die/tw_fengxí.mp3', 'audio/die/tw_gexuan.mp3', 'audio/die/tw_haomeng.mp3', 'audio/die/tw_huchuquan.mp3', + 'audio/die/tw_huojun.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_liuhong.mp3', - 'audio/die/tw_liyi.mp3', + 'audio/die/tw_liwei.mp3', 'audio/die/tw_mateng.mp3', 'audio/die/tw_niufudongxie.mp3', 'audio/die/tw_puyangxing.mp3', @@ -881,11 +909,13 @@ window.noname_asset_list=[ 'audio/die/tw_xiahoushang.mp3', 'audio/die/tw_yanxiang.mp3', 'audio/die/tw_yufuluo.mp3', + 'audio/die/tw_yujin.mp3', 'audio/die/tw_zhangji.mp3', 'audio/die/tw_zhangnan.mp3', 'audio/die/tw_zhangning.mp3', 'audio/die/wangcan.mp3', 'audio/die/wangfuzhaolei.mp3', + 'audio/die/wangguan.mp3', 'audio/die/wangji.mp3', 'audio/die/wangjun.mp3', 'audio/die/wanglang.mp3', @@ -930,7 +960,7 @@ window.noname_asset_list=[ 'audio/die/wuyi.mp3', 'audio/die/xf_yiji.mp3', 'audio/die/xia_dianwei.mp3', - 'audio/die/xia_liyan.mp3', + 'audio/die/xia_liyàn.mp3', 'audio/die/xia_lusu.mp3', 'audio/die/xia_tongyuan.mp3', 'audio/die/xia_wangyue.mp3', @@ -946,6 +976,7 @@ window.noname_asset_list=[ 'audio/die/xiahouxuan.mp3', 'audio/die/xiahouyuan.mp3', 'audio/die/xiangchong.mp3', + 'audio/die/xianglang.mp3', 'audio/die/xiangrang.mp3', 'audio/die/xiaoqiao.mp3', 'audio/die/xielingyu.mp3', @@ -976,11 +1007,13 @@ window.noname_asset_list=[ 'audio/die/xin_xusheng.mp3', 'audio/die/xin_yuanshao.mp3', 'audio/die/xin_yufan.mp3', + 'audio/die/xin_yuji.mp3', 'audio/die/xin_zhonghui.mp3', 'audio/die/xin_zhuhuan.mp3', 'audio/die/xin_zhuran.mp3', 'audio/die/xin_zhuzhi.mp3', 'audio/die/xinchang.mp3', + 'audio/die/xinfu_yuji.mp3', 'audio/die/xingdaorong.mp3', 'audio/die/xinping.mp3', 'audio/die/xinxianying.mp3', @@ -1006,6 +1039,7 @@ window.noname_asset_list=[ 'audio/die/yanfuren.mp3', 'audio/die/yangbiao.mp3', 'audio/die/yangfu.mp3', + 'audio/die/yanghong.mp3', 'audio/die/yanghuiyu.mp3', 'audio/die/yangwan.mp3', 'audio/die/yangxiu.mp3', @@ -1016,6 +1050,7 @@ window.noname_asset_list=[ 'audio/die/yanpu.mp3', 'audio/die/yanrou.mp3', 'audio/die/yanwen.mp3', + 'audio/die/yanyan.mp3', 'audio/die/yinfuren.mp3', 'audio/die/yitianjian.mp3', 'audio/die/yj_ganning.mp3', @@ -1054,6 +1089,7 @@ window.noname_asset_list=[ 'audio/die/zhanghuyuechen.mp3', 'audio/die/zhangji.mp3', 'audio/die/zhangjiao.mp3', + 'audio/die/zhangjinyun.mp3', 'audio/die/zhangjunyi.mp3', 'audio/die/zhangkai.mp3', 'audio/die/zhangliao.mp3', @@ -1063,7 +1099,9 @@ window.noname_asset_list=[ 'audio/die/zhangmiao.mp3', 'audio/die/zhangning.mp3', 'audio/die/zhangqiying.mp3', + 'audio/die/zhangrang.mp3', 'audio/die/zhangren.mp3', + 'audio/die/zhangshiping.mp3', 'audio/die/zhangsong.mp3', 'audio/die/zhangwen.mp3', 'audio/die/zhangxingcai.mp3', @@ -1084,6 +1122,7 @@ window.noname_asset_list=[ 'audio/die/zhaoyun.mp3', 'audio/die/zhaozhi.mp3', 'audio/die/zhaozhong.mp3', + 'audio/die/zhenghun.mp3', 'audio/die/zhengxuan.mp3', 'audio/die/zhenji.mp3', 'audio/die/zhiling.mp3', @@ -1096,6 +1135,7 @@ window.noname_asset_list=[ 'audio/die/zhoufang.mp3', 'audio/die/zhoufei.mp3', 'audio/die/zhouqun.mp3', + 'audio/die/zhoushan.mp3', 'audio/die/zhoutai.mp3', 'audio/die/zhouyi.mp3', 'audio/die/zhouyu.mp3', @@ -1489,7 +1529,7 @@ window.noname_asset_list=[ 'audio/skill/clanshangshen2.mp3', 'audio/skill/clanshenjun1.mp3', 'audio/skill/clanshenjun2.mp3', - 'audio/skill/clanxumin_clan_hanhong1.mp3', + 'audio/skill/clanxumin_clan_hanrong1.mp3', 'audio/skill/clanxumin_clan_hanrong2.mp3', 'audio/skill/clanxumin_clan_hanshao1.mp3', 'audio/skill/clanxumin_clan_hanshao2.mp3', @@ -1570,6 +1610,8 @@ window.noname_asset_list=[ 'audio/skill/dcbihuo2.mp3', 'audio/skill/dcbingji1.mp3', 'audio/skill/dcbingji2.mp3', + 'audio/skill/dccaizhuang1.mp3', + 'audio/skill/dccaizhuang2.mp3', 'audio/skill/dccansi1.mp3', 'audio/skill/dccansi2.mp3', 'audio/skill/dcchaixie1.mp3', @@ -1578,12 +1620,16 @@ window.noname_asset_list=[ 'audio/skill/dcchongwang2.mp3', 'audio/skill/dcchongyi1.mp3', 'audio/skill/dcchongyi2.mp3', + 'audio/skill/dccibei1.mp3', + 'audio/skill/dccibei2.mp3', 'audio/skill/dccongshi1.mp3', 'audio/skill/dccongshi2.mp3', 'audio/skill/dccuichuan1.mp3', 'audio/skill/dccuichuan2.mp3', 'audio/skill/dccuijin1.mp3', 'audio/skill/dccuijin2.mp3', + 'audio/skill/dcdanying1.mp3', + 'audio/skill/dcdanying2.mp3', 'audio/skill/dcdeshao1.mp3', 'audio/skill/dcdeshao2.mp3', 'audio/skill/dcdeshi1.mp3', @@ -1622,8 +1668,14 @@ window.noname_asset_list=[ 'audio/skill/dchuace2.mp3', 'audio/skill/dchuagui1.mp3', 'audio/skill/dchuagui2.mp3', + 'audio/skill/dchuayi1.mp3', + 'audio/skill/dchuayi2.mp3', 'audio/skill/dchuishu1.mp3', 'audio/skill/dchuishu2.mp3', + 'audio/skill/dchuizhi1.mp3', + 'audio/skill/dchuizhi2.mp3', + 'audio/skill/dcjianji1.mp3', + 'audio/skill/dcjianji2.mp3', 'audio/skill/dcjianying1.mp3', 'audio/skill/dcjianying2.mp3', 'audio/skill/dcjiaofeng1.mp3', @@ -1632,10 +1684,14 @@ window.noname_asset_list=[ 'audio/skill/dcjieshu2.mp3', 'audio/skill/dcjiezhen1.mp3', 'audio/skill/dcjiezhen2.mp3', + 'audio/skill/dcjijiao1.mp3', + 'audio/skill/dcjijiao2.mp3', 'audio/skill/dcjinggong1.mp3', 'audio/skill/dcjinggong2.mp3', 'audio/skill/dcjingzao1.mp3', 'audio/skill/dcjingzao2.mp3', + 'audio/skill/dcjinjian1.mp3', + 'audio/skill/dcjinjian2.mp3', 'audio/skill/dcjinjie1.mp3', 'audio/skill/dcjinjie2.mp3', 'audio/skill/dcjinjin1.mp3', @@ -1648,8 +1704,12 @@ window.noname_asset_list=[ 'audio/skill/dcjuying2.mp3', 'audio/skill/dckaiji1.mp3', 'audio/skill/dckaiji2.mp3', + 'audio/skill/dckanji1.mp3', + 'audio/skill/dckanji2.mp3', 'audio/skill/dclianzhi1.mp3', 'audio/skill/dclianzhi2.mp3', + 'audio/skill/dclibang1.mp3', + 'audio/skill/dclibang2.mp3', 'audio/skill/dcliehou1.mp3', 'audio/skill/dcliehou2.mp3', 'audio/skill/dcligong1.mp3', @@ -1664,6 +1724,10 @@ window.noname_asset_list=[ 'audio/skill/dcliuzhuan2.mp3', 'audio/skill/dcliying1.mp3', 'audio/skill/dcliying2.mp3', + 'audio/skill/dclonggong1.mp3', + 'audio/skill/dclonggong2.mp3', + 'audio/skill/dclongsong1.mp3', + 'audio/skill/dclongsong2.mp3', 'audio/skill/dcluochong1.mp3', 'audio/skill/dcluochong2.mp3', 'audio/skill/dcmengjie1.mp3', @@ -1672,16 +1736,30 @@ window.noname_asset_list=[ 'audio/skill/dcmieji2.mp3', 'audio/skill/dcmingfa1.mp3', 'audio/skill/dcmingfa2.mp3', + 'audio/skill/dcmiyun1.mp3', + 'audio/skill/dcmiyun2.mp3', 'audio/skill/dcneifa1.mp3', 'audio/skill/dcneifa2.mp3', + 'audio/skill/dcnuchen1.mp3', + 'audio/skill/dcnuchen2.mp3', + 'audio/skill/dcnutao1.mp3', + 'audio/skill/dcnutao2.mp3', + 'audio/skill/dcnutao3.mp3', + 'audio/skill/dcnutao4.mp3', 'audio/skill/dcpeiqi1.mp3', 'audio/skill/dcpeiqi2.mp3', 'audio/skill/dcpijing1.mp3', 'audio/skill/dcpijing2.mp3', 'audio/skill/dcpingxi1.mp3', 'audio/skill/dcpingxi2.mp3', + 'audio/skill/dcpitian1.mp3', + 'audio/skill/dcpitian2.mp3', 'audio/skill/dcpoyuan1.mp3', 'audio/skill/dcpoyuan2.mp3', + 'audio/skill/dcqiangzhi1.mp3', + 'audio/skill/dcqiangzhi2.mp3', + 'audio/skill/dcqianzheng1.mp3', + 'audio/skill/dcqianzheng2.mp3', 'audio/skill/dcqiaomeng1.mp3', 'audio/skill/dcqiaomeng2.mp3', 'audio/skill/dcqingren1.mp3', @@ -1694,12 +1772,16 @@ window.noname_asset_list=[ 'audio/skill/dcquanjian2.mp3', 'audio/skill/dcruizhan1.mp3', 'audio/skill/dcruizhan2.mp3', + 'audio/skill/dcruyi1.mp3', + 'audio/skill/dcruyi2.mp3', 'audio/skill/dcsaowei1.mp3', 'audio/skill/dcsaowei2.mp3', 'audio/skill/dcshibei1.mp3', 'audio/skill/dcshibei2.mp3', 'audio/skill/dcshilie1.mp3', 'audio/skill/dcshilie2.mp3', + 'audio/skill/dcshizhao1.mp3', + 'audio/skill/dcshizhao2.mp3', 'audio/skill/dcshoutan1.mp3', 'audio/skill/dcshoutan2.mp3', 'audio/skill/dcshuaijie1.mp3', @@ -1712,6 +1794,8 @@ window.noname_asset_list=[ 'audio/skill/dcsigong2.mp3', 'audio/skill/dcsilve1.mp3', 'audio/skill/dcsilve2.mp3', + 'audio/skill/dcsitian1.mp3', + 'audio/skill/dcsitian2.mp3', 'audio/skill/dcsuifu1.mp3', 'audio/skill/dcsuifu2.mp3', 'audio/skill/dcsushou1.mp3', @@ -1730,6 +1814,8 @@ window.noname_asset_list=[ 'audio/skill/dcwangyuan2.mp3', 'audio/skill/dcweidang1.mp3', 'audio/skill/dcweidang2.mp3', + 'audio/skill/dcwujie1.mp3', + 'audio/skill/dcwujie2.mp3', 'audio/skill/dcwumei1.mp3', 'audio/skill/dcwumei2.mp3', 'audio/skill/dcwuyuan1.mp3', @@ -1750,12 +1836,16 @@ window.noname_asset_list=[ 'audio/skill/dcxieshou2.mp3', 'audio/skill/dcxinyou1.mp3', 'audio/skill/dcxinyou2.mp3', + 'audio/skill/dcxiuwen1.mp3', + 'audio/skill/dcxiuwen2.mp3', 'audio/skill/dcxuewei1.mp3', 'audio/skill/dcxuewei2.mp3', 'audio/skill/dcxunji1.mp3', 'audio/skill/dcxunji2.mp3', 'audio/skill/dcyaoyi1.mp3', 'audio/skill/dcyaoyi2.mp3', + 'audio/skill/dcyicong1.mp3', + 'audio/skill/dcyicong2.mp3', 'audio/skill/dcyingtu1.mp3', 'audio/skill/dcyingtu2.mp3', 'audio/skill/dcyingyu1.mp3', @@ -1774,6 +1864,8 @@ window.noname_asset_list=[ 'audio/skill/dcyouqi2.mp3', 'audio/skill/dcyuandi1.mp3', 'audio/skill/dcyuandi2.mp3', + 'audio/skill/dcyuanmo1.mp3', + 'audio/skill/dcyuanmo2.mp3', 'audio/skill/dcyuguan1.mp3', 'audio/skill/dcyuguan2.mp3', 'audio/skill/dczecai1.mp3', @@ -1815,6 +1907,7 @@ window.noname_asset_list=[ 'audio/skill/decadezongshi2.mp3', 'audio/skill/dengji1.mp3', 'audio/skill/dengji2.mp3', + 'audio/skill/dengzhi.mp3', 'audio/skill/dezhang1.mp3', 'audio/skill/dezhang2.mp3', 'audio/skill/diancai1.mp3', @@ -1992,6 +2085,8 @@ window.noname_asset_list=[ 'audio/skill/fenli2.mp3', 'audio/skill/fenming1.mp3', 'audio/skill/fenming2.mp3', + 'audio/skill/fenrui1.mp3', + 'audio/skill/fenrui2.mp3', 'audio/skill/fensi1.mp3', 'audio/skill/fensi2.mp3', 'audio/skill/fentian1.mp3', @@ -2359,6 +2454,8 @@ window.noname_asset_list=[ 'audio/skill/jianglue2.mp3', 'audio/skill/jianhui1.mp3', 'audio/skill/jianhui2.mp3', + 'audio/skill/jianliang1.mp3', + 'audio/skill/jianliang2.mp3', 'audio/skill/jianshu1.mp3', 'audio/skill/jianshu2.mp3', 'audio/skill/jianxiong1.mp3', @@ -2559,6 +2656,8 @@ window.noname_asset_list=[ 'audio/skill/junxing1.mp3', 'audio/skill/junxing2.mp3', 'audio/skill/jushou.mp3', + 'audio/skill/jushou1.mp3', + 'audio/skill/jushou2.mp3', 'audio/skill/juxiang1_ol_zhurong1.mp3', 'audio/skill/juxiang1_ol_zhurong2.mp3', 'audio/skill/juxiang1_re_zhurong1.mp3', @@ -2894,6 +2993,8 @@ window.noname_asset_list=[ 'audio/skill/neifa2.mp3', 'audio/skill/new_jiangchi1.mp3', 'audio/skill/new_jiangchi2.mp3', + 'audio/skill/new_reqingnang1.mp3', + 'audio/skill/new_reqingnang2.mp3', 'audio/skill/new_reyaowu_sb_huaxiong1.mp3', 'audio/skill/new_reyaowu_sb_huaxiong2.mp3', 'audio/skill/new_reyaowu1.mp3', @@ -2987,6 +3088,10 @@ window.noname_asset_list=[ 'audio/skill/olcuipo2.mp3', 'audio/skill/old_fuhun1.mp3', 'audio/skill/old_fuhun2.mp3', + 'audio/skill/old_guhuo1.mp3', + 'audio/skill/old_guhuo2.mp3', + 'audio/skill/oldaili1.mp3', + 'audio/skill/oldaili2.mp3', 'audio/skill/oldianjun1.mp3', 'audio/skill/oldianjun2.mp3', 'audio/skill/oldimeng1.mp3', @@ -3015,6 +3120,8 @@ window.noname_asset_list=[ 'audio/skill/olfusong2.mp3', 'audio/skill/olhaoshi1.mp3', 'audio/skill/olhaoshi2.mp3', + 'audio/skill/olhongji1.mp3', + 'audio/skill/olhongji2.mp3', 'audio/skill/olhuanfu1.mp3', 'audio/skill/olhuanfu2.mp3', 'audio/skill/olhunzi_re_sunyi1.mp3', @@ -3043,6 +3150,8 @@ window.noname_asset_list=[ 'audio/skill/olluanji_shen_caopi2.mp3', 'audio/skill/olluanji1.mp3', 'audio/skill/olluanji2.mp3', + 'audio/skill/olmiuyan1.mp3', + 'audio/skill/olmiuyan2.mp3', 'audio/skill/olniepan1.mp3', 'audio/skill/olniepan2.mp3', 'audio/skill/olningwu1.mp3', @@ -3059,12 +3168,18 @@ window.noname_asset_list=[ 'audio/skill/olruoyu2.mp3', 'audio/skill/olshengong1.mp3', 'audio/skill/olshengong2.mp3', + 'audio/skill/olshilu1.mp3', + 'audio/skill/olshilu2.mp3', + 'audio/skill/olshuangxiong1.mp3', + 'audio/skill/olshuangxiong2.mp3', 'audio/skill/olsujian1.mp3', 'audio/skill/olsujian2.mp3', 'audio/skill/oltongduo1.mp3', 'audio/skill/oltongduo2.mp3', 'audio/skill/oltuntian1.mp3', 'audio/skill/oltuntian2.mp3', + 'audio/skill/olxianbi1.mp3', + 'audio/skill/olxianbi2.mp3', 'audio/skill/olxianlve1.mp3', 'audio/skill/olxianlve2.mp3', 'audio/skill/olxiaosi1.mp3', @@ -3074,6 +3189,8 @@ window.noname_asset_list=[ 'audio/skill/olximo1.mp3', 'audio/skill/olximo2.mp3', 'audio/skill/olximo3.mp3', + 'audio/skill/olxinggu1.mp3', + 'audio/skill/olxinggu2.mp3', 'audio/skill/olxiuhao1.mp3', 'audio/skill/olxiuhao2.mp3', 'audio/skill/olxueyi1.mp3', @@ -3082,6 +3199,8 @@ window.noname_asset_list=[ 'audio/skill/olzaowang2.mp3', 'audio/skill/olzaoxian1.mp3', 'audio/skill/olzaoxian2.mp3', + 'audio/skill/olzenrun1.mp3', + 'audio/skill/olzenrun2.mp3', 'audio/skill/olzeyue1.mp3', 'audio/skill/olzeyue2.mp3', 'audio/skill/olzhiba1.mp3', @@ -3148,6 +3267,8 @@ window.noname_asset_list=[ 'audio/skill/qiangxi_ol_dianwei2.mp3', 'audio/skill/qiangxi1.mp3', 'audio/skill/qiangxi2.mp3', + 'audio/skill/qiangzhi_re_zhangsong1.mp3', + 'audio/skill/qiangzhi_re_zhangsong2.mp3', 'audio/skill/qiangzhi1.mp3', 'audio/skill/qiangzhi2.mp3', 'audio/skill/qianhuan1.mp3', @@ -3202,6 +3323,8 @@ window.noname_asset_list=[ 'audio/skill/qimei2.mp3', 'audio/skill/qimou1.mp3', 'audio/skill/qimou2.mp3', + 'audio/skill/qinbao1.mp3', + 'audio/skill/qinbao2.mp3', 'audio/skill/qingcheng1.mp3', 'audio/skill/qingcheng2.mp3', 'audio/skill/qinggang_skill.mp3', @@ -3240,6 +3363,7 @@ window.noname_asset_list=[ 'audio/skill/qingyin2.mp3', 'audio/skill/qingyu1.mp3', 'audio/skill/qingyu2.mp3', + 'audio/skill/qingyu3.mp3', 'audio/skill/qingzhong1.mp3', 'audio/skill/qingzhong2.mp3', 'audio/skill/qinqing1.mp3', @@ -3254,6 +3378,8 @@ window.noname_asset_list=[ 'audio/skill/qinyin2.mp3', 'audio/skill/qinzheng1.mp3', 'audio/skill/qinzheng2.mp3', + 'audio/skill/qiongshou1.mp3', + 'audio/skill/qiongshou2.mp3', 'audio/skill/qirang1.mp3', 'audio/skill/qirang2.mp3', 'audio/skill/qiuan1.mp3', @@ -3304,6 +3430,8 @@ window.noname_asset_list=[ 'audio/skill/ranshang22.mp3', 'audio/skill/reandong1.mp3', 'audio/skill/reandong2.mp3', + 'audio/skill/reanguo1.mp3', + 'audio/skill/reanguo2.mp3', 'audio/skill/reanjian1.mp3', 'audio/skill/reanjian2.mp3', 'audio/skill/reanxu1.mp3', @@ -3384,6 +3512,8 @@ window.noname_asset_list=[ 'audio/skill/rehuoji_ol_sp_zhugeliang2.mp3', 'audio/skill/rehuoji1.mp3', 'audio/skill/rehuoji2.mp3', + 'audio/skill/rehuoshui1.mp3', + 'audio/skill/rehuoshui2.mp3', 'audio/skill/rejianchu1.mp3', 'audio/skill/rejianchu2.mp3', 'audio/skill/rejiangchi1.mp3', @@ -3408,6 +3538,8 @@ window.noname_asset_list=[ 'audio/skill/rejigong2.mp3', 'audio/skill/rejinjiu1.mp3', 'audio/skill/rejinjiu2.mp3', + 'audio/skill/rejiqiao1.mp3', + 'audio/skill/rejiqiao2.mp3', 'audio/skill/rejiushi1.mp3', 'audio/skill/rejiushi2.mp3', 'audio/skill/rejiuyuan1.mp3', @@ -3444,6 +3576,8 @@ window.noname_asset_list=[ 'audio/skill/relieren2.mp3', 'audio/skill/relihuo1.mp3', 'audio/skill/relihuo2.mp3', + 'audio/skill/relinglong1.mp3', + 'audio/skill/relinglong2.mp3', 'audio/skill/relonghun1.mp3', 'audio/skill/relonghun2.mp3', 'audio/skill/relongyin1.mp3', @@ -3505,6 +3639,8 @@ window.noname_asset_list=[ 'audio/skill/reqieting2.mp3', 'audio/skill/reqimou1.mp3', 'audio/skill/reqimou2.mp3', + 'audio/skill/reqingcheng1.mp3', + 'audio/skill/reqingcheng2.mp3', 'audio/skill/reqingguo1.mp3', 'audio/skill/reqingguo2.mp3', 'audio/skill/reqingxi1.mp3', @@ -3551,6 +3687,8 @@ window.noname_asset_list=[ 'audio/skill/reweimu2.mp3', 'audio/skill/rewurong1.mp3', 'audio/skill/rewurong2.mp3', + 'audio/skill/rexiantu1.mp3', + 'audio/skill/rexiantu2.mp3', 'audio/skill/rexianzhen1.mp3', 'audio/skill/rexianzhen2.mp3', 'audio/skill/rexianzhou1.mp3', @@ -3664,8 +3802,10 @@ window.noname_asset_list=[ 'audio/skill/sbbenxi3.mp3', 'audio/skill/sbbiyue1.mp3', 'audio/skill/sbbiyue2.mp3', + 'audio/skill/sbduanliang_false.mp3', + 'audio/skill/sbduanliang_true1.mp3', + 'audio/skill/sbduanliang_true2.mp3', 'audio/skill/sbduanliang1.mp3', - 'audio/skill/sbduanliang2.mp3', 'audio/skill/sbdujiang1.mp3', 'audio/skill/sbdujiang2.mp3', 'audio/skill/sbduojing1.mp3', @@ -3678,10 +3818,16 @@ window.noname_asset_list=[ 'audio/skill/sbfenwei2.mp3', 'audio/skill/sbguidao1.mp3', 'audio/skill/sbguidao2.mp3', + 'audio/skill/sbguose1.mp3', + 'audio/skill/sbguose2.mp3', 'audio/skill/sbhuangtian1.mp3', 'audio/skill/sbhuangtian2.mp3', 'audio/skill/sbhujia1.mp3', 'audio/skill/sbhujia2.mp3', + 'audio/skill/sbhunzi1.mp3', + 'audio/skill/sbhunzi2.mp3', + 'audio/skill/sbjiang1.mp3', + 'audio/skill/sbjiang2.mp3', 'audio/skill/sbjianxiong1.mp3', 'audio/skill/sbjianxiong2.mp3', 'audio/skill/sbjiewei1.mp3', @@ -3713,6 +3859,8 @@ window.noname_asset_list=[ 'audio/skill/sbliegong2.mp3', 'audio/skill/sblijian1.mp3', 'audio/skill/sblijian2.mp3', + 'audio/skill/sbliuli1.mp3', + 'audio/skill/sbliuli2.mp3', 'audio/skill/sbluanji1.mp3', 'audio/skill/sbluanji2.mp3', 'audio/skill/sbluoshen1.mp3', @@ -3736,8 +3884,10 @@ window.noname_asset_list=[ 'audio/skill/sbshipo2.mp3', 'audio/skill/sbtiaoxin1.mp3', 'audio/skill/sbtiaoxin2.mp3', + 'audio/skill/sbtieji_false.mp3', + 'audio/skill/sbtieji_true1.mp3', + 'audio/skill/sbtieji_true2.mp3', 'audio/skill/sbtieji1.mp3', - 'audio/skill/sbtieji2.mp3', 'audio/skill/sbtongye1.mp3', 'audio/skill/sbtongye2.mp3', 'audio/skill/sbxiaoji1.mp3', @@ -3757,18 +3907,26 @@ window.noname_asset_list=[ 'audio/skill/sbyanyu2.mp3', 'audio/skill/sbyaoming1.mp3', 'audio/skill/sbyaoming2.mp3', + 'audio/skill/sbyingzi_sb_sunce1.mp3', + 'audio/skill/sbyingzi_sb_sunce2.mp3', 'audio/skill/sbyingzi1.mp3', 'audio/skill/sbyingzi2.mp3', 'audio/skill/sbzhangwu1.mp3', 'audio/skill/sbzhangwu2.mp3', 'audio/skill/sbzhaxiang1.mp3', 'audio/skill/sbzhaxiang2.mp3', + 'audio/skill/sbzhiba1.mp3', + 'audio/skill/sbzhiba2.mp3', 'audio/skill/sbzhichi1.mp3', 'audio/skill/sbzhichi2.mp3', 'audio/skill/sbzhiheng1.mp3', 'audio/skill/sbzhiheng2.mp3', 'audio/skill/sbzhiji1.mp3', 'audio/skill/sbzhiji2.mp3', + 'audio/skill/sbzishou1.mp3', + 'audio/skill/sbzishou2.mp3', + 'audio/skill/sbzongshi1.mp3', + 'audio/skill/sbzongshi2.mp3', 'audio/skill/scfuhai1.mp3', 'audio/skill/scfuhai2.mp3', 'audio/skill/sghuishi1.mp3', @@ -4057,6 +4215,8 @@ window.noname_asset_list=[ 'audio/skill/suishi2.mp3', 'audio/skill/suizheng1.mp3', 'audio/skill/suizheng2.mp3', + 'audio/skill/suoliang1.mp3', + 'audio/skill/suoliang2.mp3', 'audio/skill/sushou1.mp3', 'audio/skill/sushou2.mp3', 'audio/skill/suzi1.mp3', @@ -4188,6 +4348,7 @@ window.noname_asset_list=[ 'audio/skill/twbudao2.mp3', 'audio/skill/twchaofeng1.mp3', 'audio/skill/twchaofeng2.mp3', + 'audio/skill/twchayi1.mp3', 'audio/skill/twchongqi1.mp3', 'audio/skill/twchongqi2.mp3', 'audio/skill/twchuanshu1.mp3', @@ -4220,6 +4381,8 @@ window.noname_asset_list=[ 'audio/skill/twgongge1.mp3', 'audio/skill/twgongge2.mp3', 'audio/skill/twgongge3.mp3', + 'audio/skill/twhanyu1.mp3', + 'audio/skill/twhanyu2.mp3', 'audio/skill/twjiange1.mp3', 'audio/skill/twjiange2.mp3', 'audio/skill/twjianming1.mp3', @@ -4236,6 +4399,8 @@ window.noname_asset_list=[ 'audio/skill/twjieyu2.mp3', 'audio/skill/twjijiang1.mp3', 'audio/skill/twjijiang2.mp3', + 'audio/skill/twjilun1.mp3', + 'audio/skill/twjilun2.mp3', 'audio/skill/twjingce1.mp3', 'audio/skill/twjingce2.mp3', 'audio/skill/twjizhu2.mp3', @@ -4270,6 +4435,7 @@ window.noname_asset_list=[ 'audio/skill/twmiaolve2.mp3', 'audio/skill/twmutao1.mp3', 'audio/skill/twmutao2.mp3', + 'audio/skill/twmuyue1.mp3', 'audio/skill/twneirao1.mp3', 'audio/skill/twneirao2.mp3', 'audio/skill/twqingkou1.mp3', @@ -4403,6 +4569,8 @@ window.noname_asset_list=[ 'audio/skill/weijing2.mp3', 'audio/skill/weilie1.mp3', 'audio/skill/weilie2.mp3', + 'audio/skill/weimeng1.mp3', + 'audio/skill/weimeng2.mp3', 'audio/skill/weimu1.mp3', 'audio/skill/weimu2.mp3', 'audio/skill/weipo1.mp3', @@ -4439,6 +4607,8 @@ window.noname_asset_list=[ 'audio/skill/wurong2.mp3', 'audio/skill/wushen1.mp3', 'audio/skill/wushen2.mp3', + 'audio/skill/wusheng_dc_jsp_guanyu1.mp3', + 'audio/skill/wusheng_dc_jsp_guanyu2.mp3', 'audio/skill/wusheng_guansuo1.mp3', 'audio/skill/wusheng_guansuo2.mp3', 'audio/skill/wusheng_guanzhang1.mp3', @@ -4502,7 +4672,7 @@ window.noname_asset_list=[ 'audio/skill/xiansi22.mp3', 'audio/skill/xiantu1.mp3', 'audio/skill/xiantu2.mp3', - 'audio/skill/xianwan.mp3', + 'audio/skill/xianwan1.mp3', 'audio/skill/xianwan2.mp3', 'audio/skill/xianwang1.mp3', 'audio/skill/xianwang2.mp3', @@ -4594,9 +4764,10 @@ window.noname_asset_list=[ 'audio/skill/xinfu_fujian2.mp3', 'audio/skill/xinfu_fuyin1.mp3', 'audio/skill/xinfu_fuyin2.mp3', - 'audio/skill/xinfu_gongqing.mp3', 'audio/skill/xinfu_gongqing_gz_panjun1.mp3', 'audio/skill/xinfu_gongqing_gz_panjun2.mp3', + 'audio/skill/xinfu_gongqing1.mp3', + 'audio/skill/xinfu_gongqing2.mp3', 'audio/skill/xinfu_guanchao1.mp3', 'audio/skill/xinfu_guanchao2.mp3', 'audio/skill/xinfu_guanwei1.mp3', @@ -4622,7 +4793,8 @@ window.noname_asset_list=[ 'audio/skill/xinfu_jixu2.mp3', 'audio/skill/xinfu_jiyuan1.mp3', 'audio/skill/xinfu_jiyuan2.mp3', - 'audio/skill/xinfu_kannan.mp3', + 'audio/skill/xinfu_kannan1.mp3', + 'audio/skill/xinfu_kannan2.mp3', 'audio/skill/xinfu_langxi1.mp3', 'audio/skill/xinfu_langxi2.mp3', 'audio/skill/xinfu_lianpian1.mp3', @@ -4723,6 +4895,8 @@ window.noname_asset_list=[ 'audio/skill/xingtu2.mp3', 'audio/skill/xinguidao1.mp3', 'audio/skill/xinguidao2.mp3', + 'audio/skill/xinguixiu1.mp3', + 'audio/skill/xinguixiu2.mp3', 'audio/skill/xingwu1.mp3', 'audio/skill/xingwu2.mp3', 'audio/skill/xingxue1.mp3', @@ -4799,6 +4973,8 @@ window.noname_asset_list=[ 'audio/skill/xinzenhui2.mp3', 'audio/skill/xinzhan1.mp3', 'audio/skill/xinzhan2.mp3', + 'audio/skill/xinzhenjun1.mp3', + 'audio/skill/xinzhenjun2.mp3', 'audio/skill/xinzhiyan1.mp3', 'audio/skill/xinzhiyan2.mp3', 'audio/skill/xinzhuikong1.mp3', @@ -4839,6 +5015,8 @@ window.noname_asset_list=[ 'audio/skill/xsqianxin2.mp3', 'audio/skill/xuanbei1.mp3', 'audio/skill/xuanbei2.mp3', + 'audio/skill/xuancun1.mp3', + 'audio/skill/xuancun2.mp3', 'audio/skill/xuanfeng_boss_lvbu31.mp3', 'audio/skill/xuanfeng_boss_lvbu32.mp3', 'audio/skill/xuanfeng_re_heqi1.mp3', @@ -4968,6 +5146,8 @@ window.noname_asset_list=[ 'audio/skill/yinghun_re_sunce2.mp3', 'audio/skill/yinghun_re_sunjian1.mp3', 'audio/skill/yinghun_re_sunjian2.mp3', + 'audio/skill/yinghun_sb_sunce1.mp3', + 'audio/skill/yinghun_sb_sunce2.mp3', 'audio/skill/yinghun_sunce1.mp3', 'audio/skill/yinghun_sunce2.mp3', 'audio/skill/yinghun_sunjian1.mp3', @@ -5037,7 +5217,8 @@ window.noname_asset_list=[ 'audio/skill/yongsi12.mp3', 'audio/skill/yongsi21.mp3', 'audio/skill/yongsi22.mp3', - 'audio/skill/youdi.mp3', + 'audio/skill/youdi1.mp3', + 'audio/skill/youdi2.mp3', 'audio/skill/youlong1.mp3', 'audio/skill/youlong2.mp3', 'audio/skill/youxu1.mp3', @@ -5104,6 +5285,8 @@ window.noname_asset_list=[ 'audio/skill/zhafu1.mp3', 'audio/skill/zhafu2.mp3', 'audio/skill/zhangba_skill.mp3', + 'audio/skill/zhangming1.mp3', + 'audio/skill/zhangming2.mp3', 'audio/skill/zhangu1.mp3', 'audio/skill/zhangu2.mp3', 'audio/skill/zhangwu1.mp3', @@ -5126,6 +5309,8 @@ window.noname_asset_list=[ 'audio/skill/zhaohuo_re_taoqian2.mp3', 'audio/skill/zhaohuo1.mp3', 'audio/skill/zhaohuo2.mp3', + 'audio/skill/zhaolie1.mp3', + 'audio/skill/zhaolie2.mp3', 'audio/skill/zhaoran1.mp3', 'audio/skill/zhaoran2.mp3', 'audio/skill/zhaosong1.mp3', @@ -5645,6 +5830,7 @@ window.noname_asset_list=[ 'image/card/mianlijinzhen.png', 'image/card/miki_binoculars.png', 'image/card/miki_hydrogladiator.png', + 'image/card/mingguangkai.png', 'image/card/minguangkai.png', 'image/card/mizhilianou.png', 'image/card/molicha.png', @@ -5704,6 +5890,7 @@ window.noname_asset_list=[ 'image/card/rewrite_renwang.png', 'image/card/rewrite_tengjia.png', 'image/card/rewrite_zhuge.png', + 'image/card/ruyijingubang.png', 'image/card/sadengjinhuan.png', 'image/card/sanjian.png', 'image/card/sanlve.png', @@ -5903,6 +6090,7 @@ window.noname_asset_list=[ 'image/character/chunyuqiong.jpg', 'image/character/clan_hanrong.jpg', 'image/character/clan_hanshao.jpg', + 'image/character/clan_wangling.jpg', 'image/character/clan_wuban.jpg', 'image/character/clan_wukuang.jpg', 'image/character/clan_wuxian.jpg', @@ -5933,6 +6121,7 @@ window.noname_asset_list=[ 'image/character/dc_huojun.jpg', 'image/character/dc_jiben.jpg', 'image/character/dc_jiling.jpg', + 'image/character/dc_jsp_guanyu.jpg', 'image/character/dc_liru.jpg', 'image/character/dc_liuba.jpg', 'image/character/dc_liuye.jpg', @@ -6042,6 +6231,7 @@ window.noname_asset_list=[ 'image/character/guanhai.jpg', 'image/character/guanlu.jpg', 'image/character/guanning.jpg', + 'image/character/guānning.jpg', 'image/character/guanping.jpg', 'image/character/guanqiujian.jpg', 'image/character/guansuo.jpg', @@ -6519,12 +6709,14 @@ window.noname_asset_list=[ 'image/character/liwan.jpg', 'image/character/liyan.jpg', 'image/character/liyixiejing.jpg', + 'image/character/longwang.jpg', 'image/character/longyufei.jpg', 'image/character/luji.jpg', 'image/character/lukai.jpg', 'image/character/lukang.jpg', 'image/character/luotong.jpg', 'image/character/luoxian.jpg', + 'image/character/lushi.jpg', 'image/character/lusu.jpg', 'image/character/luxun.jpg', 'image/character/luyi.jpg', @@ -6910,6 +7102,7 @@ window.noname_asset_list=[ 'image/character/re_jianyong.jpg', 'image/character/re_jiaxu.jpg', 'image/character/re_jikang.jpg', + 'image/character/re_jsp_huangyueying.jpg', 'image/character/re_jsp_pangtong.jpg', 'image/character/re_jushou.jpg', 'image/character/re_kanze.jpg', @@ -6993,6 +7186,7 @@ window.noname_asset_list=[ 'image/character/re_zhangjiao.jpg', 'image/character/re_zhangliang.jpg', 'image/character/re_zhangliao.jpg', + 'image/character/re_zhangsong.jpg', 'image/character/re_zhangyi.jpg', 'image/character/re_zhangzhang.jpg', 'image/character/re_zhaoyun.jpg', @@ -7008,11 +7202,13 @@ window.noname_asset_list=[ 'image/character/re_zoushi.jpg', 'image/character/re_zuoci.jpg', 'image/character/ruanhui.jpg', + 'image/character/ruanji.jpg', 'image/character/ruanyu.jpg', 'image/character/ruiji.jpg', 'image/character/sb_caocao.jpg', 'image/character/sb_caoren.jpg', 'image/character/sb_chengong.jpg', + 'image/character/sb_daqiao.jpg', 'image/character/sb_diaochan.jpg', 'image/character/sb_fazheng.jpg', 'image/character/sb_ganning.jpg', @@ -7021,9 +7217,11 @@ window.noname_asset_list=[ 'image/character/sb_huaxiong.jpg', 'image/character/sb_jiangwei.jpg', 'image/character/sb_liubei.jpg', + 'image/character/sb_liubiao.jpg', 'image/character/sb_lvmeng.jpg', 'image/character/sb_machao.jpg', 'image/character/sb_pangtong.jpg', + 'image/character/sb_sunce.jpg', 'image/character/sb_sunquan.jpg', 'image/character/sb_sunshangxiang.jpg', 'image/character/sb_xiahoushi.jpg', @@ -7161,6 +7359,7 @@ window.noname_asset_list=[ 'image/character/sunru.jpg', 'image/character/sunshangxiang.jpg', 'image/character/sunshao.jpg', + 'image/character/sunwukong.jpg', 'image/character/sunxiu.jpg', 'image/character/sunyi.jpg', 'image/character/sunziliufang.jpg', @@ -7251,6 +7450,7 @@ window.noname_asset_list=[ 'image/character/tangji.jpg', 'image/character/tangzi.jpg', 'image/character/taoqian.jpg', + 'image/character/taoshen.jpg', 'image/character/tengfanglan.jpg', 'image/character/tenggongzhu.jpg', 'image/character/tengyin.jpg', @@ -7366,6 +7566,7 @@ window.noname_asset_list=[ 'image/character/wenqin.jpg', 'image/character/wenyang.jpg', 'image/character/wolongfengchu.jpg', + 'image/character/wu_zhugeliang.jpg', 'image/character/wuanguo.jpg', 'image/character/wuban.jpg', 'image/character/wufan.jpg', @@ -7396,6 +7597,7 @@ window.noname_asset_list=[ 'image/character/xiahouxuan.jpg', 'image/character/xiahouyuan.jpg', 'image/character/xiangchong.jpg', + 'image/character/xianglang.jpg', 'image/character/xiaoqiao.jpg', 'image/character/xielingyu.jpg', 'image/character/xin_baosanniang.jpg', @@ -7582,6 +7784,7 @@ window.noname_asset_list=[ 'image/character/zhangqiying.jpg', 'image/character/zhangrang.jpg', 'image/character/zhangren.jpg', + 'image/character/zhangshiping.jpg', 'image/character/zhangsong.jpg', 'image/character/zhangwen.jpg', 'image/character/zhangxingcai.jpg', @@ -7602,6 +7805,7 @@ window.noname_asset_list=[ 'image/character/zhaoyun.jpg', 'image/character/zhaozhi.jpg', 'image/character/zhaozhong.jpg', + 'image/character/zhenghun.jpg', 'image/character/zhengxuan.jpg', 'image/character/zhenji.jpg', 'image/character/zhonghui.jpg', @@ -7612,6 +7816,7 @@ window.noname_asset_list=[ 'image/character/zhoufang.jpg', 'image/character/zhoufei.jpg', 'image/character/zhouqun.jpg', + 'image/character/zhoushan.jpg', 'image/character/zhoutai.jpg', 'image/character/zhouyi.jpg', 'image/character/zhouyu.jpg', diff --git a/game/game.js b/game/game.js index 774d556b1..e416b907b 100644 --- a/game/game.js +++ b/game/game.js @@ -1064,6 +1064,9 @@ big:'105%', vbig:'110%', ebig:'120%', + eebig:'150%', + eeebig:'180%', + eeeebig:'200%', }, onclick:function(zoom){ game.saveConfig('ui_zoom',zoom); @@ -1074,6 +1077,9 @@ case 'big':zoom=1.05;break; case 'vbig':zoom=1.1;break; case 'ebig':zoom=1.2;break; + case 'eebig':zoom=1.5;break; + case 'eeebig':zoom=1.8;break; + case 'eeeebig':zoom=2;break; default:zoom=1; } game.documentZoom=game.deviceZoom*zoom; @@ -3842,7 +3848,7 @@ }, import_data_button:{ name:'
    '+ - ''+ + ''+ '
    ', clear:true, }, @@ -7472,7 +7478,7 @@ if(ua.indexOf('android')!=-1){ lib.device='android'; } - else if(ua.indexOf('iphone')!=-1||ua.indexOf('ipad')!=-1){ + else if(ua.indexOf('iphone')!=-1||ua.indexOf('ipad')!=-1||ua.indexOf('macintosh')!=-1){ lib.device='ios'; } lib.assetURL=noname_inited; @@ -9525,17 +9531,38 @@ }, parsex:function(func){ var str=func.toString(); + //获取第一个 { 后的所有字符 str=str.slice(str.indexOf('{')+1); + //func中要写步骤的话,必须要写step 0 if(str.indexOf('step 0')==-1){ - str='{if(event.step==1) {event.finish();return;}'+str; - } - else{ - for(var k=1;k<99;k++){ - if(str.indexOf('step '+k)==-1) break; - str=str.replace(new RegExp("'step "+k+"'",'g'),"break;case "+k+":"); - str=str.replace(new RegExp('"step '+k+'"','g'),"break;case "+k+":"); + str='{if(event.step==1) {event.finish();return;}\n'+str; + }else{ + var skip=0; + //每层最多找99个step + for (var k=0;k<99;k++) { + //正则表达式 + var reg=new RegExp(`['"]step ${k}['"]`); + var result=str.slice(skip).match(reg); + if(result==null) break; + var insertStr; + if(k==0){ + insertStr=`switch(step){case 0:`; + }else{ + insertStr=`break;case ${k}:`; + } + var copy=str; + copy=copy.slice(0,skip+result.index)+insertStr+copy.slice(skip+result.index+result[0].length); + //测试是否有错误 + try{ + new Function(copy); + str=copy; + skip+=result.index+insertStr.length; + }catch(error){ + k--; + skip+=result.index+result[0].length; + } } - str=str.replace(/'step 0'|"step 0"/,'if(event.step=='+k+') {event.finish();return;}switch(step){case 0:'); + str=`if(event.step==${k}){event.finish();return;}`+str; } return (new Function('event','step','source','player','target','targets', 'card','cards','skill','forced','num','trigger','result', @@ -11204,6 +11231,7 @@ dialog.close(); },1000); },str); + game.trySkillAudio(event.getParent().name+'_'+(event.result.bool?'true'+mes:'false'),player); game.delay(2); 'step 6' game.broadcastAll(function(){ @@ -11428,10 +11456,10 @@ if(event.cards[1].length) target.$give(event.cards[1],player,false); "step 2" for(var i=0;i{ + return !cards.contains(card)||!player.getCards('hejsx').contains(card); + }) + } + if(i[1].length>0) i[0].$draw(i[1].length); } break; case 'gain': game.delay(0,get.delayx(700,700)); for(var i of event.gain_list){ if(get.itemtype(i[1])=='card') i[1]=[i[1]]; - i[0].$gain(i[1].length); + if(event._lose){ + i[1]=i[1].filter(card=>{ + return !cards.contains(card)||!player.getCards('hejsx').contains(card); + }) + } + if(i[1].length>0) i[0].$gain(i[1].length); } break; case 'gain2': case 'draw2': game.delay(0,get.delayx(500,500)); for(var i of event.gain_list){ if(get.itemtype(i[1])=='card') i[1]=[i[1]]; - i[0].$gain2(i[1]); + if(event._lose){ + i[1]=i[1].filter(card=>{ + return !cards.contains(card)||!player.getCards('hejsx').contains(card); + }) + } + if(i[1].length>0) i[0].$gain2(i[1]); } break; case 'give': case 'giveAuto': @@ -13315,6 +13361,11 @@ game.delay(0,get.delayx(500,500)); for(var i of event.gain_list){ if(get.itemtype(i[1])=='card') i[1]=[i[1]]; + if(event._lose){ + i[1]=i[1].filter(card=>{ + return !cards.contains(card)||!player.getCards('hejsx').contains(card); + }) + } var shown=i[1].slice(0),hidden=[]; if(event.animate=='giveAuto'){ for(var card of i[1]){ @@ -13332,11 +13383,13 @@ event.finish(); } for(var i of event.gain_list){ - var next=i[0].gain(i[1]); - next.getlx=false; - if(event.visible) next.visible=true; - if(event.giver) next.giver=event.giver; - if(event.gaintag) next.gaintag.addArray(event.gaintag); + if(i[1].length>0){ + var next=i[0].gain(i[1]); + next.getlx=false; + if(event.visible) next.visible=true; + if(event.giver) next.giver=event.giver; + if(event.gaintag) next.gaintag.addArray(event.gaintag); + } } 'step 2' game.delayx(); @@ -15300,7 +15353,18 @@ },player,card); } if(event.animate!=false&&event.line!=false){ - if((card.name=='wuxie'||card.name=='youdishenru')&&event.getParent().source){ + if(card.name=='wuxie'&&event.getParent()._info_map){ + var evtmap=event.getParent()._info_map; + if(evtmap._source) evtmap=evtmap._source; + var lining=(evtmap.multitarget?evtmap.targets:evtmap.target)||event.player; + if(Array.isArray(lining)&&event.getTrigger().name=='jiedao'){ + player.line(lining[0],'green'); + } + else{ + player.line(lining,'green'); + } + } + else if(card.name=='youdishenru'&&event.getParent().source){ var lining=event.getParent().sourcex||event.getParent().source2||event.getParent().source; if(lining==player&&event.getParent().sourcex2){ lining=event.getParent().sourcex2; @@ -15683,7 +15747,7 @@ } //delete player.using; if(document.getElementsByClassName('thrown').length){ - if(event.delayx!==false) game.delayx(); + if(event.delayx!==false&&get.info(event.card,false).finalDelay!==false) game.delayx(); } else{ event.finish(); @@ -15865,6 +15929,7 @@ event.sourceSkill=logInfo.sourceSkill; event.type=logInfo.type; player.getHistory('useSkill').push(logInfo); + event.trigger('useSkill'); "step 1" var info=get.info(event.skill); if(info&&info.contentBefore){ @@ -16143,8 +16208,8 @@ 'step 1' game.loseAsync({ gain_list:[ - [player,event.cards2], - [target,event.cards1] + [player,event.cards2.filterInD()], + [target,event.cards1.filterInD()] ], }).setContent('gaincardMultiple'); 'step 2' @@ -16236,6 +16301,17 @@ cards.splice(i--,1); } } + else if(event.losing_map){ + for(var id in event.losing_map){ + if(event.losing_map[id][0].contains(cards[i])){ + var source=(_status.connectMode?lib.playerOL:game.playerMap)[id]; + var hs=source.getCards('hejsx'); + if(hs.contains(cards[i])){ + cards.splice(i--,1); + } + } + } + } } if(cards.length==0){ event.finish(); @@ -16427,6 +16503,17 @@ cards.splice(i--,1); } } + else if(event.losing_map){ + for(var id in event.losing_map){ + if(event.losing_map[id][0].contains(cards[i])){ + var source=(_status.connectMode?lib.playerOL:game.playerMap)[id]; + var hs=source.getCards('hejsx'); + if(hs.contains(cards[i])){ + cards.splice(i--,1); + } + } + } + } } if(cards.length==0){ event.finish(); @@ -17234,7 +17321,10 @@ equip:function(){ "step 0" var owner=get.owner(card) - if(owner) owner.lose(card,ui.special,'visible').set('type','equip').set('getlx',false); + if(owner){ + event.owner=owner; + owner.lose(card,ui.special,'visible').set('type','equip').set('getlx',false); + } else if(get.position(card)=='c') event.updatePile=true; "step 1" if(event.cancelled){ @@ -17250,6 +17340,12 @@ return; } } + else if(event.owner){ + if(event.owner.getCards('hejsx').contains(card)){ + event.finish(); + return; + } + } if(event.draw){ game.delay(0,300); player.$draw(card); @@ -17277,7 +17373,7 @@ player.$throw(current); } event.swapped=true; - event.redo(); + //event.redo(); } "step 4" if(player.isMin() || player.countCards('e',{subtype:get.subtype(card)})){ @@ -17340,6 +17436,13 @@ return; } } + else if(event.relatedLose){ + var owner=event.relatedLose.player; + if(owner.getCards('hejsx').contains(card)){ + event.finish(); + return; + } + } cards[0].fix(); cards[0].style.transform=''; cards[0].classList.remove('drawinghidden'); @@ -17762,7 +17865,9 @@ "step 0" player.lose(cards,ui.special).set('getlx',false); "step 1" - target.directgains(cards,null,event.tag) + var cards=event.cards.slice(0); + cards.removeArray(player.getCards('hejsx')); + if(cards.length) target.directgains(cards,null,event.tag) }); return next; }, @@ -22370,6 +22475,16 @@ evt.after.push(next); next.setContent('emptyEvent'); player.getHistory('useSkill').push(logInfo); + //尽可能别往这写插入结算 + //不能用来终止技能发动!!! + var next2=game.createEvent('logSkillBegin',false); + next2.player=player; + next2.forceDie=true; + for(var i in logInfo){ + if(i=='event') next2.log_event=logInfo[i]; + else next2[i]=logInfo[i]; + } + next2.setContent('emptyEvent'); } if(this._hookTrigger){ for(var i=0;i确定'; importVideo.lastChild.onclick=function(){ var fileToLoad = importVideo.firstChild.files[0]; @@ -46542,6 +46674,9 @@ case 'big':zoom=1.05;break; case 'vbig':zoom=1.1;break; case 'ebig':zoom=1.2;break; + case 'eebig':zoom=1.5;break; + case 'eeebig':zoom=1.8;break; + case 'eeeebig':zoom=2;break; default:zoom=1; } game.documentZoom=game.deviceZoom*zoom; diff --git a/game/update.js b/game/update.js index 9e10e0a09..5ff22b28d 100644 --- a/game/update.js +++ b/game/update.js @@ -1,31 +1,30 @@ window.noname_update={ - version:'1.9.122.2', - update:'1.9.122.1', + version:'1.9.122.3', + update:'1.9.122.2', changeLog:[ - '整合@copcap @shijian @disgrace2013的Pull Request', - '《江山如故·起》许劭及其配套机制', - '十周年孟达、段巧笑、张瑾云', + '整合@copcap @shijian @PBK-B的Pull Request', + '增加大量新武将', '其他技能调整和bug修复', ], files:[ //'LICENSE', - //'card/extra.js', + 'card/extra.js', //'card/gujian.js', //'card/guozhan.js', //'card/gwent.js', //'card/huanlekapai.js', //'card/mtg.js', - //'card/sp.js', - //'card/standard.js', + 'card/sp.js', + 'card/standard.js', //'card/swd.js', //'card/yunchou.js', //'card/yingbian.js', //'card/yongjian.js', //'card/zhenfa.js', //'card/zhulu.js', - //'character/clan.js', + 'character/clan.js', 'character/diy.js', - //'character/extra.js', + 'character/extra.js', //'character/hearth.js', //'character/gujian.js', //'character/gwent.js', @@ -33,19 +32,19 @@ 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/rank.js', 'character/refresh.js', - //'character/sb.js', + 'character/sb.js', 'character/shenhua.js', 'character/sp.js', 'character/sp2.js', - //'character/standard.js', + 'character/standard.js', 'character/tw.js', //'character/swd.js', //'character/xianjian.js', - //'character/xinghuoliaoyuan.js', + 'character/xinghuoliaoyuan.js', 'character/yijiang.js', 'character/yingbian.js', //'character/yxs.js', @@ -61,11 +60,11 @@ window.noname_update={ //'mode/boss.js', //'mode/brawl.js', //'mode/chess.js', - //'mode/connect.js', - //'mode/doudizhu.js', - //'mode/guozhan.js', + 'mode/connect.js', + 'mode/doudizhu.js', + 'mode/guozhan.js', //'mode/identity.js', - 'mode/single.js', + //'mode/single.js', //'mode/stone.js', //'mode/tafang.js', //'mode/versus.js', diff --git a/image/card/ruyijingubang.png b/image/card/ruyijingubang.png new file mode 100644 index 000000000..f4a18dc92 Binary files /dev/null and b/image/card/ruyijingubang.png differ diff --git a/image/character/clan_wangling.jpg b/image/character/clan_wangling.jpg new file mode 100644 index 000000000..c961972a4 Binary files /dev/null and b/image/character/clan_wangling.jpg differ diff --git a/image/character/dc_jsp_guanyu.jpg b/image/character/dc_jsp_guanyu.jpg new file mode 100644 index 000000000..43b35914c Binary files /dev/null and b/image/character/dc_jsp_guanyu.jpg differ diff --git a/image/character/guānning.jpg b/image/character/guānning.jpg new file mode 100644 index 000000000..cbf4f6e48 Binary files /dev/null and b/image/character/guānning.jpg differ diff --git a/image/character/longwang.jpg b/image/character/longwang.jpg new file mode 100644 index 000000000..3cefad4ef Binary files /dev/null and b/image/character/longwang.jpg differ diff --git a/image/character/lushi.jpg b/image/character/lushi.jpg new file mode 100644 index 000000000..bcaeef4c2 Binary files /dev/null and b/image/character/lushi.jpg differ diff --git a/image/character/re_jsp_huangyueying.jpg b/image/character/re_jsp_huangyueying.jpg new file mode 100644 index 000000000..4efb23bbe Binary files /dev/null and b/image/character/re_jsp_huangyueying.jpg differ diff --git a/image/character/re_zhangsong.jpg b/image/character/re_zhangsong.jpg new file mode 100644 index 000000000..62016f4cb Binary files /dev/null and b/image/character/re_zhangsong.jpg differ diff --git a/image/character/ruanji.jpg b/image/character/ruanji.jpg new file mode 100644 index 000000000..1322378ca Binary files /dev/null and b/image/character/ruanji.jpg differ diff --git a/image/character/sb_daqiao.jpg b/image/character/sb_daqiao.jpg new file mode 100644 index 000000000..87a44fc0c Binary files /dev/null and b/image/character/sb_daqiao.jpg differ diff --git a/image/character/sb_liubiao.jpg b/image/character/sb_liubiao.jpg new file mode 100644 index 000000000..76a991f60 Binary files /dev/null and b/image/character/sb_liubiao.jpg differ diff --git a/image/character/sb_sunce.jpg b/image/character/sb_sunce.jpg new file mode 100644 index 000000000..638da8492 Binary files /dev/null and b/image/character/sb_sunce.jpg differ diff --git a/image/character/sunwukong.jpg b/image/character/sunwukong.jpg new file mode 100644 index 000000000..69ae873c1 Binary files /dev/null and b/image/character/sunwukong.jpg differ diff --git a/image/character/taoshen.jpg b/image/character/taoshen.jpg new file mode 100644 index 000000000..014c4b842 Binary files /dev/null and b/image/character/taoshen.jpg differ diff --git a/image/character/wu_zhugeliang.jpg b/image/character/wu_zhugeliang.jpg new file mode 100644 index 000000000..aa76de083 Binary files /dev/null and b/image/character/wu_zhugeliang.jpg differ diff --git a/image/character/xianglang.jpg b/image/character/xianglang.jpg new file mode 100644 index 000000000..ff08fa6b2 Binary files /dev/null and b/image/character/xianglang.jpg differ diff --git a/image/character/zhangshiping.jpg b/image/character/zhangshiping.jpg new file mode 100644 index 000000000..6e12e83ad Binary files /dev/null and b/image/character/zhangshiping.jpg differ diff --git a/image/character/zhenghun.jpg b/image/character/zhenghun.jpg new file mode 100644 index 000000000..0080b9c56 Binary files /dev/null and b/image/character/zhenghun.jpg differ diff --git a/image/character/zhoushan.jpg b/image/character/zhoushan.jpg new file mode 100644 index 000000000..496fd74ce Binary files /dev/null and b/image/character/zhoushan.jpg differ diff --git a/mode/connect.js b/mode/connect.js index 95bca1221..4ad1013f7 100644 --- a/mode/connect.js +++ b/mode/connect.js @@ -39,6 +39,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ node.contentEditable=true; node.style.webkitUserSelect='text'; node.style.textAlign='center'; + node.style.overflow='hidden'; var connect=function(e){ event.textnode.innerHTML='正在连接...'; diff --git a/mode/doudizhu.js b/mode/doudizhu.js index 9cfddc19a..cf7a3590c 100644 --- a/mode/doudizhu.js +++ b/mode/doudizhu.js @@ -1850,7 +1850,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ else game.updateRoundNumber(); return cards; }, - hasZhuSkill:function(){return false;}, + hasZhuSkill:function(skill,player){ + if(!this.hasSkill(skill)) return false; + for(var i in this.storage){ + if(i.indexOf('zhuSkill_')==0&&this.storage[i].contains(skill)) return true; + } + return false; + }, $dieAfter:function(){ if(_status.video) return; if(!this.node.dieidentity){ diff --git a/mode/guozhan.js b/mode/guozhan.js index d541135b7..a700ef0ae 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -9049,11 +9049,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ content:function(){ "step 0" player.chooseTarget(get.prompt('gzjieming'),'令一名角色将手牌补至X张(X为其体力上限且至多为5)',function(card,player,target){ - return target.countCards('h')2){ - return Math.min(5,target.maxHp)-target.countCards('h'); + return Math.max(0,Math.min(5,target.maxHp)-target.countCards('h')); } return att/3; }).setHiddenSkill('gzjieming'); @@ -9061,7 +9061,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(result.bool){ player.logSkill('gzjieming',result.targets); for(var i=0;i0) result.targets[i].draw(num); } } },