diff --git a/.gitignore b/.gitignore index c155d50356..25966ed913 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,11 @@ image/*.TXT !extension/cardpile !extension/coin !extension/wuxing +!extension/3D精选 +!extension/杀海拾遗 +!extension/欢乐卡牌 +!extension/玩点论杀 +!extension/英雄杀 !node_modules/@types !node_modules/noname-typings !node_modules/options diff --git a/audio/background/aozhan_shousha.mp3 b/audio/background/aozhan_shousha.mp3 new file mode 100644 index 0000000000..745180daa0 Binary files /dev/null and b/audio/background/aozhan_shousha.mp3 differ diff --git a/audio/background/effect_tuishouBGM.mp3 b/audio/background/effect_tuishouBGM.mp3 new file mode 100644 index 0000000000..56f4b302ce Binary files /dev/null and b/audio/background/effect_tuishouBGM.mp3 differ diff --git a/audio/background/effect_yinzhanBGM.mp3 b/audio/background/effect_yinzhanBGM.mp3 new file mode 100644 index 0000000000..a897c8ef87 Binary files /dev/null and b/audio/background/effect_yinzhanBGM.mp3 differ diff --git a/audio/card/female/shuiyanqijun.mp3 b/audio/card/female/shuiyanqijunx.mp3 similarity index 100% rename from audio/card/female/shuiyanqijun.mp3 rename to audio/card/female/shuiyanqijunx.mp3 diff --git a/audio/card/male/shuiyanqijun.mp3 b/audio/card/male/shuiyanqijunx.mp3 similarity index 100% rename from audio/card/male/shuiyanqijun.mp3 rename to audio/card/male/shuiyanqijunx.mp3 diff --git a/audio/die/chezhou.mp3 b/audio/die/chezhou.mp3 new file mode 100644 index 0000000000..37407f46e0 Binary files /dev/null and b/audio/die/chezhou.mp3 differ diff --git a/audio/die/clan_luji.mp3 b/audio/die/clan_luji.mp3 new file mode 100644 index 0000000000..56f61717e5 Binary files /dev/null and b/audio/die/clan_luji.mp3 differ diff --git a/audio/die/dc_xiahouhui.mp3 b/audio/die/dc_xiahouhui.mp3 new file mode 100644 index 0000000000..e62ac76cac Binary files /dev/null and b/audio/die/dc_xiahouhui.mp3 differ diff --git a/audio/die/dc_zhongyu.mp3 b/audio/die/dc_zhongyu.mp3 new file mode 100644 index 0000000000..5d67e6aa68 Binary files /dev/null and b/audio/die/dc_zhongyu.mp3 differ diff --git a/audio/die/dc_zhushuo.mp3 b/audio/die/dc_zhushuo.mp3 new file mode 100644 index 0000000000..f738d29371 Binary files /dev/null and b/audio/die/dc_zhushuo.mp3 differ diff --git a/audio/die/dm_diaochan.mp3 b/audio/die/dm_diaochan.mp3 new file mode 100644 index 0000000000..ad89f24c8c Binary files /dev/null and b/audio/die/dm_diaochan.mp3 differ diff --git a/audio/die/dm_lvbu.mp3 b/audio/die/dm_lvbu.mp3 new file mode 100644 index 0000000000..77d4bb762d Binary files /dev/null and b/audio/die/dm_lvbu.mp3 differ diff --git a/audio/die/gz_dongzhao.mp3 b/audio/die/gz_dongzhao.mp3 new file mode 100644 index 0000000000..3961fa536e Binary files /dev/null and b/audio/die/gz_dongzhao.mp3 differ diff --git a/audio/die/gz_mifangfushiren.mp3 b/audio/die/gz_mifangfushiren.mp3 new file mode 100644 index 0000000000..377f9d2dd8 Binary files /dev/null and b/audio/die/gz_mifangfushiren.mp3 differ diff --git a/audio/die/mb_sunjun.mp3 b/audio/die/mb_sunjun.mp3 new file mode 100644 index 0000000000..7a785026cc Binary files /dev/null and b/audio/die/mb_sunjun.mp3 differ diff --git a/audio/die/mb_zerong.mp3 b/audio/die/mb_zerong.mp3 new file mode 100644 index 0000000000..f046fe62e6 Binary files /dev/null and b/audio/die/mb_zerong.mp3 differ diff --git a/audio/die/ol_guanhai.mp3 b/audio/die/ol_guanhai.mp3 new file mode 100644 index 0000000000..37eef321a7 Binary files /dev/null and b/audio/die/ol_guanhai.mp3 differ diff --git a/audio/die/ol_guanzhang.mp3 b/audio/die/ol_guanzhang.mp3 new file mode 100644 index 0000000000..2bb24d9256 Binary files /dev/null and b/audio/die/ol_guanzhang.mp3 differ diff --git a/audio/die/ol_wangyi.mp3 b/audio/die/ol_wangyi.mp3 new file mode 100644 index 0000000000..dba2d980d9 Binary files /dev/null and b/audio/die/ol_wangyi.mp3 differ diff --git a/audio/die/ol_zhaozhong.mp3 b/audio/die/ol_zhaozhong.mp3 new file mode 100644 index 0000000000..0104785ddc Binary files /dev/null and b/audio/die/ol_zhaozhong.mp3 differ diff --git a/audio/die/pot_lusu.mp3 b/audio/die/pot_lusu.mp3 new file mode 100644 index 0000000000..70768cf492 Binary files /dev/null and b/audio/die/pot_lusu.mp3 differ diff --git a/audio/die/renwan.mp3 b/audio/die/renwan.mp3 new file mode 100644 index 0000000000..e60b92b3f9 Binary files /dev/null and b/audio/die/renwan.mp3 differ diff --git a/audio/die/shen_zhonghui.mp3 b/audio/die/shen_zhonghui.mp3 new file mode 100644 index 0000000000..00be983af8 Binary files /dev/null and b/audio/die/shen_zhonghui.mp3 differ diff --git a/audio/die/v_caopi.mp3 b/audio/die/v_caopi.mp3 new file mode 100644 index 0000000000..4d74493ded Binary files /dev/null and b/audio/die/v_caopi.mp3 differ diff --git a/audio/die/wild_liru.mp3 b/audio/die/wild_liru.mp3 new file mode 100644 index 0000000000..1dd988bfad Binary files /dev/null and b/audio/die/wild_liru.mp3 differ diff --git a/audio/die/yj_zhanghuan.mp3 b/audio/die/yj_zhanghuan.mp3 new file mode 100644 index 0000000000..daedd368ac Binary files /dev/null and b/audio/die/yj_zhanghuan.mp3 differ diff --git a/audio/skill/boss_heisheng.mp3 b/audio/skill/boss_heisheng.mp3 index 65de185868..19c8dcfbe1 100644 Binary files a/audio/skill/boss_heisheng.mp3 and b/audio/skill/boss_heisheng.mp3 differ diff --git a/audio/skill/boss_shengfu.mp3 b/audio/skill/boss_shengfu.mp3 index 19c8dcfbe1..65de185868 100644 Binary files a/audio/skill/boss_shengfu.mp3 and b/audio/skill/boss_shengfu.mp3 differ diff --git a/audio/skill/clanfennu1.mp3 b/audio/skill/clanfennu1.mp3 new file mode 100644 index 0000000000..dbdd281ba0 Binary files /dev/null and b/audio/skill/clanfennu1.mp3 differ diff --git a/audio/skill/clanfennu2.mp3 b/audio/skill/clanfennu2.mp3 new file mode 100644 index 0000000000..d6bc78e3db Binary files /dev/null and b/audio/skill/clanfennu2.mp3 differ diff --git a/audio/skill/clangailan1.mp3 b/audio/skill/clangailan1.mp3 new file mode 100644 index 0000000000..857e08b87f Binary files /dev/null and b/audio/skill/clangailan1.mp3 differ diff --git a/audio/skill/clangailan2.mp3 b/audio/skill/clangailan2.mp3 new file mode 100644 index 0000000000..5a26d206e0 Binary files /dev/null and b/audio/skill/clangailan2.mp3 differ diff --git a/audio/skill/clanzelie1.mp3 b/audio/skill/clanzelie1.mp3 new file mode 100644 index 0000000000..6fa29e33f8 Binary files /dev/null and b/audio/skill/clanzelie1.mp3 differ diff --git a/audio/skill/clanzelie2.mp3 b/audio/skill/clanzelie2.mp3 new file mode 100644 index 0000000000..8c9b4b628a Binary files /dev/null and b/audio/skill/clanzelie2.mp3 differ diff --git a/audio/skill/dcdianlun1.mp3 b/audio/skill/dcdianlun1.mp3 new file mode 100644 index 0000000000..791e39894d Binary files /dev/null and b/audio/skill/dcdianlun1.mp3 differ diff --git a/audio/skill/dcdianlun2.mp3 b/audio/skill/dcdianlun2.mp3 new file mode 100644 index 0000000000..c342b3ea08 Binary files /dev/null and b/audio/skill/dcdianlun2.mp3 differ diff --git a/audio/skill/dcdujun1.mp3 b/audio/skill/dcdujun1.mp3 new file mode 100644 index 0000000000..16044f9192 Binary files /dev/null and b/audio/skill/dcdujun1.mp3 differ diff --git a/audio/skill/dcdujun2.mp3 b/audio/skill/dcdujun2.mp3 new file mode 100644 index 0000000000..68f813e0ba Binary files /dev/null and b/audio/skill/dcdujun2.mp3 differ diff --git a/audio/skill/dcduzhang1.mp3 b/audio/skill/dcduzhang1.mp3 new file mode 100644 index 0000000000..07124d1489 Binary files /dev/null and b/audio/skill/dcduzhang1.mp3 differ diff --git a/audio/skill/dcduzhang2.mp3 b/audio/skill/dcduzhang2.mp3 new file mode 100644 index 0000000000..d66a9afacf Binary files /dev/null and b/audio/skill/dcduzhang2.mp3 differ diff --git a/audio/skill/dcjianghuo1.mp3 b/audio/skill/dcjianghuo1.mp3 new file mode 100644 index 0000000000..275aafc1e1 Binary files /dev/null and b/audio/skill/dcjianghuo1.mp3 differ diff --git a/audio/skill/dcjianghuo2.mp3 b/audio/skill/dcjianghuo2.mp3 new file mode 100644 index 0000000000..beecca9c41 Binary files /dev/null and b/audio/skill/dcjianghuo2.mp3 differ diff --git a/audio/skill/dcjiesi1.mp3 b/audio/skill/dcjiesi1.mp3 new file mode 100644 index 0000000000..470d479cc6 Binary files /dev/null and b/audio/skill/dcjiesi1.mp3 differ diff --git a/audio/skill/dcjiesi2.mp3 b/audio/skill/dcjiesi2.mp3 new file mode 100644 index 0000000000..95ba86794a Binary files /dev/null and b/audio/skill/dcjiesi2.mp3 differ diff --git a/audio/skill/dcjikun1.mp3 b/audio/skill/dcjikun1.mp3 new file mode 100644 index 0000000000..6274ceccac Binary files /dev/null and b/audio/skill/dcjikun1.mp3 differ diff --git a/audio/skill/dcjikun2.mp3 b/audio/skill/dcjikun2.mp3 new file mode 100644 index 0000000000..573f8ad5e1 Binary files /dev/null and b/audio/skill/dcjikun2.mp3 differ diff --git a/audio/skill/dcjilie1.mp3 b/audio/skill/dcjilie1.mp3 new file mode 100644 index 0000000000..7d1bad5c3c Binary files /dev/null and b/audio/skill/dcjilie1.mp3 differ diff --git a/audio/skill/dcjilie2.mp3 b/audio/skill/dcjilie2.mp3 new file mode 100644 index 0000000000..91fa6519b9 Binary files /dev/null and b/audio/skill/dcjilie2.mp3 differ diff --git a/audio/skill/dcjiwei1.mp3 b/audio/skill/dcjiwei1.mp3 new file mode 100644 index 0000000000..d819b98e85 Binary files /dev/null and b/audio/skill/dcjiwei1.mp3 differ diff --git a/audio/skill/dcjiwei2.mp3 b/audio/skill/dcjiwei2.mp3 new file mode 100644 index 0000000000..9098c5c662 Binary files /dev/null and b/audio/skill/dcjiwei2.mp3 differ diff --git a/audio/skill/dcjuanji1.mp3 b/audio/skill/dcjuanji1.mp3 new file mode 100644 index 0000000000..fb2973ff8e Binary files /dev/null and b/audio/skill/dcjuanji1.mp3 differ diff --git a/audio/skill/dcjuanji2.mp3 b/audio/skill/dcjuanji2.mp3 new file mode 100644 index 0000000000..bcddf2daf6 Binary files /dev/null and b/audio/skill/dcjuanji2.mp3 differ diff --git a/audio/skill/dclinjie1.mp3 b/audio/skill/dclinjie1.mp3 new file mode 100644 index 0000000000..573238f668 Binary files /dev/null and b/audio/skill/dclinjie1.mp3 differ diff --git a/audio/skill/dclinjie2.mp3 b/audio/skill/dclinjie2.mp3 new file mode 100644 index 0000000000..3e68556c49 Binary files /dev/null and b/audio/skill/dclinjie2.mp3 differ diff --git a/audio/skill/dclishi1.mp3 b/audio/skill/dclishi1.mp3 new file mode 100644 index 0000000000..b7f6491b26 Binary files /dev/null and b/audio/skill/dclishi1.mp3 differ diff --git a/audio/skill/dclishi2.mp3 b/audio/skill/dclishi2.mp3 new file mode 100644 index 0000000000..57e109946f Binary files /dev/null and b/audio/skill/dclishi2.mp3 differ diff --git a/audio/skill/dcpigua1.mp3 b/audio/skill/dcpigua1.mp3 new file mode 100644 index 0000000000..4c06cb7a85 Binary files /dev/null and b/audio/skill/dcpigua1.mp3 differ diff --git a/audio/skill/dcpigua2.mp3 b/audio/skill/dcpigua2.mp3 new file mode 100644 index 0000000000..a5af8efcb5 Binary files /dev/null and b/audio/skill/dcpigua2.mp3 differ diff --git a/audio/skill/dcrenshuang1.mp3 b/audio/skill/dcrenshuang1.mp3 new file mode 100644 index 0000000000..682df82493 Binary files /dev/null and b/audio/skill/dcrenshuang1.mp3 differ diff --git a/audio/skill/dcrenshuang2.mp3 b/audio/skill/dcrenshuang2.mp3 new file mode 100644 index 0000000000..3a920e6faa Binary files /dev/null and b/audio/skill/dcrenshuang2.mp3 differ diff --git a/audio/skill/dcshefu1.mp3 b/audio/skill/dcshefu1.mp3 new file mode 100644 index 0000000000..351e6627bd Binary files /dev/null and b/audio/skill/dcshefu1.mp3 differ diff --git a/audio/skill/dcshefu2.mp3 b/audio/skill/dcshefu2.mp3 new file mode 100644 index 0000000000..c41f2e092f Binary files /dev/null and b/audio/skill/dcshefu2.mp3 differ diff --git a/audio/skill/dcshuguo1.mp3 b/audio/skill/dcshuguo1.mp3 new file mode 100644 index 0000000000..6ff5eb5d84 Binary files /dev/null and b/audio/skill/dcshuguo1.mp3 differ diff --git a/audio/skill/dcshuguo2.mp3 b/audio/skill/dcshuguo2.mp3 new file mode 100644 index 0000000000..c33990de5a Binary files /dev/null and b/audio/skill/dcshuguo2.mp3 differ diff --git a/audio/skill/dcsugang1.mp3 b/audio/skill/dcsugang1.mp3 new file mode 100644 index 0000000000..2f5942efe7 Binary files /dev/null and b/audio/skill/dcsugang1.mp3 differ diff --git a/audio/skill/dcsugang2.mp3 b/audio/skill/dcsugang2.mp3 new file mode 100644 index 0000000000..e683f5955c Binary files /dev/null and b/audio/skill/dcsugang2.mp3 differ diff --git a/audio/skill/dcyiju1.mp3 b/audio/skill/dcyiju1.mp3 new file mode 100644 index 0000000000..50e2901d78 Binary files /dev/null and b/audio/skill/dcyiju1.mp3 differ diff --git a/audio/skill/dcyiju2.mp3 b/audio/skill/dcyiju2.mp3 new file mode 100644 index 0000000000..25be06ff6e Binary files /dev/null and b/audio/skill/dcyiju2.mp3 differ diff --git a/audio/skill/dczhidui1.mp3 b/audio/skill/dczhidui1.mp3 new file mode 100644 index 0000000000..a475e298f8 Binary files /dev/null and b/audio/skill/dczhidui1.mp3 differ diff --git a/audio/skill/dczhidui2.mp3 b/audio/skill/dczhidui2.mp3 new file mode 100644 index 0000000000..c9a1758e3a Binary files /dev/null and b/audio/skill/dczhidui2.mp3 differ diff --git a/audio/skill/dczsshuhe1.mp3 b/audio/skill/dczsshuhe1.mp3 new file mode 100644 index 0000000000..d3ea220588 Binary files /dev/null and b/audio/skill/dczsshuhe1.mp3 differ diff --git a/audio/skill/dczsshuhe2.mp3 b/audio/skill/dczsshuhe2.mp3 new file mode 100644 index 0000000000..5f7f259a1e Binary files /dev/null and b/audio/skill/dczsshuhe2.mp3 differ diff --git a/audio/skill/lingbo1.mp3 b/audio/skill/lingbo1.mp3 deleted file mode 100755 index d1c0212737..0000000000 Binary files a/audio/skill/lingbo1.mp3 and /dev/null differ diff --git a/audio/skill/lingbo2.mp3 b/audio/skill/lingbo2.mp3 deleted file mode 100755 index 4f1b9d9286..0000000000 Binary files a/audio/skill/lingbo2.mp3 and /dev/null differ diff --git a/audio/skill/mbfozong1.mp3 b/audio/skill/mbfozong1.mp3 new file mode 100644 index 0000000000..40d5d2a1e6 Binary files /dev/null and b/audio/skill/mbfozong1.mp3 differ diff --git a/audio/skill/mbfozong2.mp3 b/audio/skill/mbfozong2.mp3 new file mode 100644 index 0000000000..cd76d1f83a Binary files /dev/null and b/audio/skill/mbfozong2.mp3 differ diff --git a/audio/skill/mbfozong3.mp3 b/audio/skill/mbfozong3.mp3 new file mode 100644 index 0000000000..606bae917d Binary files /dev/null and b/audio/skill/mbfozong3.mp3 differ diff --git a/audio/skill/mbfozong4.mp3 b/audio/skill/mbfozong4.mp3 new file mode 100644 index 0000000000..b82a3d3f1c Binary files /dev/null and b/audio/skill/mbfozong4.mp3 differ diff --git a/audio/skill/mbfozong5.mp3 b/audio/skill/mbfozong5.mp3 new file mode 100644 index 0000000000..e1632c3771 Binary files /dev/null and b/audio/skill/mbfozong5.mp3 differ diff --git a/audio/skill/mbfozong6.mp3 b/audio/skill/mbfozong6.mp3 new file mode 100644 index 0000000000..ced188fd7e Binary files /dev/null and b/audio/skill/mbfozong6.mp3 differ diff --git a/audio/skill/mbfutu1.mp3 b/audio/skill/mbfutu1.mp3 new file mode 100644 index 0000000000..671dc08c8b Binary files /dev/null and b/audio/skill/mbfutu1.mp3 differ diff --git a/audio/skill/mbfutu2.mp3 b/audio/skill/mbfutu2.mp3 new file mode 100644 index 0000000000..01f7b132e5 Binary files /dev/null and b/audio/skill/mbfutu2.mp3 differ diff --git a/audio/skill/mbfutu3.mp3 b/audio/skill/mbfutu3.mp3 new file mode 100644 index 0000000000..fd25de235f Binary files /dev/null and b/audio/skill/mbfutu3.mp3 differ diff --git a/audio/skill/mbfutu4.mp3 b/audio/skill/mbfutu4.mp3 new file mode 100644 index 0000000000..6acd946dd8 Binary files /dev/null and b/audio/skill/mbfutu4.mp3 differ diff --git a/audio/skill/mbfutu5.mp3 b/audio/skill/mbfutu5.mp3 new file mode 100644 index 0000000000..0b8159be7f Binary files /dev/null and b/audio/skill/mbfutu5.mp3 differ diff --git a/audio/skill/mbfutu6.mp3 b/audio/skill/mbfutu6.mp3 new file mode 100644 index 0000000000..655194f9c6 Binary files /dev/null and b/audio/skill/mbfutu6.mp3 differ diff --git a/audio/skill/mbfutu7.mp3 b/audio/skill/mbfutu7.mp3 new file mode 100644 index 0000000000..c3f9b73a80 Binary files /dev/null and b/audio/skill/mbfutu7.mp3 differ diff --git a/audio/skill/mbfutu8.mp3 b/audio/skill/mbfutu8.mp3 new file mode 100644 index 0000000000..2223374cc0 Binary files /dev/null and b/audio/skill/mbfutu8.mp3 differ diff --git a/audio/skill/mbjiebian1.mp3 b/audio/skill/mbjiebian1.mp3 new file mode 100644 index 0000000000..ec2f86400b Binary files /dev/null and b/audio/skill/mbjiebian1.mp3 differ diff --git a/audio/skill/mbjiebian2.mp3 b/audio/skill/mbjiebian2.mp3 new file mode 100644 index 0000000000..2a94196408 Binary files /dev/null and b/audio/skill/mbjiebian2.mp3 differ diff --git a/audio/skill/mbjingtu1.mp3 b/audio/skill/mbjingtu1.mp3 new file mode 100644 index 0000000000..fffa6683e8 Binary files /dev/null and b/audio/skill/mbjingtu1.mp3 differ diff --git a/audio/skill/mbjingtu2.mp3 b/audio/skill/mbjingtu2.mp3 new file mode 100644 index 0000000000..9f0d06d4a5 Binary files /dev/null and b/audio/skill/mbjingtu2.mp3 differ diff --git a/audio/skill/mbjingtu3.mp3 b/audio/skill/mbjingtu3.mp3 new file mode 100644 index 0000000000..1eb9473bff Binary files /dev/null and b/audio/skill/mbjingtu3.mp3 differ diff --git a/audio/skill/mbjingtu4.mp3 b/audio/skill/mbjingtu4.mp3 new file mode 100644 index 0000000000..7808142c79 Binary files /dev/null and b/audio/skill/mbjingtu4.mp3 differ diff --git a/audio/skill/mbjingtu5.mp3 b/audio/skill/mbjingtu5.mp3 new file mode 100644 index 0000000000..16d7d426b7 Binary files /dev/null and b/audio/skill/mbjingtu5.mp3 differ diff --git a/audio/skill/mbjingtu6.mp3 b/audio/skill/mbjingtu6.mp3 new file mode 100644 index 0000000000..635d1b878c Binary files /dev/null and b/audio/skill/mbjingtu6.mp3 differ diff --git a/audio/skill/mbxianshuai1.mp3 b/audio/skill/mbxianshuai1.mp3 new file mode 100644 index 0000000000..dd70fbb074 Binary files /dev/null and b/audio/skill/mbxianshuai1.mp3 differ diff --git a/audio/skill/mbxianshuai2.mp3 b/audio/skill/mbxianshuai2.mp3 new file mode 100644 index 0000000000..130b37410a Binary files /dev/null and b/audio/skill/mbxianshuai2.mp3 differ diff --git a/audio/skill/mbxiongtu1.mp3 b/audio/skill/mbxiongtu1.mp3 new file mode 100644 index 0000000000..b2344fa41d Binary files /dev/null and b/audio/skill/mbxiongtu1.mp3 differ diff --git a/audio/skill/mbxiongtu2.mp3 b/audio/skill/mbxiongtu2.mp3 new file mode 100644 index 0000000000..f7dbe8e11d Binary files /dev/null and b/audio/skill/mbxiongtu2.mp3 differ diff --git a/audio/skill/mbxiongtu3.mp3 b/audio/skill/mbxiongtu3.mp3 new file mode 100644 index 0000000000..63411ca5c2 Binary files /dev/null and b/audio/skill/mbxiongtu3.mp3 differ diff --git a/audio/skill/mbxiongtu4.mp3 b/audio/skill/mbxiongtu4.mp3 new file mode 100644 index 0000000000..027472e380 Binary files /dev/null and b/audio/skill/mbxiongtu4.mp3 differ diff --git a/audio/skill/olbiri1.mp3 b/audio/skill/olbiri1.mp3 new file mode 100644 index 0000000000..35033c6e85 Binary files /dev/null and b/audio/skill/olbiri1.mp3 differ diff --git a/audio/skill/oldici1.mp3 b/audio/skill/oldici1.mp3 new file mode 100644 index 0000000000..7e2456278b Binary files /dev/null and b/audio/skill/oldici1.mp3 differ diff --git a/audio/skill/oldici2.mp3 b/audio/skill/oldici2.mp3 new file mode 100644 index 0000000000..dcaa5677e7 Binary files /dev/null and b/audio/skill/oldici2.mp3 differ diff --git a/audio/skill/olduoqi1.mp3 b/audio/skill/olduoqi1.mp3 new file mode 100644 index 0000000000..727473b4af Binary files /dev/null and b/audio/skill/olduoqi1.mp3 differ diff --git a/audio/skill/olduoqi2.mp3 b/audio/skill/olduoqi2.mp3 new file mode 100644 index 0000000000..4d72f3005e Binary files /dev/null and b/audio/skill/olduoqi2.mp3 differ diff --git a/audio/skill/olfuhun1.mp3 b/audio/skill/olfuhun1.mp3 new file mode 100644 index 0000000000..2220105ccf Binary files /dev/null and b/audio/skill/olfuhun1.mp3 differ diff --git a/audio/skill/olfuhun2.mp3 b/audio/skill/olfuhun2.mp3 new file mode 100644 index 0000000000..d9ad41cff0 Binary files /dev/null and b/audio/skill/olfuhun2.mp3 differ diff --git a/audio/skill/olgangquan1.mp3 b/audio/skill/olgangquan1.mp3 new file mode 100644 index 0000000000..6732e0a377 Binary files /dev/null and b/audio/skill/olgangquan1.mp3 differ diff --git a/audio/skill/olgangquan2.mp3 b/audio/skill/olgangquan2.mp3 new file mode 100644 index 0000000000..44179c93b0 Binary files /dev/null and b/audio/skill/olgangquan2.mp3 differ diff --git a/audio/skill/olhuanhuo1.mp3 b/audio/skill/olhuanhuo1.mp3 new file mode 100644 index 0000000000..6526cba21e Binary files /dev/null and b/audio/skill/olhuanhuo1.mp3 differ diff --git a/audio/skill/olhuanhuo2.mp3 b/audio/skill/olhuanhuo2.mp3 new file mode 100644 index 0000000000..23774c0f21 Binary files /dev/null and b/audio/skill/olhuanhuo2.mp3 differ diff --git a/audio/skill/olhuaquan1.mp3 b/audio/skill/olhuaquan1.mp3 new file mode 100644 index 0000000000..c47835c59c Binary files /dev/null and b/audio/skill/olhuaquan1.mp3 differ diff --git a/audio/skill/olhuaquan2.mp3 b/audio/skill/olhuaquan2.mp3 new file mode 100644 index 0000000000..3c04482777 Binary files /dev/null and b/audio/skill/olhuaquan2.mp3 differ diff --git a/audio/skill/olkuangmo1.mp3 b/audio/skill/olkuangmo1.mp3 new file mode 100644 index 0000000000..cf240268c9 Binary files /dev/null and b/audio/skill/olkuangmo1.mp3 differ diff --git a/audio/skill/olkuangmo2.mp3 b/audio/skill/olkuangmo2.mp3 new file mode 100644 index 0000000000..e2ce45257b Binary files /dev/null and b/audio/skill/olkuangmo2.mp3 differ diff --git a/audio/skill/olkuangmo3.mp3 b/audio/skill/olkuangmo3.mp3 new file mode 100644 index 0000000000..6b18d69784 Binary files /dev/null and b/audio/skill/olkuangmo3.mp3 differ diff --git a/audio/skill/olmiji1.mp3 b/audio/skill/olmiji1.mp3 new file mode 100644 index 0000000000..1b8e55ab6f Binary files /dev/null and b/audio/skill/olmiji1.mp3 differ diff --git a/audio/skill/olmiji2.mp3 b/audio/skill/olmiji2.mp3 new file mode 100644 index 0000000000..6ccbabd1da Binary files /dev/null and b/audio/skill/olmiji2.mp3 differ diff --git a/audio/skill/olpengbi1.mp3 b/audio/skill/olpengbi1.mp3 new file mode 100644 index 0000000000..bbf001864e Binary files /dev/null and b/audio/skill/olpengbi1.mp3 differ diff --git a/audio/skill/olpengbi2.mp3 b/audio/skill/olpengbi2.mp3 new file mode 100644 index 0000000000..b5383510a9 Binary files /dev/null and b/audio/skill/olpengbi2.mp3 differ diff --git a/audio/skill/olqingshi1.mp3 b/audio/skill/olqingshi1.mp3 new file mode 100644 index 0000000000..ac977fe288 Binary files /dev/null and b/audio/skill/olqingshi1.mp3 differ diff --git a/audio/skill/olqingshi2.mp3 b/audio/skill/olqingshi2.mp3 new file mode 100644 index 0000000000..b5af0d80f0 Binary files /dev/null and b/audio/skill/olqingshi2.mp3 differ diff --git a/audio/skill/olsanou1.mp3 b/audio/skill/olsanou1.mp3 new file mode 100644 index 0000000000..165f30c795 Binary files /dev/null and b/audio/skill/olsanou1.mp3 differ diff --git a/audio/skill/olsanou2.mp3 b/audio/skill/olsanou2.mp3 new file mode 100644 index 0000000000..987c34e5fb Binary files /dev/null and b/audio/skill/olsanou2.mp3 differ diff --git a/audio/skill/olxiewei1.mp3 b/audio/skill/olxiewei1.mp3 new file mode 100644 index 0000000000..8e88ceb920 Binary files /dev/null and b/audio/skill/olxiewei1.mp3 differ diff --git a/audio/skill/olxiewei2.mp3 b/audio/skill/olxiewei2.mp3 new file mode 100644 index 0000000000..60f2f4f63e Binary files /dev/null and b/audio/skill/olxiewei2.mp3 differ diff --git a/audio/skill/olyintian1.mp3 b/audio/skill/olyintian1.mp3 new file mode 100644 index 0000000000..1f311adc0a Binary files /dev/null and b/audio/skill/olyintian1.mp3 differ diff --git a/audio/skill/olyouque1.mp3 b/audio/skill/olyouque1.mp3 new file mode 100644 index 0000000000..6aa107d15a Binary files /dev/null and b/audio/skill/olyouque1.mp3 differ diff --git a/audio/skill/olyouque2.mp3 b/audio/skill/olyouque2.mp3 new file mode 100644 index 0000000000..965d676aea Binary files /dev/null and b/audio/skill/olyouque2.mp3 differ diff --git a/audio/skill/olzhenlie1.mp3 b/audio/skill/olzhenlie1.mp3 new file mode 100644 index 0000000000..5c4b10e7ec Binary files /dev/null and b/audio/skill/olzhenlie1.mp3 differ diff --git a/audio/skill/olzhenlie2.mp3 b/audio/skill/olzhenlie2.mp3 new file mode 100644 index 0000000000..e7747feb82 Binary files /dev/null and b/audio/skill/olzhenlie2.mp3 differ diff --git a/audio/skill/paoxiao_guanzhang2.mp3 b/audio/skill/paoxiao_guanzhang2.mp3 new file mode 100644 index 0000000000..f9ca565c41 Binary files /dev/null and b/audio/skill/paoxiao_guanzhang2.mp3 differ diff --git a/audio/skill/paoxiao_ol_guanzhang1.mp3 b/audio/skill/paoxiao_ol_guanzhang1.mp3 new file mode 100644 index 0000000000..efc3e45ab5 Binary files /dev/null and b/audio/skill/paoxiao_ol_guanzhang1.mp3 differ diff --git a/audio/skill/potdimeng1.mp3 b/audio/skill/potdimeng1.mp3 new file mode 100644 index 0000000000..0fc108b3f5 Binary files /dev/null and b/audio/skill/potdimeng1.mp3 differ diff --git a/audio/skill/potdimeng2.mp3 b/audio/skill/potdimeng2.mp3 new file mode 100644 index 0000000000..5e3c9fa562 Binary files /dev/null and b/audio/skill/potdimeng2.mp3 differ diff --git a/audio/skill/pothaoshi1.mp3 b/audio/skill/pothaoshi1.mp3 new file mode 100644 index 0000000000..adba6014f8 Binary files /dev/null and b/audio/skill/pothaoshi1.mp3 differ diff --git a/audio/skill/pothaoshi2.mp3 b/audio/skill/pothaoshi2.mp3 new file mode 100644 index 0000000000..8d6ca8db11 Binary files /dev/null and b/audio/skill/pothaoshi2.mp3 differ diff --git a/audio/skill/pothaoshi3.mp3 b/audio/skill/pothaoshi3.mp3 new file mode 100644 index 0000000000..c6f121543d Binary files /dev/null and b/audio/skill/pothaoshi3.mp3 differ diff --git a/audio/skill/xinfu_qiaosi1.mp3 b/audio/skill/qiaosi1.mp3 similarity index 100% rename from audio/skill/xinfu_qiaosi1.mp3 rename to audio/skill/qiaosi1.mp3 diff --git a/audio/skill/xinfu_qiaosi2.mp3 b/audio/skill/qiaosi2.mp3 similarity index 100% rename from audio/skill/xinfu_qiaosi2.mp3 rename to audio/skill/qiaosi2.mp3 diff --git a/audio/skill/qingguo1.mp3 b/audio/skill/qingguo1.mp3 index 1d3a73ce66..d1c0212737 100755 Binary files a/audio/skill/qingguo1.mp3 and b/audio/skill/qingguo1.mp3 differ diff --git a/audio/skill/qingguo2.mp3 b/audio/skill/qingguo2.mp3 index dcf4e32944..4f1b9d9286 100755 Binary files a/audio/skill/qingguo2.mp3 and b/audio/skill/qingguo2.mp3 differ diff --git a/audio/skill/yingbing1.mp3 b/audio/skill/reyingbing1.mp3 similarity index 100% rename from audio/skill/yingbing1.mp3 rename to audio/skill/reyingbing1.mp3 diff --git a/audio/skill/yingbing2.mp3 b/audio/skill/reyingbing2.mp3 similarity index 100% rename from audio/skill/yingbing2.mp3 rename to audio/skill/reyingbing2.mp3 diff --git a/audio/skill/zhoufu1.mp3 b/audio/skill/rezhoufu1.mp3 similarity index 100% rename from audio/skill/zhoufu1.mp3 rename to audio/skill/rezhoufu1.mp3 diff --git a/audio/skill/zhoufu2.mp3 b/audio/skill/rezhoufu2.mp3 similarity index 100% rename from audio/skill/zhoufu2.mp3 rename to audio/skill/rezhoufu2.mp3 diff --git a/audio/skill/sbbeifa1.mp3 b/audio/skill/sbbeifa1.mp3 new file mode 100644 index 0000000000..840e0e477f Binary files /dev/null and b/audio/skill/sbbeifa1.mp3 differ diff --git a/audio/skill/sbbeifa2.mp3 b/audio/skill/sbbeifa2.mp3 new file mode 100644 index 0000000000..4493203749 Binary files /dev/null and b/audio/skill/sbbeifa2.mp3 differ diff --git a/audio/skill/sbbeifa3.mp3 b/audio/skill/sbbeifa3.mp3 new file mode 100644 index 0000000000..27301a469c Binary files /dev/null and b/audio/skill/sbbeifa3.mp3 differ diff --git a/audio/skill/sbbeifa4.mp3 b/audio/skill/sbbeifa4.mp3 new file mode 100644 index 0000000000..f95ac1f8ba Binary files /dev/null and b/audio/skill/sbbeifa4.mp3 differ diff --git a/audio/skill/sbbeifa5.mp3 b/audio/skill/sbbeifa5.mp3 new file mode 100644 index 0000000000..0cf790696b Binary files /dev/null and b/audio/skill/sbbeifa5.mp3 differ diff --git a/audio/skill/sbtiaoxin3.mp3 b/audio/skill/sbtiaoxin3.mp3 new file mode 100644 index 0000000000..281105ca9e Binary files /dev/null and b/audio/skill/sbtiaoxin3.mp3 differ diff --git a/audio/skill/sbtiaoxin4.mp3 b/audio/skill/sbtiaoxin4.mp3 new file mode 100644 index 0000000000..fa4ba154ee Binary files /dev/null and b/audio/skill/sbtiaoxin4.mp3 differ diff --git a/audio/skill/wusheng_guanzhang2.mp3 b/audio/skill/wusheng_guanzhang2.mp3 new file mode 100644 index 0000000000..f97b7d6bac Binary files /dev/null and b/audio/skill/wusheng_guanzhang2.mp3 differ diff --git a/audio/skill/wusheng_ol_guanzhang1.mp3 b/audio/skill/wusheng_ol_guanzhang1.mp3 new file mode 100644 index 0000000000..69fe1dacd3 Binary files /dev/null and b/audio/skill/wusheng_ol_guanzhang1.mp3 differ diff --git a/card/gujian.js b/card/gujian.js deleted file mode 100644 index a336ae3543..0000000000 --- a/card/gujian.js +++ /dev/null @@ -1,1999 +0,0 @@ -import { lib, game, ui, get, ai, _status } from "../noname.js"; -game.import("card", function () { - return { - name: "gujian", - card: { - luyugeng: { - fullskin: true, - type: "food", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("luyugeng"); - }, - //range:{global:1}, - content() { - target.$gain2(cards); - target.storage.luyugeng = card; - target.storage.luyugeng_markcount = 3; - target.addSkill("luyugeng"); - }, - ai: { - order: 2, - value: 4, - result: { - target: 1, - }, - }, - }, - jinlianzhu: { - type: "trick", - fullskin: true, - filterTarget: true, - global: "g_jinlianzhu", - content() { - var evt = event.getParent(3)._trigger; - evt.cancel(); - if (evt.source) { - evt.source.draw(); - } - }, - ai: { - order: 1, - value: [5, 1], - useful: [6, 1], - result: { - target(player, target) { - var evt = _status.event.getTrigger(); - var eff = get.damageEffect(target, evt.source, target, evt.nature); - if (eff > 0) { - return -1; - } - if (eff < 0) { - return 2; - } - return 0; - }, - }, - }, - }, - chunbing: { - fullskin: true, - type: "food", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("chunbing"); - }, - //range:{global:1}, - content() { - target.$gain2(cards); - target.storage.chunbing = card; - target.storage.chunbing_markcount = 5; - target.addSkill("chunbing"); - }, - ai: { - order: 2, - value: 4, - result: { - target(player, target) { - var num = target.needsToDiscard(); - if (num) { - if (target == player && num > 1) { - return num; - } - return Math.sqrt(num); - } - return 0; - }, - }, - }, - }, - gudonggeng: { - fullskin: true, - type: "food", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("gudonggeng"); - }, - //range:{global:1}, - content() { - target.$gain2(cards); - target.storage.gudonggeng = card; - target.storage.gudonggeng_markcount = 3; - target.addSkill("gudonggeng"); - }, - ai: { - order: 2, - value: 4, - result: { - target(player, target) { - if (player == target && !player.hasShan()) { - return 2; - } - return 1 / Math.max(1, target.hp); - }, - }, - }, - }, - liyutang: { - fullskin: true, - type: "food", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("liyutang"); - }, - //range:{global:1}, - content() { - target.$gain2(cards); - target.storage.liyutang = card; - target.storage.liyutang_markcount = 2; - target.addSkill("liyutang"); - }, - ai: { - order: 2, - value: 4, - result: { - target(player, target) { - if (player == target && target.isMinHp()) { - return 2; - } - if (target.isMinHp()) { - return 1.5; - } - return 1 / Math.max(1, target.hp); - }, - }, - }, - }, - mizhilianou: { - fullskin: true, - type: "food", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("mizhilianou"); - }, - //range:{global:1}, - content() { - target.$gain2(cards); - target.storage.mizhilianou = card; - target.storage.mizhilianou_markcount = 4; - target.addSkill("mizhilianou"); - }, - ai: { - order: 2, - value: 4, - result: { - target(player, target) { - if (target == player) { - if (target.countCards("he", { suit: "heart" })) { - if (target.isDamaged()) { - return 1.5; - } - } else { - return 0.2; - } - } else if (target.isDamaged()) { - return 1; - } - return 0.5; - }, - }, - }, - }, - xiajiao: { - fullskin: true, - type: "food", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("xiajiao"); - }, - //range:{global:1}, - content() { - target.$gain2(cards); - target.storage.xiajiao = card; - target.storage.xiajiao_markcount = 3; - target.addSkill("xiajiao"); - target.addTempSkill("xiajiao3"); - }, - ai: { - order: 2, - value: 5, - result: { - target: 1, - }, - }, - }, - tanhuadong: { - fullskin: true, - type: "food", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("tanhuadong"); - }, - //range:{global:1}, - content() { - target.$gain2(cards); - target.storage.tanhuadong = card; - target.storage.tanhuadong_markcount = 3; - target.addSkill("tanhuadong"); - }, - ai: { - order: 2, - value: 5, - result: { - target: 1, - }, - }, - }, - mapodoufu: { - fullskin: true, - type: "food", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("mapodoufu"); - }, - //range:{global:1}, - content() { - if (target == targets[0] && cards.length) { - target.$gain2(cards); - } - target.storage.mapodoufu = card; - target.storage.mapodoufu_markcount = 2; - target.addSkill("mapodoufu"); - }, - ai: { - order: 1, - value: 5, - result: { - target(player, target) { - return player == target ? 2 : 1; - }, - }, - }, - }, - qingtuan: { - fullskin: true, - type: "food", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("qingtuan"); - }, - //range:{global:1}, - content() { - target.$gain2(cards); - target.storage.qingtuan = card; - target.storage.qingtuan_markcount = 2; - target.addSkill("qingtuan"); - }, - ai: { - order: 4, - value: 4, - result: { - target(player, target) { - if (target == player) { - if (target.hasSha()) { - return 2; - } - } else { - var nh = target.countCards("h"); - if (nh >= 3) { - return 1; - } - if (target.hasSha()) { - return 1; - } - if (nh && Math.random() < 0.5) { - return 1; - } - } - return player.needsToDiscard() ? 0.2 : 0; - }, - }, - }, - }, - yougeng: { - fullskin: true, - type: "food", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("yougeng"); - }, - //range:{global:1}, - content() { - target.$gain2(cards); - target.storage.yougeng = card; - target.storage.yougeng_markcount = 2; - target.addSkill("yougeng"); - }, - ai: { - order: 2, - value: 4, - result: { - target(player, target) { - if (target.isHealthy()) { - return player.needsToDiscard() ? 0.1 : 0; - } - if (target.isMinHp()) { - return 1.5; - } - return 1 / Math.max(1, target.hp); - }, - }, - }, - }, - molicha: { - fullskin: true, - type: "food", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("molicha"); - }, - //range:{global:1}, - content() { - target.$gain2(cards); - target.storage.molicha = card; - target.storage.molicha_markcount = 4; - target.addSkill("molicha"); - }, - ai: { - order: 2, - value: 4, - result: { - target: 1, - }, - }, - }, - yuanbaorou: { - fullskin: true, - type: "food", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("yuanbaorou"); - }, - //range:{global:1}, - content() { - target.$gain2(cards); - target.storage.yuanbaorou = card; - target.storage.yuanbaorou_markcount = 4; - target.addSkill("yuanbaorou"); - }, - ai: { - order: 2, - value: 4, - result: { - target(player, target) { - if (target == player) { - if (target.hasSha()) { - return 2; - } - } else { - var nh = target.countCards("h"); - if (nh >= 3) { - return 1; - } - if (target.hasSha()) { - return 1; - } - if (nh && Math.random() < 0.5) { - return 1; - } - } - return player.needsToDiscard() ? 0.2 : 0; - }, - }, - }, - }, - heilonglinpian: { - fullskin: true, - type: "trick", - enable: true, - toself: true, - filterTarget(card, player, target) { - return target == player; - }, - selectTarget: -1, - modTarget: true, - content() { - target.changeHujia(); - target.addTempSkill("heilonglinpian", { player: "phaseBegin" }); - }, - ai: { - value: [6, 1], - useful: 1, - order: 2, - result: { - target: 1, - }, - }, - }, - mutoumianju: { - fullskin: true, - type: "equip", - subtype: "equip2", - skills: ["mutoumianju_skill"], - ai: { equipValue: 4 }, - onLose() { - if (player.getStat().skill.mutoumianju_skill) { - delete player.getStat().skill.mutoumianju_skill; - } - }, - }, - yuheng: { fullskin: true }, - gjyuheng: { - fullskin: true, - cardimage: "yuheng", - type: "equip", - subtype: "equip5", - nopower: true, - nomod: true, - unique: true, - skills: ["gjyuheng_skill"], - ai: { equipValue: 6 }, - onLose() { - if (player.getStat().skill.gjyuheng_skill) { - delete player.getStat().skill.gjyuheng_skill; - } - }, - }, - gjyuheng_plus: { - fullskin: true, - type: "equip", - subtype: "equip5", - nopower: true, - unique: true, - nomod: true, - epic: true, - cardimage: "yuheng", - skills: ["gjyuheng_plus_skill"], - ai: { equipValue: 7 }, - onLose() { - if (player.getStat().skill.gjyuheng_plus_skill) { - delete player.getStat().skill.gjyuheng_plus_skill; - } - }, - }, - gjyuheng_pro: { - fullskin: true, - type: "equip", - subtype: "equip5", - nopower: true, - unique: true, - nomod: true, - legend: true, - cardimage: "yuheng", - skills: ["gjyuheng_pro_skill"], - ai: { - equipValue: 8, - }, - }, - shatang: { - fullskin: true, - type: "trick", - enable: true, - filterTarget: true, - cardcolor: "red", - cardnature: "fire", - content() { - "step 0"; - target.damage("fire"); - "step 1"; - target.changeHujia(); - }, - ai: { - value: [4, 1], - useful: 2, - order: 2, - result: { - target(player, target) { - if (target.hasSkillTag("nofire")) { - return 1.5; - } - if (target.hasSkillTag("maixie_hp")) { - return 0; - } - if (target.hp == 1) { - return -1; - } - return -1 / Math.sqrt(target.hp + 1); - }, - }, - tag: { - damage: 1, - fireDamage: 1, - natureDamage: 1, - }, - }, - }, - shujinsan: { - fullskin: true, - type: "trick", - enable: true, - filterTarget(card, player, target) { - return target.countCards("he") > 0; - }, - content() { - "step 0"; - target.chooseToDiscard("he", [1, target.countCards("he")], "弃置任意张牌并摸等量的牌").ai = function (card) { - return 6 - get.value(card); - }; - "step 1"; - if (result.bool) { - target.draw(result.cards.length); - } - }, - ai: { - order: 1.5, - value: [4, 1], - tag: { - norepeat: 1, - }, - result: { - target(player, target) { - if (target == player) { - var cards = player.getCards("he"); - var num = -1; - for (var i = 0; i < cards.length; i++) { - if (get.value(cards[i]) < 6) { - num++; - } - } - if (player.needsToDiscard() && num < 1) { - num = 1; - } - return Math.max(0, num); - } else { - if (!player.needsToDiscard() && target.countCards("he") <= 3) { - return 0; - } - return target.countCards("he") / 2; - } - }, - }, - }, - }, - dinvxuanshuang: { - fullskin: true, - type: "basic", - savable: true, - selectTarget: -1, - content() { - "step 0"; - target.recover(); - "step 1"; - if (target.isIn()) { - target.chooseToDiscard([1, Infinity], "he", "弃置任意张牌并摸等量的牌"); - } else { - event.finish(); - } - "step 2"; - if (result.bool) { - target.draw(result.cards.length); - } - }, - ai: { - basic: { - order: 6, - useful: 10, - value: [8, 6.5, 5, 4], - }, - result: { - target: 2, - }, - tag: { - recover: 1, - save: 1, - }, - }, - }, - ziyangdan: { - fullskin: true, - type: "basic", - enable: true, - filterTarget: true, - content() { - target.changeHujia(3); - if (target.hasSkill("ziyangdan")) { - target.storage.ziyangdan += 3; - } else { - target.addSkill("ziyangdan"); - } - }, - ai: { - order: 1.6, - value: [7, 1], - useful: 3, - tag: { - norepeat: 1, - }, - result: { - target(player, target) { - if (target.hp > 2) { - if (player.needsToDiscard()) { - return 1 / target.hp; - } - return 0; - } - if (target.hp > 0) { - return 2 / target.hp; - } - return 0; - }, - }, - }, - }, - yunvyuanshen: { - fullskin: true, - type: "basic", - enable: true, - logv: false, - filterTarget(card, player, target) { - return !target.hasSkill("yunvyuanshen_skill"); - }, - content() { - target.storage.yunvyuanshen_skill = game.createCard("yunvyuanshen"); - target.addSkill("yunvyuanshen_skill"); - if (cards && cards.length) { - card = cards[0]; - } - if (target == targets[0] && card.clone && (card.clone.parentNode == player.parentNode || card.clone.parentNode == ui.arena)) { - card.clone.moveDelete(target); - game.addVideo("gain2", target, get.cardsInfo([card])); - } - }, - ai: { - basic: { - // value: 9, - useful: 4, - value: 7, - }, - order: 2, - result: { - target(player, target) { - return 1 / Math.sqrt(1 + target.hp); - }, - }, - }, - }, - bingpotong: { - fullskin: true, - type: "jiguan", - enable: true, - wuxieable: true, - filterTarget(card, player, target) { - return target.countCards("h") > 0; - }, - selectTarget: [1, 3], - content() { - "step 0"; - if (target.countCards("h") == 0 || player.countCards("h") == 0) { - event.finish(); - return; - } - player - .chooseCard("请展示一张手牌", true) - .set("ai", function () { - var num = 0; - var rand = _status.event.rand; - if (get.color(card) == "red") { - if (rand) { - num -= 6; - } - } else { - if (!rand) { - num -= 6; - } - } - var value = get.value(card); - if (value >= 8) { - return -100; - } - return num - value; - }) - .set("rand", Math.random() < 0.5).prompt2 = "若与" + get.translation(target) + "展示的牌相同,你弃置展示的牌," + get.translation(target) + "失去1点体力"; - "step 1"; - event.card1 = result.cards[0]; - target - .chooseCard("请展示一张手牌", true) - .set("ai", function (card) { - var num = 0; - var rand = _status.event.rand; - if (get.color(card) == "red") { - if (rand) { - num -= 6; - } - } else { - if (!rand) { - num -= 6; - } - } - var value = get.value(card); - if (value >= 8) { - return -100; - } - return num - value; - }) - .set("rand", Math.random() < 0.5).prompt2 = "若与" + get.translation(player) + "展示的牌相同," + get.translation(player) + "弃置展示的牌,你失去1点体力"; - "step 2"; - event.card2 = result.cards[0]; - ui.arena.classList.add("thrownhighlight"); - game.addVideo("thrownhighlight1"); - player.$compare(event.card1, target, event.card2); - game.delay(4); - "step 3"; - game.log(player, "展示了", event.card1); - game.log(target, "展示了", event.card2); - if (get.color(event.card2) == get.color(event.card1)) { - player.discard(event.card1).animate = false; - target.$gain2(event.card2); - var clone = event.card1.clone; - if (clone) { - clone.style.transition = "all 0.5s"; - clone.style.transform = "scale(1.2)"; - clone.delete(); - game.addVideo("deletenode", player, get.cardsInfo([clone])); - } - target.loseHp(); - event.finish(); - event.parent.cancelled = true; - } else { - player.$gain2(event.card1); - target.$gain2(event.card2); - game.delay(); - } - ui.arena.classList.remove("thrownhighlight"); - game.addVideo("thrownhighlight2"); - }, - ai: { - basic: { - order: 2, - value: [5, 1], - useful: 1, - }, - result: { - player(player, target) { - if (player.countCards("h") <= Math.min(5, Math.max(2, player.hp)) && _status.event.name == "chooseToUse") { - if (typeof _status.event.filterCard == "function" && _status.event.filterCard(new lib.element.VCard({ name: "bingpotong" }))) { - return -10; - } - if (_status.event.skill) { - var viewAs = get.info(_status.event.skill).viewAs; - if (viewAs == "bingpotong") { - return -10; - } - if (viewAs && viewAs.name == "bingpotong") { - return -10; - } - } - } - return 0; - }, - target(player, target) { - if (player.countCards("h") <= 1) { - return 0; - } - return -1.5; - }, - }, - tag: { - loseHp: 1, - }, - }, - }, - feibiao: { - type: "jiguan", - enable: true, - fullskin: true, - wuxieable: true, - outrange: { globalFrom: 2 }, - filterTarget(card, player, target) { - return target != player; - }, - content() { - "step 0"; - if (!target.countCards("h", { color: "black" })) { - target.loseHp(); - event.finish(); - } else { - target.chooseToDiscard({ color: "black" }, "弃置一张黑色手牌或受失去1点体力").ai = function (card) { - return 8 - get.value(card); - }; - } - "step 1"; - if (!result.bool) { - target.loseHp(); - } - }, - ai: { - basic: { - order: 9, - value: 3, - useful: 1, - }, - result: { - target: -2, - }, - tag: { - discard: 1, - loseHp: 1, - }, - }, - }, - longxugou: { - type: "jiguan", - enable: true, - fullskin: true, - wuxieable: true, - filterTarget(card, player, target) { - return target != player && target.countGainableCards(player, "e"); - }, - content() { - "step 0"; - var es = target.getGainableCards(player, "e"); - if (es.length) { - player - .choosePlayerCard("e", target, true) - .set("es", es) - .set("filterButton", function (button) { - return _status.event.es.includes(button.link); - }); - } else { - event.finish(); - } - "step 1"; - if (result.bool) { - target.$give(result.links[0], player); - target.lose(result.links[0], ui.special); - event.card = result.links[0]; - game.delay(); - } else { - event.finish(); - } - "step 2"; - if (event.card && get.position(event.card) == "s") { - player.equip(event.card); - } - }, - ai: { - basic: { - order: 9, - value: 6, - useful: 4, - }, - result: { - target: -1, - }, - tag: { - loseCard: 1, - gain: 1, - }, - }, - }, - qiankunbiao: { - type: "jiguan", - enable: true, - fullskin: true, - wuxieable: true, - filterTarget(card, player, target) { - return target != player && target.countCards("he") > 0; - }, - changeTarget(player, targets) { - game.filterPlayer(function (current) { - return get.distance(targets[0], current, "pure") == 1 && current.countCards("he"); - }, targets); - }, - content() { - var he = target.getCards("he"); - if (he.length) { - target.discard(he.randomGet()).delay = false; - } - }, - contentAfter() { - game.delay(0.5); - }, - ai: { - order: 7, - tag: { - loseCard: 1, - discard: 1, - }, - wuxie() { - return 0; - }, - result: { - target: -1, - }, - }, - }, - shenhuofeiya: { - type: "jiguan", - enable: true, - fullskin: true, - wuxieable: true, - filterTarget(card, player, target) { - return target != player; - }, - changeTarget(player, targets) { - game.filterPlayer(function (current) { - return get.distance(targets[0], current, "pure") == 1; - }, targets); - }, - cardcolor: "red", - cardnature: "fire", - content() { - "step 0"; - var next = target.chooseToRespond({ name: "shan" }); - next.ai = function (card) { - if (get.damageEffect(target, player, target, "fire") >= 0) { - return 0; - } - if (player.hasSkillTag("notricksource")) { - return 0; - } - if (target.hasSkillTag("notrick")) { - return 0; - } - if (target.hasSkillTag("noShan")) { - return -1; - } - return 11 - get.value(card); - }; - next.set("respondTo", [player, card]); - next.autochoose = lib.filter.autoRespondShan; - "step 1"; - if (result.bool == false) { - target.damage("fire"); - } - }, - ai: { - wuxie(target, card, player, viewer) { - if (get.attitude(viewer, target) > 0 && target.countCards("h", "shan")) { - if (!target.countCards("h") || target.hp == 1 || Math.random() < 0.7) { - return 0; - } - } - if (get.attitude(viewer, target) <= 0) { - return 0; - } - }, - order: 7, - tag: { - respond: 1, - respondShan: 1, - damage: 1, - natureDamage: 1, - fireDamage: 1, - multitarget: 1, - multineg: 1, - }, - result: { - target(player, target) { - if (target.hasSkillTag("nofire")) { - return 0; - } - if (player.hasUnknown(2)) { - return 0; - } - var nh = target.countCards("h"); - if (lib.config.mode == "identity") { - if (target.isZhu && nh <= 2 && target.hp <= 1) { - return -100; - } - } - if (nh == 0) { - return -2; - } - if (nh == 1) { - return -1.7; - } - return -1.5; - }, - }, - }, - }, - mianlijinzhen: { - type: "jiguan", - enable: true, - fullskin: true, - filterTarget(card, player, target) { - return target.hp >= player.hp; - }, - content() { - "step 0"; - target.draw(); - "step 1"; - target.loseHp(); - }, - ai: { - order: 2, - value: [5, 1], - useful: [4, 1], - result: { - target: -1.5, - }, - tag: { - // damage:1 - }, - }, - }, - // longxugou:{ - // type:'jiguan', - // enable:true, - // fullskin:true, - // }, - liutouge: { - type: "jiguan", - enable: true, - fullskin: true, - filterTarget: true, - wuxieable: true, - content() { - if (player.getEnemies().includes(target)) { - target.getDebuff(); - } else { - target.getBuff(); - } - }, - ai: { - order: 4, - value: 5, - result: { - player(player, target) { - if (get.attitude(player, target) == 0) { - return 0; - } - return 1; - }, - }, - }, - }, - liufengsan: { - type: "trick", - enable: true, - fullskin: true, - filterTarget: true, - content() { - var list = []; - for (var i = 0; i < 2; i++) { - list.push(game.createCard("shan")); - } - target.gain(list, "gain2"); - }, - ai: { - order: 4.5, - value: [5, 1], - tag: { - gain: 1, - norepeat: 1, - }, - result: { - target(player, target) { - if (target == player) { - if (!target.hasShan("all")) { - return 2; - } - var num = target.needsToDiscard(2); - if (num == 0) { - return 1.5; - } - if (num == 1) { - return 1; - } - return 0.5; - } else { - switch (target.countCards("h")) { - case 0: - return 2; - case 1: - return 1.5; - case 2: - return 1; - default: - return 0.5; - } - } - }, - }, - }, - }, - shihuifen: { - type: "trick", - fullskin: true, - filterTarget: true, - global: "g_shihuifen", - content() { - "step 0"; - if (!_status.currentPhase?.isIn()) { - return; - } - var next = _status.currentPhase.chooseToRespond({ name: "shan" }); - next.set("respondTo", [player, card]); - next.set("prompt2", "否则本回合无法对其他角色使用卡牌"); - "step 1"; - if (!result.bool) { - _status.currentPhase.addTempSkill("shihuifen", "phaseUseAfter"); - } - }, - ai: { - order: 1, - value: [5, 1], - useful: [5, 1], - tag: { - respond: 1, - respondShan: 1, - }, - result: { - target(player, target) { - if (target.countCards("h") >= 3 || target.needsToDiscard()) { - return -1.5; - } - return 0; - }, - }, - }, - }, - }, - skill: { - ziyangdan: { - trigger: { player: "phaseBegin" }, - silent: true, - init(player) { - player.storage.ziyangdan = 3; - }, - onremove: true, - content() { - if (player.hujia > 0) { - player.changeHujia(-1); - } - player.storage.ziyangdan--; - if (player.hujia == 0 || player.storage.ziyangdan == 0) { - player.removeSkill("ziyangdan"); - } - }, - ai: { - threaten: 0.8, - }, - }, - luyugeng: { - mark: "card", - enable: "phaseUse", - usable: 1, - nopop: true, - filterCard: { type: "basic" }, - filter(event, player) { - return player.countCards("h", { type: "basic" }); - }, - intro: { - content(storage, player) { - return "出牌阶段限一次,你可以弃置一张基本牌并发现一张牌,持续三回合(剩余" + player.storage.luyugeng_markcount + "回合)"; - }, - }, - content() { - player.discoverCard(); - }, - group: "luyugeng_count", - subSkill: { - count: { - trigger: { player: "phaseAfter" }, - forced: true, - popup: false, - content() { - player.storage.luyugeng_markcount--; - if (player.storage.luyugeng_markcount == 0) { - delete player.storage.luyugeng; - delete player.storage.luyugeng_markcount; - player.removeSkill("luyugeng"); - } else { - player.updateMarks(); - } - }, - }, - }, - }, - xiajiao: { - mark: "card", - trigger: { player: ["phaseUseBefore", "phaseEnd"] }, - forced: true, - popup: false, - nopop: true, - filter(event, player) { - return !player.hasSkill("xiajiao3"); - }, - intro: { - content(storage, player) { - return "你在摸牌阶段额外摸一张牌,然后弃置一张牌(剩余" + player.storage.xiajiao_markcount + "回合)"; - }, - }, - content() { - player.storage.xiajiao_markcount--; - if (player.storage.xiajiao_markcount == 0) { - delete player.storage.xiajiao; - delete player.storage.xiajiao_markcount; - player.removeSkill("xiajiao"); - } else { - player.updateMarks(); - } - player.addTempSkill("xiajiao3"); - }, - group: "xiajiao_draw", - subSkill: { - draw: { - trigger: { player: "phaseDrawBegin" }, - forced: true, - content() { - trigger.num++; - player.addTempSkill("xiajiao2"); - }, - }, - }, - }, - xiajiao2: { - trigger: { player: "phaseDrawAfter" }, - silent: true, - content() { - player.chooseToDiscard("he", true); - }, - }, - xiajiao3: {}, - mizhilianou: { - mark: "card", - trigger: { player: "phaseAfter" }, - forced: true, - popup: false, - nopop: true, - intro: { - content(storage, player) { - return "你可以将一张红桃牌当作桃使用(剩余" + player.storage.mizhilianou_markcount + "回合)"; - }, - }, - content() { - player.storage.mizhilianou_markcount--; - if (player.storage.mizhilianou_markcount == 0) { - delete player.storage.mizhilianou; - delete player.storage.mizhilianou_markcount; - player.removeSkill("mizhilianou"); - } else { - player.updateMarks(); - } - }, - group: "mizhilianou_use", - subSkill: { - use: { - enable: "chooseToUse", - filterCard: { suit: "heart" }, - position: "he", - viewAs: { name: "tao" }, - viewAsFilter(player) { - return player.countCards("he", { suit: "heart" }) > 0; - }, - prompt: "将一张红桃牌当桃使用", - check(card) { - return 10 - get.value(card); - }, - ai: { - skillTagFilter(player) { - return player.countCards("he", { suit: "heart" }) > 0; - }, - save: true, - respondTao: true, - }, - }, - }, - }, - chunbing: { - mark: "card", - trigger: { player: "phaseAfter" }, - forced: true, - popup: false, - nopop: true, - intro: { - content(storage, player) { - return "你的手牌上限+1(剩余" + player.storage.chunbing_markcount + "回合)"; - }, - }, - mod: { - maxHandcard(player, num) { - return num + 1; - }, - }, - content() { - player.storage.chunbing_markcount--; - if (player.storage.chunbing_markcount == 0) { - delete player.storage.chunbing; - delete player.storage.chunbing_markcount; - player.removeSkill("chunbing"); - } else { - player.updateMarks(); - } - }, - }, - gudonggeng: { - mark: "card", - trigger: { player: "phaseBegin" }, - forced: true, - popup: false, - nopop: true, - intro: { - content(storage, player) { - return "当你下一次受到杀造成的伤害时,令伤害-1(剩余" + player.storage.gudonggeng_markcount + "回合)"; - }, - }, - content() { - player.storage.gudonggeng_markcount--; - if (player.storage.gudonggeng_markcount == 0) { - delete player.storage.gudonggeng; - delete player.storage.gudonggeng_markcount; - player.removeSkill("gudonggeng"); - } else { - player.updateMarks(); - } - }, - group: "gudonggeng_damage", - subSkill: { - damage: { - trigger: { player: "damageBegin" }, - filter(event, player) { - return event.card && event.card.name == "sha" && event.num > 0; - }, - forced: true, - content() { - trigger.num--; - delete player.storage.gudonggeng; - delete player.storage.gudonggeng_markcount; - player.removeSkill("gudonggeng"); - }, - }, - }, - ai: { - effect: { - target(card, player, target) { - if (card.name == "sha" && get.attitude(player, target) < 0) { - return 0.5; - } - }, - }, - }, - }, - qingtuan: { - mark: "card", - trigger: { player: "phaseAfter" }, - forced: true, - popup: false, - nopop: true, - intro: { - content(storage, player) { - return "你在回合内使用首张杀时摸一张牌(剩余" + player.storage.qingtuan_markcount + "回合)"; - }, - }, - content() { - player.storage.qingtuan_markcount--; - if (player.storage.qingtuan_markcount == 0) { - delete player.storage.qingtuan; - delete player.storage.qingtuan_markcount; - player.removeSkill("qingtuan"); - } else { - player.updateMarks(); - } - }, - group: "qingtuan_draw", - subSkill: { - draw: { - trigger: { player: "useCard" }, - filter(event, player) { - return event.card.name == "sha" && _status.currentPhase == player; - }, - usable: 1, - forced: true, - content() { - player.draw(); - }, - }, - }, - }, - liyutang: { - mark: "card", - trigger: { player: "phaseEnd" }, - forced: true, - popup: false, - nopop: true, - intro: { - content(storage, player) { - return "结束阶段,若你的体力值为全场最少或之一,你获得1点护甲(剩余" + player.storage.liyutang_markcount + "回合)"; - }, - }, - content() { - if (player.isMinHp()) { - player.logSkill("liyutang"); - player.changeHujia(); - } - player.storage.liyutang_markcount--; - if (player.storage.liyutang_markcount == 0) { - delete player.storage.liyutang; - delete player.storage.liyutang_markcount; - player.removeSkill("liyutang"); - } else { - player.updateMarks(); - } - }, - }, - yougeng: { - mark: "card", - trigger: { player: "phaseBegin" }, - forced: true, - popup: false, - nopop: true, - intro: { - content(storage, player) { - return "准备阶段,若你的体力值为全场最少或之一,你回复1点体力(剩余" + player.storage.yougeng_markcount + "回合)"; - }, - }, - content() { - if (player.isDamaged() && player.isMinHp()) { - player.logSkill("yougeng"); - player.recover(); - } - player.storage.yougeng_markcount--; - if (player.storage.yougeng_markcount == 0) { - delete player.storage.yougeng; - delete player.storage.yougeng_markcount; - player.removeSkill("yougeng"); - } else { - player.updateMarks(); - } - }, - }, - molicha: { - mark: "card", - trigger: { player: "phaseAfter" }, - forced: true, - popup: false, - nopop: true, - intro: { - content(storage, player) { - return "你不能成为其他角色的黑色牌的目标(剩余" + player.storage.molicha_markcount + "回合)"; - }, - }, - mod: { - targetEnabled(card, player, target) { - if (player != target && get.color(card) == "black") { - return false; - } - }, - }, - content() { - player.storage.molicha_markcount--; - if (player.storage.molicha_markcount == 0) { - delete player.storage.molicha; - delete player.storage.molicha_markcount; - player.removeSkill("molicha"); - player.logSkill("molicha"); - } else { - player.updateMarks(); - } - }, - }, - yuanbaorou: { - mark: "card", - trigger: { player: "phaseAfter" }, - forced: true, - popup: false, - nopop: true, - intro: { - content(storage, player) { - return "你在出牌阶段可以额外使用一张杀(剩余" + player.storage.yuanbaorou_markcount + "回合)"; - }, - }, - mod: { - cardUsable(card, player, num) { - if (card.name == "sha") { - return num + 1; - } - }, - }, - content() { - player.storage.yuanbaorou_markcount--; - if (player.storage.yuanbaorou_markcount == 0) { - delete player.storage.yuanbaorou; - delete player.storage.yuanbaorou_markcount; - player.removeSkill("yuanbaorou"); - } else { - player.updateMarks(); - } - }, - }, - tanhuadong: { - mark: "card", - trigger: { player: "phaseEnd" }, - forced: true, - popup: false, - nopop: true, - intro: { - content(storage, player) { - return "出牌阶段结束时,你摸一张牌(剩余" + player.storage.tanhuadong_markcount + "回合)"; - }, - }, - content() { - player.storage.tanhuadong_markcount--; - if (player.storage.tanhuadong_markcount == 0) { - delete player.storage.tanhuadong; - delete player.storage.tanhuadong_markcount; - player.removeSkill("tanhuadong"); - } else { - player.updateMarks(); - } - }, - group: "tanhuadong_draw", - subSkill: { - draw: { - trigger: { player: "phaseUseEnd" }, - forced: true, - content() { - player.draw(); - }, - }, - }, - }, - mapodoufu: { - mark: "card", - trigger: { player: "phaseJieshuBegin" }, - forced: true, - popup: false, - nopop: true, - forceLoad: true, - intro: { - content(storage, player) { - return "结束阶段,你随机弃置一名随机敌人的一张随机牌(剩余" + player.storage.mapodoufu_markcount + "回合)"; - }, - }, - content() { - var list = player.getEnemies(); - for (var i = 0; i < list.length; i++) { - if (!list[i].countCards("he")) { - list.splice(i--, 1); - } - } - var target = list.randomGet(); - if (target) { - player.logSkill("mapodoufu", target); - target.discard(target.getCards("he").randomGet()); - target.addExpose(0.2); - } - player.storage.mapodoufu_markcount--; - if (player.storage.mapodoufu_markcount == 0) { - delete player.storage.mapodoufu; - delete player.storage.mapodoufu_markcount; - player.removeSkill("mapodoufu"); - } else { - player.updateMarks(); - } - }, - }, - yunvyuanshen_skill: { - mark: "card", - intro: { - content: "下一进入濒死状态时回复1点体力", - }, - trigger: { player: "dying" }, - forced: true, - priority: 6.1, - onremove: true, - filter(event, player) { - return player.hp <= 0; - }, - content() { - player.recover(); - player.removeSkill("yunvyuanshen_skill"); - }, - }, - heilonglinpian: { - mark: true, - marktext: "鳞", - intro: { - content: "防御距离+1", - }, - mod: { - globalTo(from, to, distance) { - return distance + 1; - }, - }, - }, - mutoumianju_skill: { - equipSkill: true, - enable: "chooseToUse", - filterCard: true, - usable: 1, - viewAs: { name: "sha" }, - viewAsFilter(player) { - if (!player.countCards("h")) { - return false; - } - }, - prompt: "将一张手牌当杀使用", - check(card) { - return 5 - get.value(card); - }, - ai: { - respondSha: true, - order() { - return get.order({ name: "sha" }) + 0.1; - }, - skillTagFilter(player, tag, arg) { - if (arg != "use") { - return false; - } - if (!player.countCards("h")) { - return false; - } - }, - }, - }, - gjyuheng_skill: { - equipSkill: true, - enable: "phaseUse", - usable: 1, - filterCard: { suit: "spade" }, - check(card) { - return 8 - get.value(card); - }, - filter(event, player) { - if (!player.countCards("h", { suit: "spade" })) { - return false; - } - var enemies = player.getEnemies(); - for (var i = 0; i < enemies.length; i++) { - if (enemies[i].countCards("h", { suit: "spade" })) { - return true; - } - } - return false; - }, - content() { - var enemies = player.getEnemies(); - var list = []; - for (var i = 0; i < enemies.length; i++) { - var hs = enemies[i].getCards("h", { suit: "spade" }); - if (hs.length) { - list.push([enemies[i], hs]); - } - } - if (list.length) { - var current = list.randomGet(); - player.line(current[0]); - current[0].give(current[1].randomGet(), player, true); - } - "step 1"; - var card = player.getEquip("gjyuheng"); - if (card) { - if (typeof card.storage.gjyuheng != "number") { - card.storage.gjyuheng = 1; - } else { - card.storage.gjyuheng++; - } - if (card.storage.gjyuheng >= 3) { - card.init([card.suit, card.number, "gjyuheng_plus", card.nature]); - player.addTempSkill("gjyuheng_plus_temp"); - } - } - }, - ai: { - order: 9, - result: { - player: 1, - }, - }, - }, - gjyuheng_plus_temp: {}, - gjyuheng_plus_skill: { - equipSkill: true, - enable: "phaseUse", - usable: 1, - filterCard: { color: "black" }, - check(card) { - return 8 - get.value(card); - }, - filter(event, player) { - // if(player.hasSkill('gjyuheng_plus_temp')) return false; - if (!player.countCards("h", { color: "black" })) { - return false; - } - var enemies = player.getEnemies(); - for (var i = 0; i < enemies.length; i++) { - if (enemies[i].countCards("h", { suit: "spade" })) { - return true; - } - } - return false; - }, - content() { - var enemies = player.getEnemies(); - var list = []; - for (var i = 0; i < enemies.length; i++) { - var hs = enemies[i].getCards("h", { suit: "spade" }); - if (hs.length) { - list.push([enemies[i], hs]); - } - } - if (list.length) { - var current = list.randomGet(); - player.line(current[0]); - current[0].give(current[1].randomGet(), player, true); - } - "step 1"; - var card = player.getEquip("gjyuheng_plus"); - if (card) { - if (typeof card.storage.gjyuheng != "number") { - card.storage.gjyuheng = 1; - } else { - card.storage.gjyuheng++; - } - if (card.storage.gjyuheng >= 7) { - card.init([card.suit, card.number, "gjyuheng_pro", card.nature]); - } - } - }, - ai: { - order: 9, - result: { - player: 1, - }, - }, - }, - gjyuheng_pro_skill: { - equipSkill: true, - enable: "phaseUse", - filterCard: { color: "black" }, - check(card) { - return 8 - get.value(card); - }, - filter(event, player) { - if (!player.countCards("h", { color: "black" })) { - return false; - } - var enemies = player.getEnemies(); - for (var i = 0; i < enemies.length; i++) { - if (enemies[i].countCards("h", { suit: "spade" })) { - return true; - } - } - return false; - }, - content() { - var enemies = player.getEnemies(); - var list = []; - for (var i = 0; i < enemies.length; i++) { - var hs = enemies[i].getCards("h", { suit: "spade" }); - if (hs.length) { - list.push([enemies[i], hs]); - } - } - if (list.length) { - var current = list.randomGet(); - player.line(current[0]); - current[0].give(current[1].randomGet(), player, true); - } - "step 1"; - var card = player.getEquip("gjyuheng"); - if (card) { - if (typeof card.storage.gjyuheng != "number") { - card.storage.gjyuheng = 1; - } else { - card.storage.gjyuheng++; - } - if (card.storage.gjyuheng >= 3) { - card.init([card.suit, card.number, "gjyuheng_plus", card.nature]); - player.addTempSkill("gjyuheng_plus_temp"); - } - } - }, - ai: { - order: 9, - result: { - player: 1, - }, - }, - }, - shihuifen: { - mark: true, - intro: { - content: "使用卡牌无法指定其他角色为目标", - }, - mod: { - playerEnabled(card, player, target) { - if (player != target) { - return false; - } - }, - }, - }, - g_shihuifen: { - trigger: { global: "phaseUseBegin" }, - direct: true, - filter(event, player) { - if (event.player.hasSkill("shihuifen")) { - return false; - } - if (event.player == player) { - return false; - } - if (!lib.filter.targetEnabled({ name: "shihuifen" }, player, event.player)) { - return false; - } - return player.hasCard("shihuifen") || player.hasSkillTag("shihuifen"); - }, - content() { - player.chooseToUse( - get.prompt("shihuifen", trigger.player).replace(/发动/, "使用"), - function (card, player) { - if (card.name != "shihuifen") { - return false; - } - return lib.filter.cardEnabled(card, player, "forceEnable"); - }, - trigger.player, - -1 - ).targetRequired = true; - }, - }, - g_jinlianzhu: { - trigger: { global: "damageBefore" }, - direct: true, - filter(event, player) { - if (!lib.filter.targetEnabled({ name: "jinlianzhu" }, player, event.player)) { - return false; - } - return player.hasCard("jinlianzhu"); - }, - content() { - player.chooseToUse( - get.prompt("jinlianzhu", trigger.player).replace(/发动/, "使用"), - function (card, player) { - if (card.name != "jinlianzhu") { - return false; - } - return lib.filter.cardEnabled(card, player, "forceEnable"); - }, - trigger.player, - -1 - ).targetRequired = true; - }, - }, - }, - cardType: { - food: 0.3, - }, - translate: { - jinlianzhu: "金莲珠", - jinlianzhu_info: "对一名即将受到伤害的角色使用,防止此伤害,并令伤害来源摸一张牌。", - shihuifen: "石灰粉", - shihuifen_info: "在一名其他角色的出牌阶段开始时对其使用,目标需打出一张【闪】,否则此阶段使用卡牌无法指定其他角色为目标。", - liufengsan: "流风散", - liufengsan_info: "出牌阶段对一名角色使用,目标获得两张闪。", - liutouge: "六骰格", - liutouge_info: "出牌阶段对一名角色使用,若目标是敌人,对目标施加一个随机的负面效果;否则对目标施加一个随机的正面效果。", - longxugou: "龙须钩", - longxugou_info: "出牌阶段对一名装备区内有牌的其他角色使用,获得其装备区内的一张牌并装备之。", - mianlijinzhen: "棉里针", - mianlijinzhen_info: "出牌阶段对一名体力值不小于你的角色使用,目标摸一张牌然后失去1点体力。", - shenhuofeiya: "神火飞鸦", - shenhuofeiya_info: "出牌阶段对一名其他角色和其相邻角色使用,目标需打出一张【闪】,否则受到1点火属性伤害。", - qiankunbiao: "乾坤镖", - qiankunbiao_info: "随机弃置一名其他角色和其相邻角色的一张牌。", - - bingpotong: "天女散花", - bingpotong_ab: "散花", - bingpotong_info: "出牌阶段对至多3名角色使用,你与每个目标依次同时展示一张手牌,若颜色相同,你弃置展示的手牌,目标失去1点体力并终止结算。", - feibiao: "飞镖", - feibiao_info: "出牌阶段,对一名距离1以外的角色使用,令其弃置一张黑色手牌或失去1点体力。", - - dinvxuanshuang: "帝女玄霜", - dinvxuanshuang_info: "对一名濒死状态的角色使用,目标回复1点体力,然后可以弃置任意张牌并摸等量的牌。", - yunvyuanshen: "玉女元参", - yunvyuanshen_skill: "玉女元参", - yunvyuanshen_info: "出牌阶段对一名角色使用,目标在下一次进入濒死状态时回复1点体力。", - ziyangdan: "紫阳丹", - ziyangdan_info: "出牌阶段对一名角色使用,目标获得3点护甲,此后每个准备阶段失去1点护甲,直到首次失去所有护甲或累计以此法失去3点护甲。", - gjyuheng: "玉衡", - gjyuheng_plus: "玉衡", - gjyuheng_pro: "玉衡", - gjyuheng_skill: "玉衡", - gjyuheng_plus_skill: "玉衡", - gjyuheng_pro_skill: "玉衡", - gjyuheng_info: "出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑桃手牌,然后获得一名随机敌方角色的一张随机黑桃手牌(此牌在本局游戏中第三次和第七次发动效果后,分别自动获得一次强化)。", - gjyuheng_plus_info: "由普通玉衡强化得到,将玉衡技能描述中的“弃置一张黑桃手牌”改为“弃置一张黑色手牌”。", - gjyuheng_pro_info: "由普通玉衡二次强化得到,将玉横技能描述中的“弃置一张黑桃手牌”改为“弃置一张黑色手牌”,并去掉使用次数限制。", - gjyuheng_skill_info: "出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑桃手牌,然后获得一名随机敌方角色的一张随机黑桃手牌。", - gjyuheng_plus_skill_info: "出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑色手牌,然后获得一名随机敌方角色的一张随机黑桃手牌。", - gjyuheng_pro_skill_info: "出牌阶段,若敌方角色有黑桃手牌,你可以弃置一张黑色手牌,然后获得一名随机敌方角色的一张随机黑桃手牌。", - shujinsan: "舒筋散", - shujinsan_info: "出牌阶段对任意角色使用,目标可弃置任意张牌,并摸等量的牌。", - mutoumianju: "木头面具", - mutoumianju_info: "出牌阶段限一次,你可以将一张手牌当作杀使用。", - mutoumianju_skill: "木杀", - mutoumianju_skill_info: "出牌阶段限一次,你可以将一张手牌当作杀使用。", - heilonglinpian: "黑龙鳞片", - heilonglinpian_info: "出牌阶段对自己使用,获得1点护甲,直到下一回合开始,你的防御距离+1。", - shatang: "沙棠", - shatang_info: "出牌阶段对一名角色使用,对目标造成1点火焰伤害,然后目标获得1点护甲。", - - food: "食物", - chunbing: "春饼", - chunbing_info: "你的手牌上限+1,持续五回合。", - gudonggeng: "骨董羹", - gudonggeng_info: "当你下一次受到杀造成的伤害时,令伤害-1,持续三回合。", - yougeng: "酉羹", - yougeng_info: "准备阶段,若你的体力值为全场最少或之一,你回复1点体力,持续两回合。", - liyutang: "鲤鱼汤", - liyutang_info: "结束阶段,若你的体力值为全场最少或之一,你获得1点护甲,持续两回合。", - mizhilianou: "蜜汁藕", - mizhilianou_info: "你可以将一张红桃牌当作桃使用,持续四回合。", - xiajiao: "虾饺", - xiajiao_info: "你在摸牌阶段额外摸一张牌,然后弃置一张牌,持续三回合。", - tanhuadong: "昙花冻", - tanhuadong_info: "出牌阶段结束时,你摸一张牌,持续三回合。", - qingtuan: "青团", - qingtuan_info: "你在回合内使用首张杀时摸一张牌,持续两回合。", - luyugeng: "鲈鱼羹", - luyugeng_info: "出牌阶段限一次,你可以弃置一张基本牌并发现一张牌,持续三回合。", - yuanbaorou: "元宝肉", - yuanbaorou_info: "你在出牌阶段可以额外使用一张杀,持续四回合。", - molicha: "茉莉茶", - molicha_info: "你不能成为其他角色的黑色牌的目标,持续四回合。", - mapodoufu: "麻婆豆腐", - mapodoufu_info: "结束阶段,你弃置一名随机敌人的一张随机牌,持续两回合。", - }, - list: [ - ["spade", 2, "tanhuadong"], - ["club", 1, "molicha"], - ["club", 3, "chunbing"], - ["heart", 12, "yougeng"], - ["heart", 8, "gudonggeng"], - ["heart", 1, "liyutang"], - ["diamond", 4, "mizhilianou"], - ["diamond", 6, "xiajiao"], - ["spade", 3, "qingtuan"], - ["club", 11, "luyugeng"], - ["heart", 4, "mapodoufu"], - ["spade", 8, "yuanbaorou"], - - ["spade", 7, "gjyuheng"], - ["club", 4, "mutoumianju"], - ["spade", 2, "heilonglinpian"], - ["spade", 1, "mianlijinzhen"], - ["heart", 13, "yunvyuanshen"], - - ["club", 8, "feibiao", "poison"], - ["diamond", 9, "feibiao", "poison"], - - ["spade", 3, "bingpotong", "poison"], - ["club", 12, "bingpotong", "poison"], - - ["club", 5, "shihuifen"], - ["club", 1, "shihuifen"], - ["spade", 13, "shihuifen"], - - ["diamond", 6, "shujinsan"], - ["spade", 2, "shujinsan"], - - ["diamond", 6, "ziyangdan"], - ["heart", 1, "ziyangdan"], - - // ['diamond',7,'dinvxuanshuang'], - ["heart", 9, "dinvxuanshuang"], - - ["spade", 9, "qiankunbiao"], - ["club", 13, "qiankunbiao"], - - ["diamond", 9, "shenhuofeiya"], - ["spade", 7, "longxugou"], - - ["heart", 9, "jinlianzhu"], - ["spade", 7, "jinlianzhu"], - - ["heart", 6, "liutouge"], - ["club", 6, "liutouge"], - - ["club", 6, "liufengsan"], - ["club", 3, "liufengsan"], - - ["heart", 13, "shatang", "fire"], - ], - }; -}); diff --git a/card/guozhan.js b/card/guozhan.js index aad3792421..54f3714b34 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -671,7 +671,7 @@ game.import("card", function () { }, }, shuiyanqijunx: { - audio: "shuiyanqijun", + audio: true, fullskin: true, type: "trick", cardnature: "thunder", diff --git a/card/gwent.js b/card/gwent.js deleted file mode 100644 index 89281d9268..0000000000 --- a/card/gwent.js +++ /dev/null @@ -1,2439 +0,0 @@ -import { lib, game, ui, get, ai, _status } from "../noname.js"; -game.import("card", function () { - return { - name: "gwent", - card: { - gw_dieyi: { - fullskin: true, - }, - gw_dieyi_equip1: { - fullskin: true, - vanish: true, - hidden: true, - cardimage: "gw_dieyi", - type: "equip", - subtype: "equip1", - //TODO: 维护所有水乎武将的onLose事件 - onLose() { - lib.skill.gw_dieyi.process(player); - }, - loseDelay: false, - skills: [], - ai: { - equipValue: 0, - }, - }, - gw_dieyi_equip2: { - fullskin: true, - vanish: true, - hidden: true, - cardimage: "gw_dieyi", - type: "equip", - subtype: "equip2", - onLose() { - lib.skill.gw_dieyi.process(player); - }, - loseDelay: false, - skills: [], - ai: { - equipValue: 0, - }, - }, - gw_dieyi_equip3: { - fullskin: true, - vanish: true, - hidden: true, - cardimage: "gw_dieyi", - type: "equip", - subtype: "equip3", - onLose() { - lib.skill.gw_dieyi.process(player); - }, - loseDelay: false, - skills: [], - ai: { - equipValue: 0, - }, - }, - gw_dieyi_equip4: { - fullskin: true, - vanish: true, - hidden: true, - cardimage: "gw_dieyi", - type: "equip", - subtype: "equip4", - onLose() { - lib.skill.gw_dieyi.process(player); - }, - loseDelay: false, - skills: [], - ai: { - equipValue: 0, - }, - }, - gw_dieyi_equip5: { - fullskin: true, - vanish: true, - hidden: true, - cardimage: "gw_dieyi", - type: "equip", - subtype: "equip5", - onLose() { - lib.skill.gw_dieyi.process(player); - }, - loseDelay: false, - skills: [], - ai: { - equipValue: 0, - }, - }, - gw_dieyi_judge: { - fullskin: true, - vanish: true, - hidden: true, - cardimage: "gw_dieyi", - enable: true, - type: "delay", - filterTarget: true, - effect() { - lib.skill.gw_dieyi.process(player); - }, - }, - gw_hudiewu: { - fullborder: "gold", - type: "spell", - subtype: "spell_gold", - vanish: true, - enable(card, player) { - return game.hasPlayer(function (current) { - return current != player && current.countCards("ej"); - }); - }, - notarget: true, - contentBefore() { - player.$skill("蝴蝶舞", "legend", "metal"); - game.delay(2); - }, - content() { - "step 0"; - event.targets = game - .filterPlayer(function (current) { - return current.countCards("ej"); - }) - .sortBySeat(); - event.targets.remove(player); - "step 1"; - if (event.targets.length) { - var target = event.targets.shift(); - var ej = target.getCards("ej"); - player.line(target); - target.removeEquipTrigger(); - for (var i = 0; i < ej.length; i++) { - game.createCard(ej[i]).discard(); - ej[i].init([ej[i].suit, ej[i].number, "gw_dieyi_" + (get.subtype(ej[i]) || "judge")]); - } - event.redo(); - } - }, - contentAfter() { - var evt = _status.event.getParent("phaseUse"); - if (evt && evt.name == "phaseUse") { - evt.skipped = true; - } - }, - ai: { - value: 6, - useful: [6, 1], - result: { - player(player) { - return game.countPlayer(function (current) { - if (current == player) { - return; - } - return -(current.countCards("e") - current.countCards("j") / 3) * get.sgn(get.attitude(player, current)); - }); - }, - }, - order: 0.7, - }, - }, - gw_yigeniyin: { - fullborder: "gold", - type: "spell", - subtype: "spell_gold", - vanish: true, - enable: true, - notarget: true, - contentBefore() { - player.$skill("伊格尼印", "legend", "metal"); - game.delay(2); - }, - content() { - "step 0"; - var enemies = player.getEnemies(); - var target = get.max(enemies, "hp", "list").randomGet(); - if (target) { - player.line(target, "fire"); - target.damage("fire"); - game.delay(); - } - "step 1"; - event.targets = game - .filterPlayer(function (current) { - return current.isMaxHp(); - }) - .sortBySeat(); - player.line(event.targets, "fire"); - "step 2"; - if (event.targets.length) { - var target = event.targets.shift(); - player.line(target, "fire"); - target.damage("fire"); - event.redo(); - } - }, - contentAfter() { - var evt = _status.event.getParent("phaseUse"); - if (evt && evt.name == "phaseUse") { - evt.skipped = true; - } - }, - ai: { - value: 8, - useful: [6, 1], - result: { - player(player) { - var enemies = player.getEnemies(); - var players = game.filterPlayer(); - var func = function (current) { - if (current) { - return current.hp; - } - return 0; - }; - var max1 = get.max(enemies, func); - for (var i = 0; i < players.length; i++) { - if (players[i].hp == max1) { - players.splice(i, 1); - break; - } - } - var max2 = get.max(players, func); - if (max1 - 1 > max2) { - return get.damageEffect(get.max(enemies, func, "item"), player, player, "fire"); - } else { - var num; - if (max1 > max2) { - num = get.sgn(get.damageEffect(get.max(enemies, func, "item"), player, player, "fire")); - } else if (max1 == max2) { - num = 0; - } else { - num = 1; - } - return ( - num + - game.countPlayer(function (current) { - if (current.hp >= max2) { - return get.sgn(get.damageEffect(current, player, player, "fire")); - } - }) - ); - } - }, - }, - order: 0.7, - }, - }, - gw_leizhoushu: { - fullborder: "gold", - type: "spell", - subtype: "spell_gold", - vanish: true, - enable: true, - notarget: true, - contentBefore() { - player.$skill("雷咒术", "legend", "metal"); - game.delay(2); - }, - content() { - if (player.hasSkill("gw_leizhoushu")) { - if (typeof player.storage.gw_leizhoushu != "number") { - player.storage.gw_leizhoushu = 2; - } else { - player.storage.gw_leizhoushu++; - } - player.syncStorage("gw_leizhoushu"); - player.updateMarks(); - } else { - player.addSkill("gw_leizhoushu"); - } - }, - contentAfter() { - var evt = _status.event.getParent("phaseUse"); - if (evt && evt.name == "phaseUse") { - evt.skipped = true; - } - }, - ai: { - value: 8, - useful: [6, 1], - result: { - player(player) { - return ( - 1 + - game.countPlayer(function (current) { - if (current != player && current.isMaxHandcard()) { - return -get.sgn(get.attitude(player, current)); - } - }) - ); - }, - }, - order: 0.5, - }, - }, - gw_aerdeyin: { - fullborder: "gold", - type: "spell", - subtype: "spell_gold", - vanish: true, - enable(card, player) { - var enemies = player.getEnemies(); - return enemies.length > 0; - }, - notarget: true, - contentBefore() { - player.$skill("阿尔德印", "legend", "metal"); - game.delay(2); - }, - content() { - "step 0"; - var enemies = player.getEnemies(); - event.list = [enemies.randomGet()]; - "step 1"; - if (event.list.length) { - var target = event.list.shift(); - event.target = target; - player.line(target, "green"); - target.damage(); - } else { - delete event.target; - } - "step 2"; - if (event.target) { - if (!event.target.isTurnedOver()) { - event.target.turnOver(); - event.target.addSkill("gw_aerdeyin"); - } - event.goto(1); - } - "step 3"; - game.delay(); - }, - contentAfter() { - var evt = _status.event.getParent("phaseUse"); - if (evt && evt.name == "phaseUse") { - evt.skipped = true; - } - }, - ai: { - value: 8, - useful: [6, 1], - result: { - player(player) { - return game.countPlayer(function (current) { - if (get.distance(player, current, "pure") == 1) { - var att = get.sgn(get.attitude(player, current)); - if (current == player.next) { - return -att * 1.5; - } - return -att; - } - }); - }, - }, - order: 0.5, - }, - }, - gw_ansha: { - fullborder: "gold", - type: "spell", - subtype: "spell_gold", - vanish: true, - enable(card, player) { - var enemies = player.getEnemies(); - return game.hasPlayer(function (current) { - return current.hp == 1 && enemies.includes(current); - }); - }, - notarget: true, - contentBefore() { - player.$skill("暗杀", "legend", "metal"); - game.delay(2); - }, - content() { - var enemies = player.getEnemies(); - var list = game.filterPlayer(function (current) { - return current.hp == 1 && enemies.includes(current); - }); - if (list.length) { - var target = list.randomGet(); - player.line(target); - target.die(); - } - }, - contentAfter() { - var evt = _status.event.getParent("phaseUse"); - if (evt && evt.name == "phaseUse") { - evt.skipped = true; - } - }, - ai: { - value: 8, - useful: [6, 1], - result: { - player: 1, - }, - order: 0.6, - }, - }, - gw_xinsheng: { - fullborder: "gold", - type: "spell", - subtype: "spell_gold", - vanish: true, - enable(card, player) { - return game.hasPlayer(function (current) { - return !current.isUnseen(); - }); - }, - notarget: true, - contentBefore() { - player.$skill("新生", "legend", "metal"); - game.delay(2); - }, - content() { - "step 0"; - var target = get.max( - game - .filterPlayer(function (current) { - return !current.isUnseen(); - }, "list") - .randomSort(), - function (current) { - var att = get.attitude(player, current); - if (att < 0 && current.isDamaged() && current.hp <= 3) { - return -10; - } - var rank = get.rank(current, true); - if (current.maxHp >= 3) { - if (current.hp <= 1) { - if (att > 0) { - return att * 3 + 2; - } - return att * 3; - } else if (current.hp == 2) { - if (att > 0) { - att *= 1.5; - } else { - att /= 1.5; - } - } - } - if (rank >= 7) { - if (att > 0) { - return att / 10; - } - return -att / 5; - } else if (rank <= 4) { - if (att < 0) { - return -att / 10; - } - return att; - } - return Math.abs(att / 2); - }, - "item" - ); - event.aitarget = target; - var list = []; - for (var i in lib.character) { - if (!lib.filter.characterDisabled(i) && !lib.filter.characterDisabled2(i)) { - list.push(i); - } - } - var players = game.players.concat(game.dead); - for (var i = 0; i < players.length; i++) { - list.remove(players[i].name); - list.remove(players[i].name1); - list.remove(players[i].name2); - } - var dialog = ui.create.dialog("选择一张武将牌", "hidden"); - dialog.add([list.randomGets(12), "character"]); - player.chooseButton(dialog, true).ai = function (button) { - if (get.attitude(player, event.aitarget) > 0) { - return get.rank(button.link, true); - } else { - return -get.rank(button.link, true); - } - }; - "step 1"; - event.nametarget = result.links[0]; - player.chooseTarget(true, "使用" + get.translation(event.nametarget) + "替换一名角色的武将牌", function (card, player, target) { - return !target.isUnseen() && !target.isMin(); - }).ai = function (target) { - if (target == event.aitarget) { - return 1; - } else { - return 0; - } - }; - "step 2"; - var target = result.targets[0]; - var hp = target.hp; - target.reinit(target.name, event.nametarget); - target.hp = Math.min(hp + 1, target.maxHp); - target.update(); - player.line(target, "green"); - "step 3"; - game.triggerEnter(target); - }, - contentAfter() { - var evt = _status.event.getParent("phaseUse"); - if (evt && evt.name == "phaseUse") { - evt.skipped = true; - } - }, - ai: { - value: 8, - useful: [6, 1], - result: { - player: 1, - }, - order: 0.5, - }, - }, - gw_niuquzhijing: { - fullborder: "gold", - type: "spell", - subtype: "spell_gold", - vanish: true, - enable(card, player) { - return game.hasPlayer(function (current) { - return current.hp != player.hp; - }); - }, - notarget: true, - contentBefore() { - var list1 = game.filterPlayer(function (current) { - return current.isMaxHp(); - }); - var list2 = game.filterPlayer(function (current) { - return current.isMinHp(); - }); - player.line(list1); - for (var i = 0; i < list1.length; i++) { - list1[i].addTempClass("target"); - } - setTimeout(function () { - var list11 = list1.slice(0); - var list22 = list2.slice(0); - while (list22.length > list11.length) { - list11.push(list1.randomGet()); - } - while (list22.length < list11.length) { - list22.push(list2.randomGet()); - } - list11.sortBySeat(); - list22.sortBySeat(); - while (list11.length) { - list11.shift().line(list22.shift(), "green"); - } - }, 500); - player.$skill("纽曲之镜", "legend", "metal"); - game.delay(2); - }, - content() { - var max = null, - min = null; - for (var i = 0; i < game.players.length; i++) { - if (game.players[i].isMaxHp()) { - max = game.players[i].hp; - break; - } - } - for (var i = 0; i < game.players.length; i++) { - if (game.players[i].isMinHp()) { - min = game.players[i].hp; - break; - } - } - var targets = game.filterPlayer(); - if (max != min && max != null && min != null) { - for (var i = 0; i < targets.length; i++) { - if (targets[i].hp == max) { - targets[i].hp--; - targets[i].maxHp--; - targets[i].$damagepop(-1); - } else if (targets[i].hp == min) { - targets[i].hp++; - targets[i].maxHp++; - targets[i].$damagepop(1, "wood"); - } - targets[i].update(); - } - } - }, - contentAfter() { - var evt = _status.event.getParent("phaseUse"); - if (evt && evt.name == "phaseUse") { - evt.skipped = true; - } - }, - ai: { - value: 8, - useful: [6, 1], - result: { - player(player, target) { - return game.countPlayer(function (current) { - if (current.isMaxHp()) { - return -get.sgn(get.attitude(player, current)); - } - if (current.isMinHp()) { - return get.sgn(get.attitude(player, current)); - } - }); - }, - }, - order: 3.5, - }, - }, - gw_zhongmozhizhan: { - fullborder: "gold", - type: "spell", - subtype: "spell_gold", - vanish: true, - enable: true, - notarget: true, - contentBefore() { - player.line(game.filterPlayer()); - player.$skill("终末之战", "legend", "metal"); - game.delay(2); - }, - content() { - "step 0"; - event.num = 0; - event.targets = game.filterPlayer().sortBySeat(); - "step 1"; - if (event.num < targets.length) { - ui.clear(); - var target = targets[event.num]; - var cards = target.getCards("hej"); - target.lose(cards)._triggered = null; - target.$throw(cards); - event.num++; - event.redo(); - game.delay(0.7); - } - "step 2"; - ui.clear(); - }, - contentAfter() { - var evt = _status.event.getParent("phaseUse"); - if (evt && evt.name == "phaseUse") { - evt.skipped = true; - } - }, - ai: { - value: 8, - useful: [6, 1], - result: { - player(player, target) { - if (player.hasUnknown()) { - return 0; - } - return -game.countPlayer(function (current) { - return current.countCards("he") * get.sgn(get.attitude(player, current)); - }); - }, - }, - order: 0.5, - }, - }, - gw_ganhan: { - fullborder: "gold", - type: "spell", - subtype: "spell_gold", - vanish: true, - enable: true, - notarget: true, - contentBefore() { - player.line(game.filterPlayer()); - player.$skill("干旱", "legend", "metal"); - game.delay(2); - }, - content() { - "step 0"; - event.num = 0; - event.targets = game.filterPlayer().sortBySeat(); - "step 1"; - if (event.num < targets.length) { - ui.clear(); - var target = targets[event.num]; - target.loseMaxHp(true); - event.num++; - event.redo(); - } - "step 2"; - ui.clear(); - }, - contentAfter() { - var evt = _status.event.getParent("phaseUse"); - if (evt && evt.name == "phaseUse") { - evt.skipped = true; - } - }, - ai: { - value: 7, - useful: [5, 1], - result: { - player(player, target) { - if (player.hasUnknown()) { - return 0; - } - return game.countPlayer(function (current) { - var att = -get.sgn(get.attitude(player, current)); - if (current.isHealthy()) { - switch (current.hp) { - case 1: - return att * 3; - case 2: - return att * 2; - case 3: - return att * 1.5; - case 4: - return att; - default: - return att * 0.5; - } - } else if (current.maxHp - current.hp == 1) { - switch (current.hp) { - case 1: - return att * 0.5; - case 2: - return att * 0.3; - case 3: - return att * 0.2; - default: - return att * 0.15; - } - } else { - return att * 0.1; - } - }); - }, - }, - order: 0.5, - }, - }, - gw_huangjiashenpan: { - fullborder: "gold", - type: "spell", - subtype: "spell_gold", - vanish: true, - enable: true, - notarget: true, - contentBefore() { - player.$skill("皇家审判", "legend", "metal"); - game.delay(2); - }, - content() { - "step 0"; - var list = get.libCard(function (info) { - return info.subtype == "spell_gold"; - }); - list.remove("gw_huangjiashenpan"); - if (list.length) { - player.chooseVCardButton(list, true, "notype").ai = function () { - return Math.random(); - }; - } - "step 1"; - if (result.bool) { - player.gain(game.createCard(result.links[0][2]), "draw"); - } - }, - contentAfter() { - var evt = _status.event.getParent("phaseUse"); - if (evt && evt.name == "phaseUse") { - evt.skipped = true; - } - }, - ai: { - value: 8, - useful: [6, 1], - result: { - player: 1, - }, - order: 0.1, - }, - }, - gw_tunshi: { - fullborder: "gold", - type: "spell", - subtype: "spell_gold", - vanish: true, - enable(event, player) { - if (player.maxHp == 1) { - return false; - } - var list = player.getEnemies(); - for (var i = 0; i < list.length; i++) { - if (list[i].isMin()) { - continue; - } - if (list[i].getStockSkills().length) { - return true; - } - } - }, - notarget: true, - contentBefore() { - player.$skill("吞噬", "legend", "metal"); - game.delay(2); - }, - content() { - var list = player.getEnemies(); - for (var i = 0; i < list.length; i++) { - if (list[i].isMin() || !list[i].getStockSkills().length) { - list.splice(i--, 1); - } - } - if (list.length) { - var target = list.randomGet(); - target.addExpose(0.1); - player.line(target); - var skill = target.getStockSkills().randomGet(); - target.popup(skill); - player.addSkill(skill); - target.removeSkill(skill); - player.loseHp(); - player.loseMaxHp(true); - target.gainMaxHp(true); - target.recover(); - } - }, - contentAfter() { - var evt = _status.event.getParent("phaseUse"); - if (evt && evt.name == "phaseUse") { - evt.skipped = true; - } - }, - ai: { - value: 8, - useful: [6, 1], - result: { - player(player) { - if (player.hp <= 2) { - return 0; - } - return 1; - }, - }, - order: 0.4, - }, - }, - gw_chongci: { - fullborder: "gold", - type: "spell", - subtype: "spell_gold", - vanish: true, - enable: true, - notarget: true, - contentBefore() { - player.$skill("冲刺", "legend", "metal"); - game.delay(2); - }, - content() { - "step 0"; - event.hs = player.getCards("h"); - event.es = player.getCards("e"); - player.discard(event.hs.concat(event.es)); - "step 1"; - var hs2 = []; - for (var i = 0; i < event.hs.length; i++) { - var type = get.type(event.hs[i], "trick"); - var cardname = event.hs[i].name; - var list = game.findCards(function (name) { - if (cardname == name) { - return; - } - if (get.type({ name: name }, "trick") == type) { - return true; - } - }); - if (!list.length) { - list = [cardname]; - } - hs2.push(game.createCard(list.randomGet())); - } - var list = get.libCard(function (info) { - return info.type == "spell" && info.subtype != "spell_gold"; - }); - if (list.length) { - hs2.push(game.createCard(list.randomGet())); - } - if (hs2.length) { - player.gain(hs2, "draw"); - } - "step 2"; - var es2 = []; - for (var i = 0; i < event.es.length; i++) { - var subtype = get.subtype(event.es[i]); - var cardname = event.es[i].name; - var list = game.findCards(function (name) { - if (cardname == name) { - return; - } - if (get.subtype({ name: name }) == subtype) { - return true; - } - }); - if (!list.length) { - list = [cardname]; - } - es2.push(game.createCard(list.randomGet())); - } - if (es2.length) { - game.delay(); - player.$draw(es2); - for (var i = 0; i < es2.length; i++) { - player.equip(es2[i]); - } - } - "step 3"; - player.tempHide(); - }, - contentAfter() { - var evt = _status.event.getParent("phaseUse"); - if (evt && evt.name == "phaseUse") { - evt.skipped = true; - } - }, - ai: { - value: 8, - useful: [6, 1], - result: { - player: 1, - }, - order: 0.2, - }, - }, - gw_youer: { - fullborder: "silver", - type: "spell", - subtype: "spell_silver", - vanish: true, - enable: true, - filterTarget(card, player, target) { - return target != player && target.countCards("h") > 0; - }, - content() { - "step 0"; - var cards = target.getCards("h"); - target.lose(cards, ui.special); - target.storage.gw_youer = cards; - target.addSkill("gw_youer"); - "step 1"; - player.draw(); - }, - ai: { - basic: { - order: 10, - value: 7, - useful: [3, 1], - }, - result: { - target(player, target) { - if (target.hasSkillTag("noh")) { - return 3; - } - var num = -Math.sqrt(target.countCards("h")); - if (player.hasSha() && player.canUse("sha", target)) { - num -= 2; - } - return num; - }, - }, - }, - }, - gw_tongdi: { - fullborder: "silver", - type: "spell", - subtype: "spell_silver", - vanish: true, - enable: true, - filterTarget(card, player, target) { - return target != player && target.countCards("h"); - }, - content() { - "step 0"; - player.gainPlayerCard(target, "h", true, "visible").set("ai", function (button) { - return get.value(button.link); - }); - "step 1"; - target.gain(game.createCard("sha"), "gain2"); - }, - ai: { - basic: { - order: 8, - value: 9.5, - useful: [5, 1], - }, - result: { - target(player, target) { - if (target.getEquip(4)) { - return -2; - } - return -1; - }, - }, - }, - }, - gw_fuyuan: { - fullborder: "silver", - type: "spell", - subtype: "spell_silver", - vanish: true, - savable: true, - selectTarget: -1, - content() { - target.recover(); - target.draw(); - }, - ai: { - basic: { - order: 6, - useful: 10, - value: [8, 6.5, 5, 4], - }, - result: { - target: 2, - }, - tag: { - recover: 1, - save: 1, - }, - }, - }, - gw_zhuoshao: { - fullborder: "silver", - type: "spell", - subtype: "spell_silver", - vanish: true, - enable: true, - filterTarget(card, player, target) { - return target.isMaxHp(); - }, - cardnature: "fire", - selectTarget: [1, Infinity], - content() { - target.damage("fire"); - }, - ai: { - basic: { - order: 8.5, - value: 7.5, - useful: [4, 1], - }, - result: { - target: -1, - }, - tag: { - damage: 1, - fireDamage: 1, - natureDamage: 1, - }, - }, - }, - gw_butianshu: { - fullborder: "silver", - type: "spell", - subtype: "spell_silver", - vanish: true, - enable: true, - filterTarget: true, - async content(event, trigger, player) { - var list = []; - for (var i in lib.card) { - if (!lib.card[i].content) { - continue; - } - if (lib.card[i].mode && lib.card[i].mode.includes(lib.config.mode) == false) { - continue; - } - if (lib.card[i].vanish) { - continue; - } - if (lib.card[i].type == "delay") { - list.push([event.card.suit, event.card.number, i]); - } - } - if (list.length) { - var dialog = ui.create.dialog("卜天术", [list, "vcard"]); - var bing = event.target.countCards("h") <= 1; - const { result } = await player - .chooseButton(dialog, true, function (button) { - if (get.effect(event.target, { name: button.link[2] }, player, player) > 0) { - if (button.link[2] == "bingliang") { - if (bing) { - return 2; - } - return 0.7; - } - if (button.link[2] == "lebu") { - return 1; - } - if (button.link[2] == "guiyoujie") { - return 0.5; - } - if (button.link[2] == "caomu") { - return 0.3; - } - return 0.2; - } - return 0; - }) - .set("filterButton", function (button) { - return !event.target.hasJudge(button.link[2]); - }); - if (result.links && result.links[0]) { - var card = game.createCard(result.links[0][2]); - event.judgecard = card; - event.target.$draw(card); - event.target.addJudge(event.judgecard); - } - } - }, - ai: { - value: 8, - useful: [5, 1], - result: { - player(player, target) { - var eff = 0; - for (var i in lib.card) { - if (lib.card[i].type == "delay") { - var current = get.effect(target, { name: i }, player, player); - if (current > eff) { - eff = current; - } - } - } - return eff; - }, - }, - order: 6, - }, - }, - gw_shizizhaohuan: { - fullborder: "silver", - type: "spell", - subtype: "spell_silver", - vanish: true, - enable: true, - filterTarget(card, player, target) { - return target == player; - }, - selectTarget: -1, - // contentBefore:function(){ - // player.$skill('十字召唤','legend','water'); - // game.delay(2); - // }, - content() { - var list = []; - list.push(get.cardPile2("juedou")); - list.push(get.cardPile2("huogong")); - list.push(get.cardPile2("nanman")); - list.push(get.cardPile2("huoshaolianying")); - for (var i = 0; i < list.length; i++) { - if (!list[i]) { - list.splice(i--, 1); - } - } - list = [list.randomGet()]; - var sha = get.cardPile2("sha"); - if (sha) { - if (list.length) { - list.push(sha); - } else { - sha.remove(); - list.push(sha); - var sha2 = get.cardPile2("sha"); - if (sha2) { - list.push(sha2); - } - } - } - if (list.length) { - target.gain(list, "gain2", "log"); - } - }, - ai: { - value: 8, - useful: [6, 1], - result: { - player: 1, - }, - order: 6, - }, - }, - gw_zuihouyuanwang: { - fullborder: "silver", - type: "spell", - subtype: "spell_silver", - vanish: true, - enable: true, - filterTarget(card, player, target) { - return target == player; - }, - selectTarget: -1, - // contentBefore:function(){ - // player.$skill('最后愿望','legend','water'); - // game.delay(2); - // }, - content() { - "step 0"; - event.num = game.countPlayer(); - player.draw(event.num); - "step 1"; - player.chooseToDiscard(true, event.num, "he"); - }, - ai: { - value: 6, - useful: [4, 1], - result: { - player(player) { - var num = player.countCards("he"); - if (num <= 1) { - return 0; - } - if (num <= 3 && !player.needsToDiscard()) { - return 0; - } - return 1; - }, - }, - order: 7, - }, - }, - gw_zirankuizeng: { - fullborder: "silver", - type: "spell", - subtype: "spell_silver", - vanish: true, - enable: true, - notarget: true, - async content(event, trigger, player) { - var list = []; - for (var i in lib.card) { - if (lib.card[i].subtype == "spell_bronze") { - list.push([event.card.suit, event.card.number, i]); - } //QQQ - } - var dialog = ui.create.dialog("自然馈赠", [list, "vcard"]); - var aozu = game.hasPlayer(function (current) { - return player.canUse("gw_aozuzhilei", current, true, true) && current.hp <= 3 && get.effect(current, { name: "gw_aozuzhilei" }, player, player) > 0; - }); - var aozu2 = game.hasPlayer(function (current) { - return player.canUse("gw_aozuzhilei", current, true, true) && current.hp <= 2 && get.effect(current, { name: "gw_aozuzhilei" }, player, player) > 0; - }); - var aozu3 = game.hasPlayer(function (current) { - return player.canUse("gw_aozuzhilei", current, true, true) && get.effect(current, { name: "gw_aozuzhilei" }, player, player) > 0; - }); - var baoxue = game.hasPlayer(function (current) { - return player.canUse("gw_baoxueyaoshui", current, true, true) && get.attitude(player, current) < 0 && [2, 3].includes(current.countCards("h")) && !current.hasSkillTag("noh"); - }); - var baoxue2 = game.hasPlayer(function (current) { - return player.canUse("gw_baoxueyaoshui", current, true, true) && get.attitude(player, current) < 0 && [2].includes(current.countCards("h")) && !current.hasSkillTag("noh"); - }); - var baoxue3 = game.hasPlayer(function (current) { - return player.canUse("gw_baoxueyaoshui", current, true, true) && get.attitude(player, current) < 0 && current.countCards("h") >= 2 && !current.hasSkillTag("noh"); - }); - var nongwu = game.hasPlayer(function (current) { - return get.attitude(player, current) < 0 && (!current.getNext() || get.attitude(player, current.getNext()) < 0) && (!current.getPrevious() || get.attitude(player, current.getPrevious()) < 0); - }); - var nongwu2 = game.hasPlayer(function (current) { - return get.attitude(player, current) < 0 && (!current.getNext() || get.attitude(player, current.getNext()) < 0) && (!current.getPrevious() || get.attitude(player, current.getPrevious()) < 0); - }); - var yanzi = game.hasPlayer(function (current) { - return get.attitude(player, current) > 0 && current.isMinHandcard(); - }); - const { - result: { links }, - } = await player - .chooseButton(dialog, true, function (button) { - var player = _status.event.player; //QQQ - var name = button.link[2]; - switch (name) { - case "gw_ciguhanshuang": - if (nongwu2) { - return 3; - } - if (nongwu) { - return 1; - } - return 0; - case "gw_baoxueyaoshui": - if (baoxue2) { - return 2; - } - if (baoxue) { - return 1.5; - } - if (baoxue3) { - return 0.5; - } - return 0; - case "gw_aozuzhilei": - if (aozu2) { - return 2.5; - } - if (aozu) { - return 1.2; - } - if (aozu3) { - return 0.2; - } - return 0; - case "gw_yanziyaoshui": - if (yanzi) { - return 2; - } - return 0.6; - } - if ( - game.hasPlayer(function (current) { - return player.canUse(name, current, true, true) && get.effect(current, { name: name }, player, player) > 0; - }) - ) { - return Math.random(); - } - return 0; - }) - .set("filterButton", function (button) { - var name = button.link[2]; - if (!lib.card[name].notarget) { - return game.hasPlayer(function (current) { - return player.canUse(name, current, true, true); - }); - } - return true; - }); - if (links && links[0]) { - player.chooseUseTarget(true, game.createCard(links[0][2], event.card.suit, event.card.number)); - } - }, - ai: { - value: 7, - useful: [4, 1], - result: { - player(player) { - return 1; - }, - }, - order: 7, - }, - }, - gw_nuhaifengbao: { - fullborder: "silver", - type: "spell", - subtype: "spell_silver", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("gw_nuhaifengbao"); - }, - content() { - target.addSkill("gw_nuhaifengbao"); - }, - ai: { - value: [7, 1], - useful: [4, 1], - result: { - target(player, target) { - return -2 / Math.sqrt(1 + target.hp); - }, - }, - order: 1.2, - }, - }, - gw_baishuang: { - fullborder: "silver", - type: "spell", - subtype: "spell_silver", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("gw_ciguhanshuang"); - }, - selectTarget: [1, 3], - content() { - target.addSkill("gw_ciguhanshuang"); - }, - ai: { - value: [7.5, 1], - useful: [5, 1], - result: { - target: -1, - }, - order: 1.2, - }, - }, - gw_baobaoshu: { - fullborder: "silver", - type: "spell", - subtype: "spell_silver", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("gw_baobaoshu"); - }, - selectTarget: [1, 2], - content() { - target.addTempSkill("gw_baobaoshu", { player: "phaseAfter" }); - }, - ai: { - value: [7.5, 1], - useful: [5, 1], - result: { - target(player, target) { - return -Math.sqrt(target.countCards("h")) - 0.5; - }, - }, - order: 1.2, - }, - }, - gw_guaiwuchaoxue: { - fullborder: "silver", - type: "spell", - subtype: "spell_silver", - enable: true, - usable: 1, - updateUsable: "phaseUse", - forceUsable: true, - filterTarget(card, player, target) { - return target == player; - }, - selectTarget: -1, - content() { - var list = get.gainableSkills(function (info, skill) { - return info.ai && info.ai.maixie_hp && !player.hasSkill(skill); - }); - list.remove("guixin"); - if (list.length) { - var skill = list.randomGet(); - player.popup(skill); - player.addTempSkill(skill, { player: "phaseBegin" }); - var enemies = player.getEnemies(); - if (enemies.length) { - var source = enemies.randomGet(); - source.line(player); - source.addExpose(0.1); - player.damage(source); - player.recover(); - } - } - }, - ai: { - value: [8, 1], - useful: [3, 1], - result: { - target(player, target) { - if (target.hp <= 1 || target.hujia) { - return 0; - } - return 1; - }, - }, - order: 1, - }, - }, - gw_qinpendayu: { - fullborder: "bronze", - type: "spell", - subtype: "spell_bronze", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("gw_qinpendayu"); - }, - changeTarget(player, targets) { - game.filterPlayer(function (current) { - return get.distance(targets[0], current, "pure") == 1; - }, targets); - }, - content() { - target.addSkill("gw_qinpendayu"); - }, - ai: { - value: [5, 1], - useful: [3, 1], - result: { - target(player, current) { - if (current.hasSkill("gw_qinpendayu")) { - return 0; - } - return Math.max(-1, -0.1 - 0.3 * current.needsToDiscard(2)); - }, - }, - order: 1.2, - }, - }, - gw_birinongwu: { - fullborder: "bronze", - type: "spell", - subtype: "spell_bronze", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("gw_birinongwu"); - }, - changeTarget(player, targets) { - game.filterPlayer(function (current) { - return get.distance(targets[0], current, "pure") == 1; - }, targets); - }, - content() { - target.addSkill("gw_birinongwu"); - }, - ai: { - value: [5, 1], - useful: [3, 1], - result: { - player(player, current) { - if (current.hasSkill("gw_birinongwu")) { - return 0; - } - return -1; - }, - }, - order: 1.2, - }, - }, - gw_ciguhanshuang: { - fullborder: "bronze", - type: "spell", - subtype: "spell_bronze", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("gw_ciguhanshuang"); - }, - changeTarget(player, targets) { - game.filterPlayer(function (current) { - return get.distance(targets[0], current, "pure") == 1; - }, targets); - }, - content() { - target.addSkill("gw_ciguhanshuang"); - }, - ai: { - value: [5, 1], - useful: [3, 1], - result: { - target(player, target) { - if (target.hasSkill("gw_ciguhanshuang")) { - return 0; - } - return -1; - }, - }, - order: 1.2, - }, - }, - gw_baoxueyaoshui: { - fullborder: "bronze", - type: "spell", - subtype: "spell_bronze", - enable: true, - filterTarget: true, - content() { - "step 0"; - target.chooseToDiscard("h", 2, true).delay = false; - "step 1"; - target.draw(); - }, - ai: { - value: 6, - useful: [3, 1], - result: { - target(player, target) { - if (target.hasSkillTag("noh")) { - return 0.1; - } - switch (target.countCards("h")) { - case 0: - return 0.5; - case 1: - return 0; - case 2: - return -1.5; - default: - return -1; - } - }, - }, - order: 8, - tag: { - loseCard: 1, - discard: 1, - }, - }, - }, - gw_zhihuanjun: { - fullborder: "bronze", - type: "spell", - subtype: "spell_bronze", - enable: true, - filterTarget(card, player, target) { - return target.isDamaged(); - }, - content() { - "step 0"; - target.loseMaxHp(true); - "step 1"; - if (target.isDamaged() && target.countCards("h") < target.maxHp) { - event.goto(0); - } - }, - ai: { - value: [4, 1], - useful: [3, 1], - result: { - target(player, target) { - if (target.maxHp - target.hp == 1) { - return -1 / target.maxHp; - } else { - return -1 / target.maxHp / 3; - } - }, - }, - order: 2, - }, - }, - gw_zumoshoukao: { - fullborder: "bronze", - type: "spell", - subtype: "spell_bronze", - enable: true, - filterTarget(card, player, target) { - return target.hujia || !target.hasSkill("fengyin"); - }, - content() { - target.addTempSkill("fengyin", { player: "phaseAfter" }); - // if(target.hujia){ - // target.changeHujia(-1); - // } - }, - ai: { - value: [4.5, 1], - useful: [4, 1], - result: { - target(player, target) { - var threaten = get.threaten(target, player, true); - if (target.hasSkill("fengyin")) { - return 0; - } - if (target.hasSkillTag("maixie_hp")) { - threaten *= 1.5; - } - return -threaten; - }, - }, - order: 9.5, - }, - }, - gw_aozuzhilei: { - fullborder: "bronze", - type: "spell", - subtype: "spell_bronze", - enable: true, - cardnature: "thunder", - filterTarget(card, player, target) { - return target.hp >= player.hp; - }, - content() { - "step 0"; - target.damage("thunder"); - "step 1"; - if (target.isIn()) { - target.draw(); - } - }, - ai: { - basic: { - order: 1.8, - value: [5, 1], - useful: [4, 1], - }, - result: { - target: -1, - }, - tag: { - damage: 1, - thunderDamage: 1, - natureDamage: 1, - }, - }, - }, - gw_poxiao: { - fullborder: "bronze", - type: "spell", - subtype: "spell_bronze", - enable: true, - notarget: true, - content() { - "step 0"; - var choice = 1; - if ( - game.countPlayer(function (current) { - if (current.countCards("j") || current.hasSkillTag("weather")) { - if (get.attitude(player, current) > 0) { - choice = 0; - } - return true; - } - }) - ) { - player - .chooseControl(function () { - return choice; - }) - .set("choiceList", ["解除任意名角色的天气效果并移除其判定区内的牌", "随机获得一张铜卡法术(破晓除外)并展示之"]); - } else { - event.directfalse = true; - } - "step 1"; - if (!event.directfalse && result.index == 0) { - player.chooseTarget(true, [1, Infinity], "解除任意名角色的天气效果并移除其判定区内的牌", function (card, player, target) { - return target.countCards("j") || target.hasSkillTag("weather"); - }).ai = function (target) { - return get.attitude(player, target); - }; - } else { - var list = get.libCard(function (info, name) { - return name != "gw_poxiao" && info.subtype == "spell_bronze"; - }); - if (list.length) { - player.gain(game.createCard(list.randomGet()), "gain2"); - } else { - player.draw(); - } - event.finish(); - } - "step 2"; - event.list = result.targets.slice(0).sortBySeat(); - "step 3"; - if (event.list.length) { - var target = event.list.shift(); - player.line(target, "green"); - var cards = target.getCards("j"); - if (cards.length) { - target.discard(cards); - } - if (target.hasSkillTag("weather")) { - var skills = target.getSkills(); - for (var i = 0; i < skills.length; i++) { - var info = get.info(skills[i]); - if (info && info.ai && info.ai.weather) { - target.removeSkill(skills[i]); - game.log(target, "解除了", "【" + get.translation(skills[i]) + "】", "的效果"); - } - } - } - event.redo(); - } - }, - ai: { - order: 4, - value: [5, 1], - useful: [4, 1], - result: { - player: 1, - }, - }, - }, - gw_kunenfayin: { - fullborder: "bronze", - type: "spell", - subtype: "spell_bronze", - enable: true, - filterTarget(card, player, target) { - return !target.hasSkill("gw_kunenfayin"); - }, - content() { - target.addSkill("gw_kunenfayin"); - }, - ai: { - basic: { - order: 2, - value: [5, 1], - useful: [4, 1], - }, - result: { - target(player, target) { - if (target == player) { - return get.threaten(target, player) / 1.5; - } - return get.threaten(target, player); - }, - }, - }, - }, - gw_yanziyaoshui: { - fullborder: "bronze", - type: "spell", - subtype: "spell_bronze", - enable: true, - filterTarget: true, - content() { - if (target.isMinHandcard()) { - target.draw(2); - } else { - target.draw(); - } - }, - ai: { - basic: { - order: 6, - value: [6, 1], - useful: [4, 1], - }, - result: { - target(player, target) { - if (target.isMinHandcard()) { - return 2; - } - return 1; - }, - }, - }, - }, - gw_wenyi: { - fullborder: "bronze", - type: "spell", - subtype: "spell_bronze", - enable: true, - filterTarget(card, player, target) { - return target.isMinHp(); - }, - selectTarget: -1, - content() { - if (target.countCards("h")) { - target.randomDiscard("h"); - } else { - target.loseHp(); - } - }, - ai: { - basic: { - order: 6, - value: [6, 1], - useful: [4, 1], - }, - result: { - target(player, target) { - if (target.countCards("h")) { - return -1; - } - return -2; - }, - }, - tag: { - multitarget: 1, - multineg: 1, - }, - }, - }, - gw_shanbengshu: { - fullborder: "bronze", - type: "spell", - subtype: "spell_bronze", - enable(event, player) { - var list = player.getEnemies(); - for (var i = 0; i < list.length; i++) { - if (list[i].countCards("e")) { - return true; - } - } - return false; - }, - filterTarget(card, player, target) { - return target == player; - }, - selectTarget: -1, - content() { - var list = target.getEnemies(); - var equips = []; - for (var i = 0; i < list.length; i++) { - equips.addArray(list[i].getCards("e")); - } - equips = equips.randomGets(2); - if (equips.length == 2) { - var target1 = get.owner(equips[0]); - var target2 = get.owner(equips[1]); - if (target1 == target2) { - target1.discard(equips); - player.line(target1); - } else { - target1.discard(equips[0]).delay = false; - target2.discard(equips[1]); - player.line(target1); - player.line(target2); - } - } else if (equips.length) { - var target1 = get.owner(equips[0]); - target1.discard(equips[0]); - player.line(target1); - } - }, - ai: { - basic: { - order: 9, - value: [6, 1], - useful: [4, 1], - }, - result: { - target: 1, - }, - tag: { - multitarget: 1, - multineg: 1, - }, - }, - }, - }, - skill: { - gw_aerdeyin: { - trigger: { global: "roundStart" }, - silent: true, - mark: true, - intro: { - content: "新的一轮开始时,若武将牌正面朝上,则在当前回合结束后进行一个额外回合,否则将武将牌翻回正面", - }, - content() { - if (player.isTurnedOver()) { - player.turnOver(); - player.removeSkill("gw_aerdeyin"); - player.logSkill("gw_aerdeyin"); - } else { - player.insertPhase(); - } - }, - group: "gw_aerdeyin_phase", - subSkill: { - phase: { - trigger: { player: "phaseBefore" }, - silent: true, - filter(event, player) { - return event.skill == "gw_aerdeyin"; - }, - content() { - player.removeSkill("gw_aerdeyin"); - player.logSkill("gw_aerdeyin"); - }, - }, - }, - }, - gw_kunenfayin: { - mark: true, - nopop: true, - intro: { - content: "防止所有非属性伤害(剩余个#角色的回合)", - }, - init(player) { - player.storage.gw_kunenfayin = Math.min(5, game.countPlayer()); - }, - trigger: { player: "damageBefore" }, - filter(event) { - return !event.nature; - }, - forced: true, - content() { - trigger.cancel(); - }, - ai: { - nodamage: true, - effect: { - target(card, player, target, current) { - if (get.tag(card, "damage") && !get.tag(card, "natureDamage")) { - return "zeroplayertarget"; - } - }, - }, - }, - subSkill: { - count: { - trigger: { global: "phaseEnd" }, - silent: true, - content() { - player.storage.gw_kunenfayin--; - if (player.storage.gw_kunenfayin > 0) { - player.updateMarks(); - } else { - player.removeSkill("gw_kunenfayin"); - } - }, - }, - }, - group: "gw_kunenfayin_count", - onremove: true, - }, - gw_baobaoshu: { - mark: true, - nopop: true, - intro: { - content: "每使用一张基本牌或锦囊牌,需弃置一张牌", - }, - trigger: { player: "useCard" }, - forced: true, - filter(event, player) { - if (player.countCards("he") == 0) { - return false; - } - var type = get.type(event.card, "trick"); - return type == "basic" || type == "trick"; - }, - content() { - if (!event.isMine()) { - game.delay(0.5); - } - player.chooseToDiscard(true, "he"); - }, - ai: { - weather: true, - effect: { - player_use(card, player) { - return [ - 1, - player.needsToDiscard(0, (i, p) => { - if (p.canIgnoreHandcard(i)) { - return false; - } - if (i === card || (card.cards && card.cards.includes(i))) { - return false; - } - return true; - }) - ? -0.4 - : -1, - ]; - }, - }, - }, - }, - gw_nuhaifengbao: { - mark: true, - intro: { - content: "结束阶段随机弃置一张牌(剩余#回合)", - }, - init(player) { - player.storage.gw_nuhaifengbao = 2; - }, - trigger: { player: "phaseEnd" }, - forced: true, - nopop: true, - content() { - player.randomDiscard(); - player.storage.gw_nuhaifengbao--; - if (player.storage.gw_nuhaifengbao > 0) { - player.updateMarks(); - } else { - player.removeSkill("gw_nuhaifengbao"); - } - }, - onremove: true, - ai: { - neg: true, - weather: true, - }, - }, - gw_youer: { - trigger: { global: "phaseEnd", player: "dieBegin" }, - forced: true, - audio: false, - mark: true, - intro: { - content: "cards", - }, - content() { - if (player.storage.gw_youer) { - if (trigger.name == "phase") { - player.gain(player.storage.gw_youer); - } else { - player.$throw(player.storage.gw_youer, 1000); - for (var i = 0; i < player.storage.gw_youer.length; i++) { - player.storage.gw_youer[i].discard(); - } - game.log(player, "弃置了", player.storage.gw_youer); - } - } - delete player.storage.gw_youer; - player.removeSkill("gw_youer"); - }, - }, - gw_qinpendayu: { - mark: true, - nopop: true, - intro: { - content: "手牌上限-1直到下一个弃牌阶段结束", - }, - mod: { - maxHandcard(player, num) { - return num - 1; - }, - }, - ai: { - weather: true, - }, - group: "gw_qinpendayu_clear", - subSkill: { - clear: { - trigger: { player: "phaseDiscardAfter" }, - silent: true, - content() { - player.removeSkill("gw_qinpendayu"); - }, - }, - }, - }, - gw_birinongwu: { - mark: true, - nopop: true, - intro: { - content: "不能使用杀直到下一个出牌阶段结束", - }, - mod: { - cardEnabled(card) { - if (card.name == "sha") { - return false; - } - }, - }, - ai: { - weather: true, - }, - group: "gw_birinongwu_clear", - subSkill: { - clear: { - trigger: { player: "phaseUseAfter" }, - silent: true, - content() { - player.removeSkill("gw_birinongwu"); - }, - }, - }, - }, - gw_ciguhanshuang: { - trigger: { player: "phaseDrawBegin" }, - forced: true, - mark: true, - nopop: true, - intro: { - content: "下个摸牌阶段摸牌数-1", - }, - filter(event) { - return event.num > 0; - }, - content() { - trigger.num--; - player.removeSkill("gw_ciguhanshuang"); - }, - ai: { - weather: true, - }, - }, - gw_dieyi: { - init(player) { - player.storage.gw_dieyi = 1; - }, - onremove: true, - trigger: { global: "phaseEnd" }, - forced: true, - mark: true, - nopop: true, - process(player) { - if (player.hasSkill("gw_dieyi")) { - player.storage.gw_dieyi++; - } else { - player.addSkill("gw_dieyi"); - } - player.syncStorage("gw_dieyi"); - player.updateMarks(); - }, - intro: { - content: "在当前回合的结束阶段,你随机弃置#张牌", - }, - content() { - player.randomDiscard(player.storage.gw_dieyi); - player.removeSkill("gw_dieyi"); - }, - }, - gw_leizhoushu: { - mark: true, - intro: { - content(storage, player) { - if (storage >= 2) { - return "锁定技,准备阶段,你令手牌数为全场最多的所有其他角色各随机弃置一张手牌,若目标不包含敌方角色,将一名随机敌方角色追加为额外目标(重复" + storage + "次)"; - } else { - return "锁定技,准备阶段,你令手牌数为全场最多的所有其他角色各随机弃置一张手牌,若目标不包含敌方角色,将一名随机敌方角色追加为额外目标"; - } - }, - }, - nopop: true, - trigger: { player: "phaseBegin" }, - forced: true, - filter(event, player) { - var list = game.filterPlayer(); - for (var i = 0; i < list.length; i++) { - if (list[i] != player && list[i].isMaxHandcard()) { - return true; - } - } - return false; - }, - content() { - "step 0"; - if (typeof player.storage.gw_leizhoushu == "number") { - event.num = player.storage.gw_leizhoushu; - } else { - event.num = 1; - } - "step 1"; - if (event.num) { - var max = 0; - var maxp = null; - var list = game - .filterPlayer(function (current) { - return current.isMaxHandcard(); - }) - .sortBySeat(); - var enemies = player.getEnemies(); - for (var i = 0; i < enemies.length; i++) { - if (list.includes(enemies[i])) { - break; - } - } - if (i == enemies.length) { - list.push(enemies.randomGet()); - } - list.remove(player); - if (!list.length) { - event.finish(); - return; - } - player.line(list, "green"); - for (var i = 0; i < list.length; i++) { - list[i].randomDiscard("h", false); - } - } else { - event.finish(); - } - "step 2"; - event.num--; - event.goto(1); - game.delay(); - }, - }, - _gainspell: { - trigger: { player: "drawBegin" }, - silent: true, - priority: -11, - filter(event, player) { - if (_status.connectMode) { - return false; - } - if (!lib.config.cards.includes("gwent")) { - return false; - } - if (player.isMin()) { - return false; - } - if (game.fixedPile) { - return false; - } - return event.num > 0 && event.parent.name == "phaseDraw"; - }, - content() { - if (!player.storage.spell_gain || Math.max.apply(null, player.storage.spell_gain) < 0) { - var tmp = player.storage.spell_gain2; - player.storage.spell_gain = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15].randomGets(3); - player.storage.spell_gain2 = Math.floor((15 - Math.max.apply(null, player.storage.spell_gain)) / 2); - if (tmp) { - for (var i = 0; i < 3; i++) { - player.storage.spell_gain[i] += tmp; - } - } - } - for (var i = 0; i < 3; i++) { - if (player.storage.spell_gain[i] == 0) { - var list; - if (i == 0) { - list = get.libCard(function (info) { - return info.subtype == "spell_gold"; - }); - if (get.mode() == "stone") { - list.remove("gw_aerdeyin"); - list.remove("gw_niuquzhijing"); - } - } else { - list = get.libCard(function (info) { - return info.subtype == "spell_silver"; - }); - if (get.mode() == "stone") { - list.remove("gw_butianshu"); - } - } - if (list && list.length) { - ui.cardPile.insertBefore(game.createCard(list.randomGet()), ui.cardPile.firstChild); - } - } - player.storage.spell_gain[i]--; - } - }, - }, - }, - help: { - 昆特牌: "