diff --git a/audio/die/dc_xushu.mp3 b/audio/die/dc_xushu.mp3 new file mode 100644 index 000000000..f8050e0a4 Binary files /dev/null and b/audio/die/dc_xushu.mp3 differ diff --git a/audio/die/hucheer.mp3 b/audio/die/hucheer.mp3 new file mode 100644 index 000000000..2a5953eda Binary files /dev/null and b/audio/die/hucheer.mp3 differ diff --git a/audio/die/jin_yanghu.mp3 b/audio/die/jin_yanghu.mp3 new file mode 100644 index 000000000..ebed4740b Binary files /dev/null and b/audio/die/jin_yanghu.mp3 differ diff --git a/audio/die/ol_xuhuang.mp3 b/audio/die/ol_xuhuang.mp3 new file mode 100644 index 000000000..995a81343 Binary files /dev/null and b/audio/die/ol_xuhuang.mp3 differ diff --git a/audio/die/ol_yangyi.mp3 b/audio/die/ol_yangyi.mp3 new file mode 100644 index 000000000..3c4cd5642 Binary files /dev/null and b/audio/die/ol_yangyi.mp3 differ diff --git a/audio/die/ol_zhuling.mp3 b/audio/die/ol_zhuling.mp3 new file mode 100644 index 000000000..fd87a2d6f Binary files /dev/null and b/audio/die/ol_zhuling.mp3 differ diff --git a/audio/die/peixiu.mp3 b/audio/die/peixiu.mp3 new file mode 100644 index 000000000..f40b00424 Binary files /dev/null and b/audio/die/peixiu.mp3 differ diff --git a/audio/die/qinghegongzhu.mp3 b/audio/die/qinghegongzhu.mp3 new file mode 100644 index 000000000..cfcdcda0c Binary files /dev/null and b/audio/die/qinghegongzhu.mp3 differ diff --git a/audio/die/re_madai.mp3 b/audio/die/re_madai.mp3 new file mode 100644 index 000000000..efa893a73 Binary files /dev/null and b/audio/die/re_madai.mp3 differ diff --git a/audio/die/re_miheng.mp3 b/audio/die/re_miheng.mp3 new file mode 100644 index 000000000..d654c60b0 Binary files /dev/null and b/audio/die/re_miheng.mp3 differ diff --git a/audio/die/re_pangdegong.mp3 b/audio/die/re_pangdegong.mp3 new file mode 100644 index 000000000..843bc9a60 Binary files /dev/null and b/audio/die/re_pangdegong.mp3 differ diff --git a/audio/die/sp_chendong.mp3 b/audio/die/sp_chendong.mp3 new file mode 100644 index 000000000..7ffb2f1cb Binary files /dev/null and b/audio/die/sp_chendong.mp3 differ diff --git a/audio/die/sp_huangfusong.mp3 b/audio/die/sp_huangfusong.mp3 new file mode 100644 index 000000000..3ab4ff72b Binary files /dev/null and b/audio/die/sp_huangfusong.mp3 differ diff --git a/audio/die/sp_jianggan.mp3 b/audio/die/sp_jianggan.mp3 new file mode 100644 index 000000000..cf7d4c47f Binary files /dev/null and b/audio/die/sp_jianggan.mp3 differ diff --git a/audio/die/sp_zongyu.mp3 b/audio/die/sp_zongyu.mp3 new file mode 100644 index 000000000..64dd8d176 Binary files /dev/null and b/audio/die/sp_zongyu.mp3 differ diff --git a/audio/die/xin_gaoshun.mp3 b/audio/die/xin_gaoshun.mp3 new file mode 100644 index 000000000..98e895e15 Binary files /dev/null and b/audio/die/xin_gaoshun.mp3 differ diff --git a/audio/die/xin_wuguotai.mp3 b/audio/die/xin_wuguotai.mp3 new file mode 100644 index 000000000..daefc0015 Binary files /dev/null and b/audio/die/xin_wuguotai.mp3 differ diff --git a/audio/die/xinchang.mp3 b/audio/die/xinchang.mp3 new file mode 100644 index 000000000..17e3aad84 Binary files /dev/null and b/audio/die/xinchang.mp3 differ diff --git a/audio/die/xuangongzhu.mp3 b/audio/die/xuangongzhu.mp3 new file mode 100644 index 000000000..89c9eaf10 Binary files /dev/null and b/audio/die/xuangongzhu.mp3 differ diff --git a/audio/die/yangyan.mp3 b/audio/die/yangyan.mp3 new file mode 100644 index 000000000..a0bc72b5e Binary files /dev/null and b/audio/die/yangyan.mp3 differ diff --git a/audio/die/yangzhi.mp3 b/audio/die/yangzhi.mp3 new file mode 100644 index 000000000..549797e0a Binary files /dev/null and b/audio/die/yangzhi.mp3 differ diff --git a/audio/die/zhangning.mp3 b/audio/die/zhangning.mp3 new file mode 100644 index 000000000..5c0472ffe Binary files /dev/null and b/audio/die/zhangning.mp3 differ diff --git a/audio/die/zhaoyan.mp3 b/audio/die/zhaoyan.mp3 new file mode 100644 index 000000000..3f1fb1806 Binary files /dev/null and b/audio/die/zhaoyan.mp3 differ diff --git a/audio/die/zhouyi.mp3 b/audio/die/zhouyi.mp3 new file mode 100644 index 000000000..ad7834f7e Binary files /dev/null and b/audio/die/zhouyi.mp3 differ diff --git a/audio/skill/canmou1.mp3 b/audio/skill/canmou1.mp3 new file mode 100644 index 000000000..1a23a5a09 Binary files /dev/null and b/audio/skill/canmou1.mp3 differ diff --git a/audio/skill/canmou2.mp3 b/audio/skill/canmou2.mp3 new file mode 100644 index 000000000..72764c968 Binary files /dev/null and b/audio/skill/canmou2.mp3 differ diff --git a/audio/skill/chongxin1.mp3 b/audio/skill/chongxin1.mp3 new file mode 100644 index 000000000..febb3e610 Binary files /dev/null and b/audio/skill/chongxin1.mp3 differ diff --git a/audio/skill/chongxin2.mp3 b/audio/skill/chongxin2.mp3 new file mode 100644 index 000000000..29d05b9d8 Binary files /dev/null and b/audio/skill/chongxin2.mp3 differ diff --git a/audio/skill/congjian1.mp3 b/audio/skill/congjian1.mp3 new file mode 100644 index 000000000..b111fdc0e Binary files /dev/null and b/audio/skill/congjian1.mp3 differ diff --git a/audio/skill/congjian2.mp3 b/audio/skill/congjian2.mp3 new file mode 100644 index 000000000..6f64effce Binary files /dev/null and b/audio/skill/congjian2.mp3 differ diff --git a/audio/skill/daoji1.mp3 b/audio/skill/daoji1.mp3 new file mode 100644 index 000000000..08e87a85d Binary files /dev/null and b/audio/skill/daoji1.mp3 differ diff --git a/audio/skill/daoji2.mp3 b/audio/skill/daoji2.mp3 new file mode 100644 index 000000000..0eeaebae1 Binary files /dev/null and b/audio/skill/daoji2.mp3 differ diff --git a/audio/skill/decadejinjiu1.mp3 b/audio/skill/decadejinjiu1.mp3 new file mode 100644 index 000000000..4602cdf38 Binary files /dev/null and b/audio/skill/decadejinjiu1.mp3 differ diff --git a/audio/skill/decadejinjiu2.mp3 b/audio/skill/decadejinjiu2.mp3 new file mode 100644 index 000000000..514b852c4 Binary files /dev/null and b/audio/skill/decadejinjiu2.mp3 differ diff --git a/audio/skill/decadexianzhen1.mp3 b/audio/skill/decadexianzhen1.mp3 new file mode 100644 index 000000000..b048fe585 Binary files /dev/null and b/audio/skill/decadexianzhen1.mp3 differ diff --git a/audio/skill/decadexianzhen2.mp3 b/audio/skill/decadexianzhen2.mp3 new file mode 100644 index 000000000..ace1911cd Binary files /dev/null and b/audio/skill/decadexianzhen2.mp3 differ diff --git a/audio/skill/dezhang1.mp3 b/audio/skill/dezhang1.mp3 new file mode 100644 index 000000000..6ec6d4133 Binary files /dev/null and b/audio/skill/dezhang1.mp3 differ diff --git a/audio/skill/dezhang2.mp3 b/audio/skill/dezhang2.mp3 new file mode 100644 index 000000000..cee775689 Binary files /dev/null and b/audio/skill/dezhang2.mp3 differ diff --git a/audio/skill/difa1.mp3 b/audio/skill/difa1.mp3 new file mode 100644 index 000000000..386598da8 Binary files /dev/null and b/audio/skill/difa1.mp3 differ diff --git a/audio/skill/difa2.mp3 b/audio/skill/difa2.mp3 new file mode 100644 index 000000000..87f56d29e Binary files /dev/null and b/audio/skill/difa2.mp3 differ diff --git a/audio/skill/gaoling1.mp3 b/audio/skill/gaoling1.mp3 new file mode 100644 index 000000000..e7db51de1 Binary files /dev/null and b/audio/skill/gaoling1.mp3 differ diff --git a/audio/skill/gaoling2.mp3 b/audio/skill/gaoling2.mp3 new file mode 100644 index 000000000..915c21103 Binary files /dev/null and b/audio/skill/gaoling2.mp3 differ diff --git a/audio/skill/gzduannian1.mp3 b/audio/skill/gzduannian1.mp3 new file mode 100644 index 000000000..338941afe Binary files /dev/null and b/audio/skill/gzduannian1.mp3 differ diff --git a/audio/skill/gzduannian2.mp3 b/audio/skill/gzduannian2.mp3 new file mode 100644 index 000000000..551632d88 Binary files /dev/null and b/audio/skill/gzduannian2.mp3 differ diff --git a/audio/skill/gzlianyou1.mp3 b/audio/skill/gzlianyou1.mp3 new file mode 100644 index 000000000..73907dae3 Binary files /dev/null and b/audio/skill/gzlianyou1.mp3 differ diff --git a/audio/skill/gzlianyou2.mp3 b/audio/skill/gzlianyou2.mp3 new file mode 100644 index 000000000..0a6c3bbbd Binary files /dev/null and b/audio/skill/gzlianyou2.mp3 differ diff --git a/audio/skill/heqia1.mp3 b/audio/skill/heqia1.mp3 new file mode 100644 index 000000000..64cb21f27 Binary files /dev/null and b/audio/skill/heqia1.mp3 differ diff --git a/audio/skill/heqia2.mp3 b/audio/skill/heqia2.mp3 new file mode 100644 index 000000000..605d389a1 Binary files /dev/null and b/audio/skill/heqia2.mp3 differ diff --git a/audio/skill/huaiyuan1.mp3 b/audio/skill/huaiyuan1.mp3 new file mode 100644 index 000000000..b62c7f081 Binary files /dev/null and b/audio/skill/huaiyuan1.mp3 differ diff --git a/audio/skill/huaiyuan2.mp3 b/audio/skill/huaiyuan2.mp3 new file mode 100644 index 000000000..86e64ef79 Binary files /dev/null and b/audio/skill/huaiyuan2.mp3 differ diff --git a/audio/skill/jinhui1.mp3 b/audio/skill/jinhui1.mp3 new file mode 100644 index 000000000..e13d5cba1 Binary files /dev/null and b/audio/skill/jinhui1.mp3 differ diff --git a/audio/skill/jinhui2.mp3 b/audio/skill/jinhui2.mp3 new file mode 100644 index 000000000..ea616382e Binary files /dev/null and b/audio/skill/jinhui2.mp3 differ diff --git a/audio/skill/jixian1.mp3 b/audio/skill/jixian1.mp3 new file mode 100644 index 000000000..3b6673515 Binary files /dev/null and b/audio/skill/jixian1.mp3 differ diff --git a/audio/skill/jixian2.mp3 b/audio/skill/jixian2.mp3 new file mode 100644 index 000000000..ab072cff3 Binary files /dev/null and b/audio/skill/jixian2.mp3 differ diff --git a/audio/skill/juezhi1.mp3 b/audio/skill/juezhi1.mp3 new file mode 100644 index 000000000..4b3e4de80 Binary files /dev/null and b/audio/skill/juezhi1.mp3 differ diff --git a/audio/skill/juezhi2.mp3 b/audio/skill/juezhi2.mp3 new file mode 100644 index 000000000..730aabecd Binary files /dev/null and b/audio/skill/juezhi2.mp3 differ diff --git a/audio/skill/llqshenwei1.mp3 b/audio/skill/llqshenwei1.mp3 new file mode 100644 index 000000000..faf4f3ea3 Binary files /dev/null and b/audio/skill/llqshenwei1.mp3 differ diff --git a/audio/skill/llqshenwei2.mp3 b/audio/skill/llqshenwei2.mp3 new file mode 100644 index 000000000..3637a3289 Binary files /dev/null and b/audio/skill/llqshenwei2.mp3 differ diff --git a/audio/skill/maihuo1.mp3 b/audio/skill/maihuo1.mp3 new file mode 100644 index 000000000..4c3402599 Binary files /dev/null and b/audio/skill/maihuo1.mp3 differ diff --git a/audio/skill/maihuo2.mp3 b/audio/skill/maihuo2.mp3 new file mode 100644 index 000000000..84b967484 Binary files /dev/null and b/audio/skill/maihuo2.mp3 differ diff --git a/audio/skill/mengqing1.mp3 b/audio/skill/mengqing1.mp3 new file mode 100644 index 000000000..d35238698 Binary files /dev/null and b/audio/skill/mengqing1.mp3 differ diff --git a/audio/skill/mengqing2.mp3 b/audio/skill/mengqing2.mp3 new file mode 100644 index 000000000..eb4d5869f Binary files /dev/null and b/audio/skill/mengqing2.mp3 differ diff --git a/audio/skill/oldingcuo1.mp3 b/audio/skill/oldingcuo1.mp3 new file mode 100644 index 000000000..b752df10b Binary files /dev/null and b/audio/skill/oldingcuo1.mp3 differ diff --git a/audio/skill/oldingcuo2.mp3 b/audio/skill/oldingcuo2.mp3 new file mode 100644 index 000000000..06f4788f7 Binary files /dev/null and b/audio/skill/oldingcuo2.mp3 differ diff --git a/audio/skill/olduanliang1.mp3 b/audio/skill/olduanliang1.mp3 new file mode 100644 index 000000000..bec8316a5 Binary files /dev/null and b/audio/skill/olduanliang1.mp3 differ diff --git a/audio/skill/olduanliang2.mp3 b/audio/skill/olduanliang2.mp3 new file mode 100644 index 000000000..098d95acb Binary files /dev/null and b/audio/skill/olduanliang2.mp3 differ diff --git a/audio/skill/oljiezi1.mp3 b/audio/skill/oljiezi1.mp3 new file mode 100644 index 000000000..248a0b2d2 Binary files /dev/null and b/audio/skill/oljiezi1.mp3 differ diff --git a/audio/skill/oljiezi2.mp3 b/audio/skill/oljiezi2.mp3 new file mode 100644 index 000000000..2ff5bdb03 Binary files /dev/null and b/audio/skill/oljiezi2.mp3 differ diff --git a/audio/skill/oljuanxia1.mp3 b/audio/skill/oljuanxia1.mp3 new file mode 100644 index 000000000..91624a486 Binary files /dev/null and b/audio/skill/oljuanxia1.mp3 differ diff --git a/audio/skill/oljuanxia2.mp3 b/audio/skill/oljuanxia2.mp3 new file mode 100644 index 000000000..85c05feb2 Binary files /dev/null and b/audio/skill/oljuanxia2.mp3 differ diff --git a/audio/skill/qhzhangji1.mp3 b/audio/skill/qhzhangji1.mp3 new file mode 100644 index 000000000..e0182c269 Binary files /dev/null and b/audio/skill/qhzhangji1.mp3 differ diff --git a/audio/skill/qhzhangji2.mp3 b/audio/skill/qhzhangji2.mp3 new file mode 100644 index 000000000..830456b2f Binary files /dev/null and b/audio/skill/qhzhangji2.mp3 differ diff --git a/audio/skill/qimei1.mp3 b/audio/skill/qimei1.mp3 new file mode 100644 index 000000000..2a4fe292f Binary files /dev/null and b/audio/skill/qimei1.mp3 differ diff --git a/audio/skill/qimei2.mp3 b/audio/skill/qimei2.mp3 new file mode 100644 index 000000000..2ed40bd41 Binary files /dev/null and b/audio/skill/qimei2.mp3 differ diff --git a/audio/skill/qingman1.mp3 b/audio/skill/qingman1.mp3 new file mode 100644 index 000000000..8366354ae Binary files /dev/null and b/audio/skill/qingman1.mp3 differ diff --git a/audio/skill/qingman2.mp3 b/audio/skill/qingman2.mp3 new file mode 100644 index 000000000..982f9c654 Binary files /dev/null and b/audio/skill/qingman2.mp3 differ diff --git a/audio/skill/rejianyan1.mp3 b/audio/skill/rejianyan1.mp3 new file mode 100644 index 000000000..286015387 Binary files /dev/null and b/audio/skill/rejianyan1.mp3 differ diff --git a/audio/skill/rejianyan2.mp3 b/audio/skill/rejianyan2.mp3 new file mode 100644 index 000000000..b7acf757d Binary files /dev/null and b/audio/skill/rejianyan2.mp3 differ diff --git a/audio/skill/rekuangcai1.mp3 b/audio/skill/rekuangcai1.mp3 new file mode 100644 index 000000000..239ed78cb Binary files /dev/null and b/audio/skill/rekuangcai1.mp3 differ diff --git a/audio/skill/rekuangcai2.mp3 b/audio/skill/rekuangcai2.mp3 new file mode 100644 index 000000000..1071fba2e Binary files /dev/null and b/audio/skill/rekuangcai2.mp3 differ diff --git a/audio/skill/reqianxi1.mp3 b/audio/skill/reqianxi1.mp3 new file mode 100644 index 000000000..235eb89b3 Binary files /dev/null and b/audio/skill/reqianxi1.mp3 differ diff --git a/audio/skill/reqianxi2.mp3 b/audio/skill/reqianxi2.mp3 new file mode 100644 index 000000000..5579ab96a Binary files /dev/null and b/audio/skill/reqianxi2.mp3 differ diff --git a/audio/skill/reshejian1.mp3 b/audio/skill/reshejian1.mp3 new file mode 100644 index 000000000..e51c43477 Binary files /dev/null and b/audio/skill/reshejian1.mp3 differ diff --git a/audio/skill/reshejian2.mp3 b/audio/skill/reshejian2.mp3 new file mode 100644 index 000000000..5a3cf01cb Binary files /dev/null and b/audio/skill/reshejian2.mp3 differ diff --git a/audio/skill/rezhuhai1.mp3 b/audio/skill/rezhuhai1.mp3 new file mode 100644 index 000000000..4f726a2f6 Binary files /dev/null and b/audio/skill/rezhuhai1.mp3 differ diff --git a/audio/skill/rezhuhai2.mp3 b/audio/skill/rezhuhai2.mp3 new file mode 100644 index 000000000..6c9d24db0 Binary files /dev/null and b/audio/skill/rezhuhai2.mp3 differ diff --git a/audio/skill/spdaizui1.mp3 b/audio/skill/spdaizui1.mp3 new file mode 100644 index 000000000..ec9512bcb Binary files /dev/null and b/audio/skill/spdaizui1.mp3 differ diff --git a/audio/skill/spdaizui2.mp3 b/audio/skill/spdaizui2.mp3 new file mode 100644 index 000000000..4eb47058d Binary files /dev/null and b/audio/skill/spdaizui2.mp3 differ diff --git a/audio/skill/spdaoshu1.mp3 b/audio/skill/spdaoshu1.mp3 new file mode 100644 index 000000000..8b135d6ae Binary files /dev/null and b/audio/skill/spdaoshu1.mp3 differ diff --git a/audio/skill/spdaoshu2.mp3 b/audio/skill/spdaoshu2.mp3 new file mode 100644 index 000000000..ba2b3dc74 Binary files /dev/null and b/audio/skill/spdaoshu2.mp3 differ diff --git a/audio/skill/spdaoshu3.mp3 b/audio/skill/spdaoshu3.mp3 new file mode 100644 index 000000000..7c31fd2c0 Binary files /dev/null and b/audio/skill/spdaoshu3.mp3 differ diff --git a/audio/skill/spfenming1.mp3 b/audio/skill/spfenming1.mp3 new file mode 100644 index 000000000..09b5c9add Binary files /dev/null and b/audio/skill/spfenming1.mp3 differ diff --git a/audio/skill/spfenming2.mp3 b/audio/skill/spfenming2.mp3 new file mode 100644 index 000000000..c8b949b8f Binary files /dev/null and b/audio/skill/spfenming2.mp3 differ diff --git a/audio/skill/spshiji1.mp3 b/audio/skill/spshiji1.mp3 new file mode 100644 index 000000000..bacfba4e7 Binary files /dev/null and b/audio/skill/spshiji1.mp3 differ diff --git a/audio/skill/spshiji2.mp3 b/audio/skill/spshiji2.mp3 new file mode 100644 index 000000000..76698bd1c Binary files /dev/null and b/audio/skill/spshiji2.mp3 differ diff --git a/audio/skill/sptaoluan1.mp3 b/audio/skill/sptaoluan1.mp3 new file mode 100644 index 000000000..95e4d2f73 Binary files /dev/null and b/audio/skill/sptaoluan1.mp3 differ diff --git a/audio/skill/sptaoluan2.mp3 b/audio/skill/sptaoluan2.mp3 new file mode 100644 index 000000000..68d07c3b1 Binary files /dev/null and b/audio/skill/sptaoluan2.mp3 differ diff --git a/audio/skill/spyilie1.mp3 b/audio/skill/spyilie1.mp3 new file mode 100644 index 000000000..80144fc81 Binary files /dev/null and b/audio/skill/spyilie1.mp3 differ diff --git a/audio/skill/spyilie2.mp3 b/audio/skill/spyilie2.mp3 new file mode 100644 index 000000000..6fcc0f6b8 Binary files /dev/null and b/audio/skill/spyilie2.mp3 differ diff --git a/audio/skill/spzhengjun1.mp3 b/audio/skill/spzhengjun1.mp3 new file mode 100644 index 000000000..a3a6a6653 Binary files /dev/null and b/audio/skill/spzhengjun1.mp3 differ diff --git a/audio/skill/spzhengjun2.mp3 b/audio/skill/spzhengjun2.mp3 new file mode 100644 index 000000000..241caf4e6 Binary files /dev/null and b/audio/skill/spzhengjun2.mp3 differ diff --git a/audio/skill/spzhengjun3.mp3 b/audio/skill/spzhengjun3.mp3 new file mode 100644 index 000000000..a1b8fef29 Binary files /dev/null and b/audio/skill/spzhengjun3.mp3 differ diff --git a/audio/skill/tianze1.mp3 b/audio/skill/tianze1.mp3 new file mode 100644 index 000000000..b0f0722bc Binary files /dev/null and b/audio/skill/tianze1.mp3 differ diff --git a/audio/skill/tianze2.mp3 b/audio/skill/tianze2.mp3 new file mode 100644 index 000000000..8f10d6964 Binary files /dev/null and b/audio/skill/tianze2.mp3 differ diff --git a/audio/skill/wanyi1.mp3 b/audio/skill/wanyi1.mp3 new file mode 100644 index 000000000..8ec9494a4 Binary files /dev/null and b/audio/skill/wanyi1.mp3 differ diff --git a/audio/skill/wanyi2.mp3 b/audio/skill/wanyi2.mp3 new file mode 100644 index 000000000..a94caab0e Binary files /dev/null and b/audio/skill/wanyi2.mp3 differ diff --git a/audio/skill/weishu1.mp3 b/audio/skill/weishu1.mp3 new file mode 100644 index 000000000..cad91171b Binary files /dev/null and b/audio/skill/weishu1.mp3 differ diff --git a/audio/skill/weishu2.mp3 b/audio/skill/weishu2.mp3 new file mode 100644 index 000000000..89874b79c Binary files /dev/null and b/audio/skill/weishu2.mp3 differ diff --git a/audio/skill/wushuang_lvlingqi1.mp3 b/audio/skill/wushuang_lvlingqi1.mp3 new file mode 100644 index 000000000..cde68c9f5 Binary files /dev/null and b/audio/skill/wushuang_lvlingqi1.mp3 differ diff --git a/audio/skill/wushuang_lvlingqi2.mp3 b/audio/skill/wushuang_lvlingqi2.mp3 new file mode 100644 index 000000000..623cd565b Binary files /dev/null and b/audio/skill/wushuang_lvlingqi2.mp3 differ diff --git a/audio/skill/xianwan.mp3 b/audio/skill/xianwan.mp3 new file mode 100644 index 000000000..55bf7e5fd Binary files /dev/null and b/audio/skill/xianwan.mp3 differ diff --git a/audio/skill/xianwan2.mp3 b/audio/skill/xianwan2.mp3 new file mode 100644 index 000000000..c1720e545 Binary files /dev/null and b/audio/skill/xianwan2.mp3 differ diff --git a/audio/skill/xinbuyi1.mp3 b/audio/skill/xinbuyi1.mp3 new file mode 100644 index 000000000..643309e1f Binary files /dev/null and b/audio/skill/xinbuyi1.mp3 differ diff --git a/audio/skill/xinbuyi2.mp3 b/audio/skill/xinbuyi2.mp3 new file mode 100644 index 000000000..7a118a14e Binary files /dev/null and b/audio/skill/xinbuyi2.mp3 differ diff --git a/audio/skill/xinganlu1.mp3 b/audio/skill/xinganlu1.mp3 new file mode 100644 index 000000000..8596438ad Binary files /dev/null and b/audio/skill/xinganlu1.mp3 differ diff --git a/audio/skill/xinganlu2.mp3 b/audio/skill/xinganlu2.mp3 new file mode 100644 index 000000000..9f3e3b0cc Binary files /dev/null and b/audio/skill/xinganlu2.mp3 differ diff --git a/audio/skill/xingtu1.mp3 b/audio/skill/xingtu1.mp3 new file mode 100644 index 000000000..638ffd684 Binary files /dev/null and b/audio/skill/xingtu1.mp3 differ diff --git a/audio/skill/xingtu2.mp3 b/audio/skill/xingtu2.mp3 new file mode 100644 index 000000000..66d659e18 Binary files /dev/null and b/audio/skill/xingtu2.mp3 differ diff --git a/audio/skill/xsqianxin1.mp3 b/audio/skill/xsqianxin1.mp3 new file mode 100644 index 000000000..4f4ec68b8 Binary files /dev/null and b/audio/skill/xsqianxin1.mp3 differ diff --git a/audio/skill/xsqianxin2.mp3 b/audio/skill/xsqianxin2.mp3 new file mode 100644 index 000000000..e21e0cc3e Binary files /dev/null and b/audio/skill/xsqianxin2.mp3 differ diff --git a/audio/skill/xuanbei1.mp3 b/audio/skill/xuanbei1.mp3 new file mode 100644 index 000000000..bed91372c Binary files /dev/null and b/audio/skill/xuanbei1.mp3 differ diff --git a/audio/skill/xuanbei2.mp3 b/audio/skill/xuanbei2.mp3 new file mode 100644 index 000000000..ee704f17b Binary files /dev/null and b/audio/skill/xuanbei2.mp3 differ diff --git a/audio/skill/ybzhuiji1.mp3 b/audio/skill/ybzhuiji1.mp3 new file mode 100644 index 000000000..80d1b23dc Binary files /dev/null and b/audio/skill/ybzhuiji1.mp3 differ diff --git a/audio/skill/ybzhuiji2.mp3 b/audio/skill/ybzhuiji2.mp3 new file mode 100644 index 000000000..e5170ab4b Binary files /dev/null and b/audio/skill/ybzhuiji2.mp3 differ diff --git a/audio/skill/yinyi1.mp3 b/audio/skill/yinyi1.mp3 new file mode 100644 index 000000000..2489fafa1 Binary files /dev/null and b/audio/skill/yinyi1.mp3 differ diff --git a/audio/skill/yinyi2.mp3 b/audio/skill/yinyi2.mp3 new file mode 100644 index 000000000..ca838e609 Binary files /dev/null and b/audio/skill/yinyi2.mp3 differ diff --git a/audio/skill/yuyan1.mp3 b/audio/skill/yuyan1.mp3 new file mode 100644 index 000000000..0a4eb463b Binary files /dev/null and b/audio/skill/yuyan1.mp3 differ diff --git a/audio/skill/yuyan2.mp3 b/audio/skill/yuyan2.mp3 new file mode 100644 index 000000000..bdfbe6bdd Binary files /dev/null and b/audio/skill/yuyan2.mp3 differ diff --git a/audio/skill/yuyun1.mp3 b/audio/skill/yuyun1.mp3 new file mode 100644 index 000000000..acd07c7e3 Binary files /dev/null and b/audio/skill/yuyun1.mp3 differ diff --git a/audio/skill/yuyun2.mp3 b/audio/skill/yuyun2.mp3 new file mode 100644 index 000000000..d2a400682 Binary files /dev/null and b/audio/skill/yuyun2.mp3 differ diff --git a/audio/skill/zengou1.mp3 b/audio/skill/zengou1.mp3 new file mode 100644 index 000000000..2665e6c1f Binary files /dev/null and b/audio/skill/zengou1.mp3 differ diff --git a/audio/skill/zengou2.mp3 b/audio/skill/zengou2.mp3 new file mode 100644 index 000000000..f40e11336 Binary files /dev/null and b/audio/skill/zengou2.mp3 differ diff --git a/audio/skill/zhibian1.mp3 b/audio/skill/zhibian1.mp3 new file mode 100644 index 000000000..c1fefdbd5 Binary files /dev/null and b/audio/skill/zhibian1.mp3 differ diff --git a/audio/skill/zhibian2.mp3 b/audio/skill/zhibian2.mp3 new file mode 100644 index 000000000..921dac7ba Binary files /dev/null and b/audio/skill/zhibian2.mp3 differ diff --git a/audio/skill/zhukou1.mp3 b/audio/skill/zhukou1.mp3 new file mode 100644 index 000000000..396c3aeef Binary files /dev/null and b/audio/skill/zhukou1.mp3 differ diff --git a/audio/skill/zhukou2.mp3 b/audio/skill/zhukou2.mp3 new file mode 100644 index 000000000..f17f772ab Binary files /dev/null and b/audio/skill/zhukou2.mp3 differ diff --git a/card/extra.js b/card/extra.js index c4eb3b3b5..8e2a14671 100644 --- a/card/extra.js +++ b/card/extra.js @@ -899,6 +899,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } return eff>=0; }, + prompt2:function(event,player){ + return '将'+get.translation(event.card)+'改为火属性'; + }, content:function(){ trigger.card.nature='fire'; if(get.itemtype(trigger.card)=='card'){ diff --git a/card/standard.js b/card/standard.js index 290b1da53..59abc78f7 100644 --- a/card/standard.js +++ b/card/standard.js @@ -1729,6 +1729,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ value:8, }, result:{ + ignoreStatus:true, target:function(player,target){ var num=target.hp-target.countCards('h')-2; if(num>-1) return -0.01; @@ -1736,7 +1737,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(target.isTurnedOver()) num/=2; var dist=get.distance(player,target,'absolute'); if(dist<1) dist=1; - return num/Math.sqrt(dist); + return num/Math.sqrt(dist)*get.threaten(target,player); } }, tag:{ diff --git a/character/diy.js b/character/diy.js index 46ab339f3..05be19057 100755 --- a/character/diy.js +++ b/character/diy.js @@ -4563,9 +4563,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var info=lib.card[to.storage.kud_qiaoshou_equip2]; if(info&&info.distance&&info.distance.globalTo) return distance+info.distance.globalTo; }, - attackFrom:function(from,to,distance){ + attackRange:function(from,distance){ var info=lib.card[from.storage.kud_qiaoshou_equip2]; - if(info&&info.distance&&info.distance.attackFrom) return distance+info.distance.attackFrom; + if(info&&info.distance&&info.distance.attackFrom) return distance-info.distance.attackFrom; }, attackTo:function(from,to,distance){ var info=lib.card[to.storage.kud_qiaoshou_equip2]; @@ -6922,8 +6922,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, rin_baoqiu:{ mod:{ - attackFrom:function(rin,riki,ball){ - return ball-2; + attackRange:function(rin,ball){ + return ball+2; }, }, trigger:{player:'useCardToPlayered'}, @@ -7121,8 +7121,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ markcount:'expansion', }, mod:{ - attackFrom:function(from,to,num){ - return num-from.getExpansions('shiina_qingshen').length; + attackRange:function(from,num){ + return num+from.getExpansions('shiina_qingshen').length; }, maxHandcard:function(from,num){ return num+from.getExpansions('shiina_qingshen').length; @@ -15900,7 +15900,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ nsfuge:'覆戈', nsfuge_info:'你的回合结束后,你可以执行一个额外的回合,此回合的摸牌阶段,你于摸牌阶段额外摸X张牌(X为你已损失的体力值);若如此做,直到洗牌前,你不能再发动此技能', nstanbing:'谈兵', - nstanbing_info:'摸牌阶段开始时,你可弃置一张牌,然后摸X张牌(X为你弃置牌的名称字数),若如此做,本回合你不可使用或打出【杀】', + nstanbing_info:'摸牌阶段开始时,你可弃置一张手牌,然后摸X张牌(X为你弃置牌的名称字数),若如此做,本回合你不可使用或打出【杀】', nsxinzhan:'心战', nsxinzhan_info:'出牌阶段限一次,你可将任意张手牌交给一名其他角色,若如此做,该角色失去X点体力(X为你交给其的牌张数的一半,向下取整),若你给的牌达到六张,则改为该角色失去一点体力上限', nsfuhuo:'符火', diff --git a/character/hearth.js b/character/hearth.js index aa2ef6bd6..8ad611259 100644 --- a/character/hearth.js +++ b/character/hearth.js @@ -5559,9 +5559,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:'hhudun_hujia', subSkill:{ hujia:{ - trigger:{player:'damageZero'}, + trigger:{player:'damageEnd'}, filter:function(event){ - return event.hujia; + return event.hujia==event.num; }, forced:true, content:function(){ diff --git a/character/mobile.js b/character/mobile.js index 353157594..18bf0f123 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -6,7 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ mobile:{ - mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua","sp_maojie"], + mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua","sp_maojie","peixiu","sp_jianggan"], mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning",'yj_huangzhong'], mobile_shijizhi:["sp_wangcan","sp_chenzhen","sp_sunshao","sp_xunchen","luotong","sp_duyu","sp_bianfuren","feiyi"], mobile_shijixin:['wujing','sp_mifuren','sp_xinpi','wangling','wangfuzhaolei','zhouchu','sp_kongrong','sp_yanghu'], @@ -17,7 +17,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_sunben:["re_sunben"], mobile_standard:["xin_xiahoudun","xin_zhangfei"], mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong"], - mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin","re_wuguotai"], + mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin","re_wuguotai","re_gaoshun"], mobile_yijiang2:["old_bulianshi","xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui"], mobile_yijiang3:["xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_yufan"], mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen"], @@ -27,6 +27,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + sp_jianggan:['male','wei',3,['spdaoshu','spdaizui']], + peixiu:['male','qun',3,['xingtu','juezhi']], + re_gaoshun:['male','qun',4,['rexianzhen','rejinjiu']], re_wuguotai:['female','wu',3,['reganlu','buyi']], xin_sunxiu:['male','wu',3,['mobileyanzhu','mobilexingxue','zhaofu'],['zhu']], sp_maojie:['male','wei',3,['bingqing','yingfeng']], @@ -165,6 +168,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']], }, characterIntro:{ + peixiu:'裴秀(224年-271年4月3日),字季彦。河东郡闻喜县(今山西省闻喜县)人。[1]魏晋时期名臣、地图学家,东汉尚书令裴茂之孙、曹魏光禄大夫裴潜之子。出身河东裴氏,少年时便颇有名气,后被大将军曹爽辟为掾属,袭爵清阳亭侯,又迁黄门侍郎。高平陵之变后,因是曹爽的故吏而被罢免。此后历任廷尉正、安东将军及卫将军司马,参与谋划军国之政,参与平定诸葛诞叛乱。因功转任尚书,进封鲁阳乡侯。魏元帝继位后,进爵鲁阳县侯,任尚书仆射。咸熙元年(264年),受命负责修改官制,又提议恢复五等爵制。五等制恢复后,获封济川侯。他建议立司马炎为世子,司马炎继位晋王后,拜裴秀为尚书令、右光禄大夫。西晋建立后,加左光禄大夫,封钜鹿郡公。泰始三年(267年),升任司空。泰始七年(271年),裴秀因服食寒食散后饮冷酒而逝世,年四十八,谥号“元”。有文集三卷。裴秀作《禹贡地域图》,开创了中国古代地图绘制学。李约瑟称他为“中国科学制图学之父”,与古希腊著名地图学家托勒密齐名,是世界古代地图学史上东西辉映的两颗灿烂明星。为纪念这位中国地图科学创始人而设立的“裴秀奖”,每两年评选一次,是中国地图学界最高奖项。由于他的贡献突出,联合国天文组织将月球正面的一个环形山命名为“裴秀环形山”,', liucheng:'游卡桌游的原创人物。设定为黄忠的妻子。', jiangwan:'蒋琬(?-246年),字公琰。零陵郡湘乡县人。三国时期蜀汉政治家,与诸葛亮、董允、费祎合称“蜀汉四相”。蒋琬最初随刘备入蜀,为广都县长。因其不理政事,惹怒刘备,在诸葛亮的劝说下才免于一死。后重获启用,受到诸葛亮的悉心培养,累官丞相长史兼抚军将军。建兴十二年(234年),诸葛亮去世,蒋琬继其执政,拜尚书令,又加行都护、假节,领益州刺史,再迁大将军,录尚书事,封安阳亭侯。延熙元年(238年),受命开府,加大司马,总揽蜀汉军政。曾制定由水路进攻曹魏的计划,但未被采纳。延熙九年(246年),蒋琬病逝,谥号为恭。', sunhanhua:'孙寒华,三国时女仙。梁·陶弘景《真诰》卷一三、五代·杜光庭《墉城集仙录》卷七:其父孙贲为孙权堂兄,寒华少时与杜契有私情,后从杜契受玄白之要,颜容日少。周旋吴越诸山十馀年,得道仙去。《鉴后集》卷四:一云即吴大帝孙权之女。于茅山修道,道成,冲虚而去,因号其山为华姥山。山在茅山崇禧观前。《神异典》卷二五九人于明代,误。', @@ -207,6 +211,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shenpei:'审配(?-204年),字正南,魏郡阴安(今河北清丰北)人。为人正直, 袁绍领冀州,审配被委以腹心之任,并总幕府。河北平定,袁绍以审配、逢纪统军事,审配恃其强盛,力主与曹操决战。曾率领弓弩手大破曹军于官渡。官渡战败,审配二子被俘,反因此受谮见疑,幸得逢纪力保。袁绍病死,审配等矫诏立袁尚为嗣,导致兄弟相争,被曹操各个击破。曹操围邺,审配死守数月,终城破被擒,拒不投降,慷慨受死。', hujinding:'胡金定,女,传说中关羽之妻。关索之母,配偶关羽,出处《花关索传》和元代《三国志评话》民间传说人物。', }, + characterTitle:{ + chunyuqiong:'#b对决限定武将', + }, card:{ binglinchengxiax:{ enable:true, @@ -605,8 +612,203 @@ game.import('character',function(lib,game,ui,get,ai,_status){ simashi:function(mode){ return !['boss','chess','tafang','stone','versus'].contains(mode); }, + sp_jianggan:function(mode){ + return mode!='identity'&&mode!='guozhan'; + }, }, skill:{ + //蒋干 + spdaoshu:{ + audio:2, + trigger:{global:'phaseUseBegin'}, + round:1, + filter:function(event,player){ + return event.player.isEnemyOf(player)&&event.player.countCards('h')>0&&event.player.hasUseTarget({name:'jiu',isCard:true},null,true); + }, + logTarget:'player', + prompt2:'令其视为使用一张【酒】。其声明一个基本牌的牌名,然后你判断其手牌区内是否有该牌名的牌。若你判断正确,则你随机获得其五张手牌,否则你不能响应其使用的牌直到回合结束。', + check:function(event,player){ + var target=event.player; + if(target.countCards('h')<3) return false; + var att=get.attitude(player,target); + if(att>0) return false; + if(att==0) return !player.inRangeOf(target); + return true; + }, + content:function(){ + 'step 0' + event.target=trigger.player; + event.target.chooseUseTarget('jiu',true); + 'step 1' + if(!target.countCards('h')){ + event.finish(); + return; + } + var list=[]; + for(var i of lib.inpile){ + if(get.type(i)=='basic') list.push(i); + } + if(!list.length){ + event.finish(); + return; + } + target.chooseControl(list).set('prompt','请声明一种基本牌').set('ai',()=>_status.event.rand).set('rand',get.rand(0,list.length-1)); + 'step 2' + event.cardname=result.control; + target.chat('我声明'+get.translation(event.cardname)); + game.log(target,'声明的牌名为','#y'+get.translation(event.cardname)); + game.delayx(); + player.chooseControl('有!','没有!').set('prompt','你觉得'+get.translation(target)+'的手牌区里有'+get.translation(event.cardname)+'吗?').set('ai',function(){ + return _status.event.choice; + }).set('choice',function(){ + var rand={ + sha:0.273, + shan:0.149, + tao:0.074, + jiu:0.031, + }[event.cardname]||0.1; + return (1-Math.pow(1-rand,target.countCards('h')))>0.5?'有!':'没有!'; + }()); + 'step 3' + player.chat(result.control); + game.log(player,'认为','#y'+result.control); + game.delayx(); + 'step 4' + var bool1=(result.index==0); + var bool2=(target.hasCard(function(card){ + return get.name(card,target)==event.cardname; + },'h')); + if(bool1==bool2){ + player.popup('判断正确','wood'); + var cards=target.getCards('h',function(card){ + return lib.filter.canBeGained(card,player,target); + }).randomGets(5); + if(cards.length>0) player.gain(cards,target,'giveAuto','bySelf'); + } + else{ + player.popup('判断错误','fire'); + player.addTempSkill('spdaoshu_respond'); + } + }, + subSkill:{ + respond:{ + trigger:{global:'useCard1'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.player==_status.currentPhase; + }, + content:function(){ + trigger.directHit.add(player); + }, + }, + }, + }, + spdaizui:{ + audio:2, + trigger:{player:'damageBegin2'}, + limited:true, + logTarget:'source', + filter:function(event,player){ + return event.num>=player.hp&&event.source&&event.source.isIn()&&event.cards&&event.cards.filterInD().length>0; + }, + prompt2:function(event){ + return '防止即将受到的'+get.cnNumber(event.num)+'点伤害,并令'+get.translation(event.source)+'将'+get.translation(event.cards.filterInD())+'置于武将牌上且回合结束时收回'; + }, + skillAnimation:true, + animationColor:'thunder', + content:function(){ + player.awakenSkill('spdaizui'); + trigger.source.addSkill('spdaizui2'); + trigger.source.addToExpansion(trigger.cards.filterInD(),'gain2').gaintag.add('spdaizui2'); + trigger.cancel(); + }, + }, + spdaizui2:{ + trigger:{global:'phaseEnd'}, + forced:true, + charlotte:true, + filter:function(event,player){ + return player.getExpansions('spdaizui2').length>0; + }, + content:function(){ + 'step 0' + var cards=player.getExpansions('spdaizui2'); + player.gain(cards,'gain2'); + 'step 1' + player.removeSkill('spdaizui2'); + }, + marktext:'释', + intro:{ + markcount:'expansion', + content:'expansion', + }, + }, + //裴秀 + xingtu:{ + trigger:{player:'useCard'}, + filter:function(event,player){ + var num1=get.number(event.card),num2=player.storage.xingtu; + return typeof num1=='number'&&typeof num2=='number'&&num2%num1==0; + }, + forced:true, + content:function(){ + player.draw(); + }, + mod:{ + cardUsable:function(card,player){ + var num1=get.number(card),num2=player.storage.xingtu; + if(typeof num1=='number'&&typeof num2=='number'&&num1%num2==0) return Infinity; + }, + aiOrder:function(player,card,num){ + var num1=get.number(card),num2=player.storage.xingtu; + if(typeof num1=='number'&&typeof num2=='number'&&num2%num1==0) return num+5; + }, + }, + group:'xingtu_record', + intro:{ + content:'当前记录:X=#', + }, + subSkill:{ + record:{ + trigger:{player:'useCardAfter'}, + forced:true, + filter:function(event,player){ + return typeof get.number(event.card)=='number'; + }, + content:function(){ + player.storage.xingtu=get.number(trigger.card); + player.markSkill('xingtu'); + }, + }, + }, + }, + juezhi:{ + enable:'phaseUse', + filter:function(event,player){ + return player.countCards('he')>1; + }, + filterCard:true, + position:'he', + selectCard:[2,Infinity], + check:function(card){ + if(ui.selected.cards.length>1) return 0; + return 4-get.value(card); + }, + content:function(){ + var num=0; + for(var i of cards) num+=get.number(i,player); + num=Math.min(num,13); + var card=get.cardPile2(function(card){ + return get.number(card,false)==num; + }); + if(card) player.gain(card,'gain2'); + }, + ai:{ + order:1, + result:{player:1}, + }, + }, reganlu:{ enable:'phaseUse', usable:1, @@ -1124,10 +1326,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - var list=player.getStorage('spmingxuan'),num=Math.min(player.countCards('h'),game.countPlayer(function(current){ + var suits=[],hs=player.getCards('h'); + for(var i of hs) suits.add(get.suit(i,player)); + var list=player.getStorage('spmingxuan'),num=Math.min(suits.length,game.countPlayer(function(current){ return current!=player&&!list.contains(current); })); - player.chooseCard('h',true,[1,num],'瞑昡:请选择至多'+get.cnNumber(num)+'张牌随机分发').set('ai',(card)=>6-get.value(card)); + player.chooseCard('h',true,[1,num],'瞑昡:请选择至多'+get.cnNumber(num)+'张花色各不相同的手牌',function(card,player){ + if(!ui.selected.cards.length) return true; + var suit=get.suit(card); + for(var i of ui.selected.cards){ + if(get.suit(i,player)==suit) return false; + } + return true; + }).set('complexCard',true).set('ai',(card)=>6-get.value(card)); 'step 1' if(result.bool){ var list=player.getStorage('spmingxuan'),cards=result.cards.randomSort(); @@ -4340,7 +4551,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ unequip:true, respondSha:true, skillTagFilter:function(player,tag,arg){ - if(tag=='unequip') return player.group=='wu'&&arg.card&&arg.card.storage&&arg.card.storage.dbchongjian; + if(tag=='unequip'){ + if(player.group!='wu'||!arg||!arg.card||!arg.card.storage||!arg.card.storage.dbchongjian) return false; + return true + } return player.group=='wu'&&arg=='use'&&player.hasCard(function(card){ return get.type(card)=='equip'; },'hes'); @@ -6164,8 +6378,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mark:true, marktext:'仪', mod:{ - attackFrom:function(player,target,num){ - return num-((player.storage.mjdingyi_plus||0)+1); + attackRange:function(player,num){ + return num+((player.storage.mjdingyi_plus||0)+1); }, }, intro:{ @@ -12818,7 +13032,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(target.isDamaged()) num++; return num*get.attitude(_status.event.player,target); }; - "step 1" + "step 2" if(result.bool){ var target=result.targets[0]; player.line(target,'green'); @@ -16170,7 +16384,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ luanchou_info:'出牌阶段限一次,你可令两名角色获得“姻”标记并清除原有标记。拥有“姻”标记的角色视为拥有技能〖共患〗。', gonghuan:'共患', gonghuan_info:'锁定技。每回合限一次,一名其他角色受到伤害时,若其拥有“姻”标记且其体力值小于你,则你将伤害转移给自己。此伤害结算结束后,若你与其体力值相等,则你与其移去“姻”标记。', - sp_yanghu:'羊祜', + sp_yanghu:'手杀羊祜', mingfa:'明伐', mingfa_info:'①结束阶段,你可展示一张牌并记录为“明伐”。②出牌阶段开始时,若“明伐”牌在你的手牌区或装备区,则你可以使用“明伐”牌与一名其他角色拼点。若你赢:你获得对方一张牌并从牌堆中获得一张点数等于“明伐”牌牌面点数-1的牌。若你没赢:你本回合不能使用牌指定其他角色为目标。③你的拼点牌亮出后,你令此牌的点数+2。', rongbei:'戎备', @@ -16285,7 +16499,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yiyong:'异勇', yiyong_info:'当你受到其他角色造成的渠道为【杀】的伤害后,若你的装备区内有武器牌,则你可以获得此【杀】对应的所有实体牌,然后将这些牌当做【杀】对伤害来源使用(无距离限制)。若其装备区内没有武器牌,则此伤害+1。', shanxie:'擅械', - shanxie_info:'①出牌阶段限一次,你可选择一项:⒈从牌堆中获得一张武器牌。⒉获得其装备区内的一张武器牌并使用,然后其将一张手牌当做【杀】对你使用。②当其他角色使用【闪】响应你使用的【杀】时,若此【闪】没有点数或点数不大于你攻击范围的二倍,则你令此【闪】无效。', + shanxie_info:'①出牌阶段限一次,你可选择一项:⒈从牌堆中获得一张武器牌。⒉获得一名其他角色装备区内的一张武器牌并使用,然后其将一张手牌当做【杀】对你使用。②当其他角色使用【闪】响应你使用的【杀】时,若此【闪】没有点数或点数不大于你攻击范围的二倍,则你令此【闪】无效。', sunyi:'手杀孙翊', zaoli:'躁厉', zaoli_info:'锁定技。①你不能于回合内使用你手牌中不为本回合获得的牌。②当你使用或打出手牌时,你获得一个“厉”(至多4个)。③回合开始时,若你有“厉”,则你移去所有“厉”并弃置任意张牌,然后摸X+Y张牌。若X大于2,你失去1点体力(X为你移去的标记数,Y为你弃置的牌数)。', @@ -16365,7 +16579,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sptaoluan_info:'每回合限一次。一名角色的判定牌生效后,若判定结果的花色为♠,则你可以终止导致此判定发生的上级事件。然后选择一项:①获得判定牌对应的实体牌。②视为对判定角色使用一张火【杀】(无距离和次数限制)', sp_yangwan:'杨婉', spmingxuan:'瞑昡', - spmingxuan_info:'锁定技。出牌阶段开始时,你须选择至多X张牌(X为未选择过选项①的角色),将这些牌随机交给这些角色中的等量角色。然后这些角色依次选择一项:①对你使用一张【杀】。②交给你一张牌,然后你摸一张牌。', + spmingxuan_info:'锁定技。出牌阶段开始时,你须选择至多X张花色各不相同的手牌(X为未选择过选项一的角色),将这些牌随机交给这些角色中的等量角色。然后这些角色依次选择一项:⒈对你使用一张【杀】。⒉交给你一张牌,然后你摸一张牌。', spxianchou:'陷仇', spxianchou_info:'当你受到有来源的伤害后,你可选择一名不为伤害来源的其他角色。该角色可以弃置一张牌,然后视为对伤害来源使用一张【杀】(无距离限制)。若其因此【杀】造成了伤害,则你回复1点体力。', liucheng:'刘赪', @@ -16395,6 +16609,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reganlu_info:'出牌阶段限一次,你可以选择装备区牌数之差的绝对值不大于X的两名角色或包含你在内的两名角色,然后交换这两名角色装备区内的牌。(X为你已损失的体力值)', taoqian:'手杀陶谦', miheng:'手杀祢衡', + re_gaoshun:'手杀高顺', + peixiu:'裴秀', + xingtu:'行图', + xingtu_info:'锁定技。①当你使用有点数的牌结算结束后,你将此牌点数记录为X。②当你使用牌时,若X÷Y的余数为0,则你摸一张牌(Y为此牌的点数)。③你使用Y÷X的余数为0的牌无次数限制(Y为此牌的点数)。', + juezhi:'爵制', + juezhi_info:'出牌阶段,你可以弃置至少两张牌,然后从牌堆中获得一张点数为X的牌(X=min(13, 这些牌的点数和))。', + sp_jianggan:'手杀蒋干', + spdaoshu:'盗书', + spdaoshu_info:'每轮限一次。一名敌方角色的出牌阶段开始时,若其有手牌,则你可以令其视为使用一张【酒】。其须声明一个基本牌的牌名,然后你判断其手牌区内是否有该牌名的牌。若你判断正确,则你随机获得其五张手牌,否则你不能响应其使用的牌直到回合结束。', + spdaizui:'戴罪', + spdaizui_info:'限定技。当你受到伤害值不小于体力值的伤害时,你可防止此伤害并将此伤害渠道对应的所有实体牌置于伤害来源的武将牌上,称为“释”。本回合结束时,其获得所有“释”。', mobile_standard:'手杀异构·标准包', mobile_shenhua:'手杀异构·神话再临', diff --git a/character/rank.js b/character/rank.js index 44e628007..ee1acd54a 100644 --- a/character/rank.js +++ b/character/rank.js @@ -501,6 +501,7 @@ window.noname_character_rank={ 'tw_liuhong', 're_zhangbao', 're_dengzhi', + 'sp_jianggan', ], bp:[ 'chess_diaochan', @@ -755,6 +756,9 @@ window.noname_character_rank={ 'tw_chengpu', 'key_satomi', 'key_erika', + 'jin_yanghu', + 'qinghegongzhu', + 're_zhanghe', ], b:[ 'diy_feishi', @@ -975,6 +979,7 @@ window.noname_character_rank={ 'huojun', 'tw_caocao', 'xin_wuguotai', + 'dc_xushu', ], bm:[ 'diy_xizhenxihong', @@ -1129,6 +1134,7 @@ window.noname_character_rank={ 'ol_bianfuren', 'sp_ol_zhanghe', 'liucheng', + 'peixiu', ], c:[ 'xiahoudun', @@ -1878,6 +1884,8 @@ window.noname_character_rank={ 'zhaoyan', 're_miheng', 'tw_chengpu', + 'jin_yanghu', + 'qinghegongzhu', ], junk:[ 'sunshao', diff --git a/character/refresh.js b/character/refresh.js index 0ea0c9570..93f2640e5 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -4,12 +4,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'refresh', characterSort:{ refresh:{ - refresh_standard:["re_caocao","re_simayi","re_guojia","re_lidian","re_zhangliao","re_xuzhu","re_xiahoudun","re_zhangfei","re_zhaoyun","re_guanyu","re_machao","re_xushu","re_zhouyu","re_lvmeng","re_ganning","re_luxun","re_daqiao","re_huanggai","re_lvbu","re_huatuo","re_liubei","re_diaochan","re_huangyueying","re_sunquan","re_sunshangxiang","re_zhenji","re_zhugeliang","re_huaxiong",'re_gongsunzan'], + refresh_standard:["re_caocao","re_simayi","re_guojia","re_zhangliao","re_xuzhu","re_xiahoudun","re_zhangfei","re_zhaoyun","re_guanyu","re_machao","re_zhouyu","re_lvmeng","re_ganning","re_luxun","re_daqiao","re_huanggai","re_lvbu","re_huatuo","re_liubei","re_diaochan","re_huangyueying","re_sunquan","re_sunshangxiang","re_zhenji","re_zhugeliang","re_huaxiong",'re_gongsunzan'], refresh_feng:['caoren','ol_xiahouyuan','re_huangzhong','ol_weiyan','ol_xiaoqiao','zhoutai','re_zhangjiao','xin_yuji'], refresh_huo:["ol_sp_zhugeliang","re_xunyu","re_dianwei","re_yanwen","ol_pangtong","ol_yuanshao","ol_pangde","re_taishici"], refresh_lin:['re_menghuo','ol_sunjian','re_caopi','ol_xuhuang','ol_dongzhuo','ol_zhurong','re_jiaxu','ol_lusu'], - refresh_shan:['ol_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai'], - refresh_yijiang1:['re_wuguotai','re_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua'], + refresh_shan:['ol_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai','re_zhanghe'], + refresh_yijiang1:['xin_wuguotai','xin_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua','dc_xushu'], refresh_yijiang2:['re_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_bulianshi','xin_liubiao'], refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','xin_yufan','re_liru','re_manchong','re_fuhuanghou','re_guanping'], refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren','re_guyong','xin_jushou'], @@ -19,6 +19,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, connect:true, character:{ + re_zhanghe:['male','wei',4,['reqiaobian']], + dc_xushu:['male','shu',4,['rezhuhai','xsqianxin']], + xin_gaoshun:['male','qun',4,['decadexianzhen','decadejinjiu']], re_guohuanghou:['female','wei',3,['rejiaozhao','redanxin']], re_xiahoushi:['female','shu',3,['reqiaoshi','reyanyu']], xin_jushou:['male','qun',3,['xinjianying','shibei']], @@ -69,11 +72,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_pangtong:['male','shu',3,['ollianhuan','olniepan'],[]], re_zhangyi:['male','shu',5,['rewurong','reshizhi']], xin_wuguotai:['female','wu',3,['xinganlu','xinbuyi']], - re_gaoshun:['male','qun',4,['rexianzhen','rejinjiu']], re_caocao:['male','wei',4,['new_rejianxiong','rehujia'],['zhu']], re_simayi:['male','wei',3,['refankui','reguicai']], re_guojia:['male','wei',3,['tiandu','new_reyiji']], - re_lidian:['male','wei',3,['xunxun','wangxi']], re_zhangliao:['male','wei',4,['new_retuxi']], re_xuzhu:['male','wei',4,['new_reluoyi']], re_xiahoudun:['male','wei',4,['reganglie','new_qingjian']], @@ -81,9 +82,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_zhaoyun:['male','shu',4,['ollongdan','olyajiao']], re_guanyu:['male','shu',4,['new_rewusheng','new_yijue']], re_machao:['male','shu',4,['mashu','retieji']], - re_xushu:['male','shu',4,['zhuhai','qianxin']], re_zhouyu:['male','wu',3,['reyingzi','refanjian']], - re_lvmeng:['male','wu',4,['keji','qinxue','botu']], + re_lvmeng:['male','wu',4,['keji','qinxue','rebotu']], re_ganning:['male','wu',4,['qixi','fenwei']], re_luxun:['male','wu',3,['reqianxun','relianying']], re_daqiao:['female','wu',3,['reguose','liuli']], @@ -143,6 +143,620 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_xushu:['zhaoyun','sp_zhugeliang'], }, skill:{ + //OL界张郃 + reqiaobian:{ + audio:2, + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, + forced:true, + locked:false, + filter:function(event,player){ + return event.name!='phase'||game.phaseNumber==0; + }, + content:function(){ + player.addMark('reqiaobian',2); + game.delayx(); + }, + mark:true, + intro:{ + content:function(storage,player){ + var str='共有'+(storage||0)+'个标记'; + if(player.storage.reqiaobian_jieshu){ + str=('
  • '+str+'
  • 已记录手牌数:'+get.translation(player.storage.reqiaobian_jieshu)); + } + return str; + }, + }, + group:['reqiaobian_judge','reqiaobian_draw','reqiaobian_use','reqiaobian_discard','reqiaobian_jieshu'], + subSkill:{ + judge:{ + audio:'reqiaobian', + trigger:{player:'phaseJudgeBefore'}, + direct:true, + filter:function(event,player){ + return player.hasMark('reqiaobian')||player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'reqiaobian_judge'),'he'); + }, + check:function(event,player){ + return player.hasCard(function(card){ + return get.effect(player,{ + name:card.viewAs||card.name, + cards:[card], + },player,player)<0; + },'j'); + }, + content:function(){ + 'step 0' + var choices=[]; + if(player.hasMark('reqiaobian')) choices.push('弃置标记'); + if(player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'reqiaobian_judge'),'he')) choices.push('弃置牌'); + choices.push('cancel2'); + player.chooseControl(choices).set('prompt','巧变:是否跳过判定阶段?').set('ai',function(){ + var evt=_status.event; + if(lib.skill[evt.getParent().name].check(evt.getTrigger(),evt.player)) return 0; + return 'cancel2'; + }); + 'step 1' + if(result.control!='cancel2'){ + if(result.control=='弃置牌'){ + player.chooseToDiscard('he',true).logSkill=event.name; + } + else{ + player.logSkill(event.name); + player.removeMark('reqiaobian',1); + } + } + else event.finish(); + 'step 2' + trigger.cancel(); + }, + }, + draw:{ + audio:'reqiaobian', + trigger:{player:'phaseDrawBefore'}, + direct:true, + filter:function(event,player){ + return player.hasMark('reqiaobian')||player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'reqiaobian_judge'),'he'); + }, + check:function(event,player){ + return game.countPlayer(function(current){ + var att=get.attitude(player,current); + if(current.hasSkill('tuntian')) return att>0; + return att<1; + })>1; + }, + content:function(){ + 'step 0' + var choices=[]; + if(player.hasMark('reqiaobian')) choices.push('弃置标记'); + if(player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'reqiaobian_draw'),'he')) choices.push('弃置牌'); + choices.push('cancel2'); + player.chooseControl(choices).set('prompt','巧变:是否跳过摸牌阶段?').set('ai',function(){ + var evt=_status.event; + if(lib.skill[evt.getParent().name].check(evt.getTrigger(),evt.player)) return 0; + return 'cancel2'; + }); + 'step 1' + if(result.control!='cancel2'){ + if(result.control=='弃置牌'){ + player.chooseToDiscard('he',true).logSkill=event.name; + } + else{ + player.logSkill(event.name); + player.removeMark('reqiaobian',1); + } + } + else event.finish(); + 'step 2' + trigger.cancel(); + if(game.hasPlayer((current)=>current.countGainableCards(player,'h')>0)){ + player.chooseTarget('是否获得至多两名其他角色的各一张手牌?',[1,2],function(card,player,target){ + return target.countGainableCards(player,'h')>0; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(target.hasSkill('tuntian')) return att/10; + return 1-att; + }); + } + else event.finish(); + 'step 3' + if(result.bool){ + var targets=result.targets.sortBySeat(); + player.line(targets,'green'); + player.gainMultiple(targets); + } + }, + }, + use:{ + audio:'reqiaobian', + trigger:{player:'phaseUseBefore'}, + direct:true, + filter:function(event,player){ + return player.hasMark('reqiaobian')||player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'reqiaobian_judge'),'he'); + }, + check:function(event,player){ + if(player.countCards('h',function(card){ + return player.hasValueTarget(card,null,true); + })>1) return false; + return game.hasPlayer(function(current){ + var att=get.sgn(get.attitude(player,current)); + if(att!=0){ + var es=current.getCards('e'); + for(var i=0;i0){ + var js=current.getCards('j',function(card){ + return get.effect(current,{ + name:card.viewAs||card.name, + cards:[card], + },current,current)<-2; + }); + for(var i=0;i=0) return false; + return current!=current2&¤t2.canAddJudge(js[i]); + })){ + return true; + } + } + } + }); + }, + content:function(){ + 'step 0' + var choices=[]; + if(player.hasMark('reqiaobian')) choices.push('弃置标记'); + if(player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'reqiaobian_use'),'he')) choices.push('弃置牌'); + choices.push('cancel2'); + player.chooseControl(choices).set('prompt','巧变:是否跳过出牌阶段?').set('ai',function(){ + var evt=_status.event; + if(lib.skill[evt.getParent().name].check(evt.getTrigger(),evt.player)) return 0; + return 'cancel2'; + }); + 'step 1' + if(result.control!='cancel2'){ + if(result.control=='弃置牌'){ + player.chooseToDiscard('he',true).logSkill=event.name; + } + else{ + player.logSkill(event.name); + player.removeMark('reqiaobian',1); + } + } + else event.finish(); + 'step 2' + trigger.cancel(); + player.moveCard(); + }, + }, + discard:{ + audio:'reqiaobian', + trigger:{player:'phaseDiscardBefore'}, + direct:true, + filter:function(event,player){ + return player.hasMark('reqiaobian')||player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'reqiaobian_judge'),'he'); + }, + check:function(event,player){ + return player.needsToDiscard(); + }, + content:function(){ + 'step 0' + var choices=[]; + if(player.hasMark('reqiaobian')) choices.push('弃置标记'); + if(player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'reqiaobian_discard'),'he')) choices.push('弃置牌'); + choices.push('cancel2'); + player.chooseControl(choices).set('prompt','巧变:是否跳过弃牌阶段?').set('ai',function(){ + var evt=_status.event; + if(lib.skill[evt.getParent().name].check(evt.getTrigger(),evt.player)) return 0; + return 'cancel2'; + }); + 'step 1' + if(result.control!='cancel2'){ + if(result.control=='弃置牌'){ + player.chooseToDiscard('he',true).logSkill=event.name; + } + else{ + player.logSkill(event.name); + player.removeMark('reqiaobian',1); + } + } + else event.finish(); + 'step 2' + trigger.cancel(); + }, + }, + jieshu:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + forced:true, + filter:function(event,player){ + return !player.getStorage('reqiaobian_jieshu').contains(player.countCards('h')); + }, + content:function(){ + player.addMark('reqiaobian',1); + player.markAuto('reqiaobian_jieshu',[player.countCards('h')]); + player.storage.reqiaobian_jieshu.sort(); + }, + }, + }, + }, + //十周年徐庶 + rezhuhai:{ + audio:2, + trigger:{global:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return player!=event.player&&event.player.getHistory('sourceDamage').length>0&&event.player.isIn()&&(player.countCards('h')>0||player.canUse('guohe',event.player)); + }, + content:function(){ + 'step 0' + var target=trigger.player; + var choiceList=['将一张手牌当做【杀】对其使用','视为对其使用一张【过河拆桥】']; + var bool=false,hs=player.getCards('h'); + for(var i of hs){ + if(game.checkMod(i,player,'unchanged','cardEnabled2',player)!==false&&player.canUse(get.autoViewAs({name:'sha'},[i]),target,false)){ + bool=true; + break; + } + } + var choices=[]; + if(bool) choices.push('选项一'); + else choiceList[0]=''+choiceList[0]+''; + if(player.canUse('guohe',target)) choices.push('选项二'); + else choiceList[1]=''+choiceList[1]+''; + choices.push('cancel2'); + player.chooseControl(choices).set('choiceList',choiceList).set('prompt',get.prompt('rezhuhai',target)).set('ai',function(){ + var choices=_status.event.controls; + var eff1=0,eff2=0; + var player=_status.event.player,target=_status.event.getTrigger().player; + if(choices.contains('选项一')) eff1=get.effect(target,{name:'sha'},player,player); + if(choices.contains('选项二')) eff2=get.effect(target,{name:'guohe'},player,player); + if(eff1>0&&(player.hasSkill('xsqianxin')&&player.isDamaged()||eff1>eff2)) return '选项一'; + if(eff2>0) return '选项二'; + return 'cancel2'; + }); + 'step 1' + if(result.control!='cancel2'){ + if(result.control=='选项一'){ + player.chooseCard('h',true,function(card,player){ + if(!game.checkMod(card,player,'unchanged','cardEnabled2',player)) return false; + return player.canUse(get.autoViewAs({name:'sha'},[hs]),_status.event.getTrigger().player,false); + },'选择一张手牌当做【杀】对'+get.translation(trigger.player)+'使用').set('ai',function(card){ + var player=_status.event.player; + return get.effect(_status.event.getTrigger().player,get.autoViewAs({name:'sha'},[hs]),player,player)/Math.max(1,get.value(card)); + }); + } + else{ + player.useCard({name:'guohe',isCard:true},trigger.player,'rezhuhai'); + event.finish(); + } + } + else event.finish(); + 'step 2' + if(result.bool){ + player.useCard({name:'sha'},result.cards,'rezhuhai',trigger.player,false); + } + }, + }, + xsqianxin:{ + trigger:{source:'damageSource'}, + juexingji:true, + forced:true, + skillAnimation:true, + animationColor:'orange', + filter:function(event,player){ + return player.isDamaged(); + }, + content:function(){ + player.awakenSkill('xsqianxin'); + player.loseMaxHp(); + player.addSkill('rejianyan'); + }, + }, + rejianyan:{ + audio:2, + enable:'phaseUse', + usable:2, + filter:function(event,player){ + return game.hasPlayer((current)=>current.group=='key'||current.hasSex('male')); + }, + chooseButton:{ + dialog:function(){ + return ui.create.dialog('###荐言###'+get.translation('rejianyan_info')); + }, + chooseControl:function(event,player){ + var list=[]; + if(!player.hasSkill('rejianyan_color')) list.addArray(['red','black']); + if(!player.hasSkill('rejianyan_type')) list.addArray(['basic','trick','equip']); + list.push('cancel2'); + return list; + }, + check:function(){ + if(!_status.event.player.hasSkill('rejianyan_color')) return 'red'; + return 'trick'; + }, + backup:function(result,player){ + return { + audio:'rejianyan', + filterCard:()=>false, + selectCard:-1, + info:result.control, + content:function(){ + 'step 0' + var card=false,info=lib.skill.rejianyan_backup.info; + if(info=='red'||info=='black'){ + player.addTempSkill('rejianyan_color','phaseUseEnd'); + card=get.cardPile2(function(card){ + return get.color(card)==info; + }); + } + else{ + player.addTempSkill('rejianyan_type','phaseUseEnd'); + card=get.cardPile2(function(card){ + return get.type(card)==info; + }); + } + if(card){ + event.card=card; + player.showCards(card,get.translation(player)+'发动了【荐言】'); + } + else event.finish(); + 'step 1' + player.chooseTarget(true,'选择一名角色获得'+get.translation(card),function(card,player,target){ + return target.group=='key'||target.hasSex('male'); + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(target.hasSkill('nogain')) att/=10; + return att/Math.sqrt(get.distance(player,target,'absolute')) + }); + 'step 2' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + target.gain(card,'gain2'); + } + }, + ai:{result:{player:1}}, + } + }, + }, + ai:{ + order:8, + result:{ + player:function(player,target){ + if(game.hasPlayer((current)=>(current.group=='key'||current.hasSex('male'))&&get.attitude(player,current)>0)) return 1; + return 0; + }, + }, + }, + subSkill:{type:{},color:{},backup:{}}, + }, + //野兽高顺 + decadexianzhen:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player.canCompare(target); + }, + filter:function(event,player){ + return player.countCards('h')>0&&!player.hasSkill('decadexianzhen2')&&!player.hasSkill('decadexianzhen3'); + }, + content:function(){ + "step 0" + player.chooseToCompare(target); + "step 1" + if(result.bool){ + player.storage.decadexianzhen2=target; + player.addTempSkill('decadexianzhen2'); + } + else{ + player.addTempSkill('decadexianzhen3'); + } + }, + ai:{ + order:function(name,player){ + var cards=player.getCards('h'); + if(player.countCards('h','sha')==0){ + return 1; + } + for(var i=0;i11&&get.value(cards[i])<7){ + return 9; + } + } + return get.order({name:'sha'})-1; + }, + result:{ + player:function(player){ + if(player.countCards('h','sha')>0) return 0; + var num=player.countCards('h'); + if(num>player.hp) return 0; + if(num==1) return -2; + if(num==2) return -1; + return -0.7; + }, + target:function(player,target){ + var num=target.countCards('h'); + if(num==1) return -1; + if(num==2) return -0.7; + return -0.5 + }, + }, + threaten:1.3 + } + }, + decadexianzhen2:{ + audio:'decadexianzhen', + charlotte:true, + onremove:true, + mod:{ + targetInRange:function(card,player,target){ + if(target==player.storage.decadexianzhen2) return true; + }, + cardUsableTarget:function(card,player,target){ + if(target==player.storage.decadexianzhen2) return true; + }, + }, + ai:{ + unequip:true, + skillTagFilter:function(player,tag,arg){ + if(arg.target!=player.storage.decadexianzhen2) return false; + }, + }, + group:'decadexianzhen2_damage', + subSkill:{ + damage:{ + audio:'decadexianzhen', + trigger:{source:'damageBegin1'}, + forced:true, + filter:function(event,player){ + return event.card&&event.player==player.storage.decadexianzhen2&&!player.hasHistory('custom',function(evt){ + return evt.name=='decadexianzhen'&&evt.cardname==event.card.name; + }) + }, + logTarget:'player', + content:function(){ + trigger.num++; + player.getHistory('custom').push({ + name:'decadexianzhen', + cardname:trigger.card.name, + }); + }, + }, + }, + }, + decadexianzhen3:{ + charlotte:true, + mod:{ + cardEnabled:function(card){ + if(card.name=='sha') return false; + }, + ignoredHandcard:function(card,player){ + if(get.name(card)=='sha'){ + return true; + } + }, + cardDiscardable:function(card,player,name){ + if(name=='phaseDiscard'&&get.name(card)=='sha'){ + return false; + } + }, + }, + }, + decadejinjiu:{ + global:'decadejinjiu_global', + mod:{ + cardname:function(card){ + if(card.name=='jiu') return 'sha'; + }, + cardnumber:function(card){ + if(card.name=='jiu') return 13; + }, + }, + subSkill:{ + global:{ + mod:{ + cardEnabled:function(card,player){ + if(card.name=='jiu'){ + var source=_status.currentPhase; + if(source&&source!=player&&source.hasSkill('decadejinjiu')) return false; + } + }, + cardSavable:function(card,player){ + if(card.name=='jiu'){ + var source=_status.currentPhase; + if(source&&source!=player&&source.hasSkill('decadejinjiu')) return false; + } + }, + }, + }, + }, + }, + rebotu:{ + audio:'botu', + trigger:{player:'phaseJieshuBegin'}, + frequent:true, + filter:function(event,player){ + if(player.countMark('rebotu_count')>=Math.min(3,game.countPlayer())) return false; + var suits=[]; + game.getGlobalHistory('cardMove',function(evt){ + if(suits.length>=4) return; + if(evt.name=='lose'){ + if(evt.position==ui.discardPile){ + for(var i of evt.cards) suits.add(get.suit(i,false)); + } + } + else{ + if(evt.name=='cardsDiscard'){ + for(var i of evt.cards) suits.add(get.suit(i,false)); + } + } + }); + return suits.length>=4; + }, + content:function(){ + player.addTempSkill('rebotu_count','roundStart'); + player.addMark('rebotu_count',1,false); + player.insertPhase(); + }, + group:'rebotu_mark', + subSkill:{ + count:{onremove:true}, + mark:{ + trigger:{ + global:['loseAfter','cardsDiscardAfter'], + player:'phaseAfter', + }, + forced:true, + firstDo:true, + silent:true, + filter:function(event,player){ + if(event.name=='phase') return true; + if(player!=_status.currentPhase) return false; + if(event.name=='lose') return event.position==ui.discardPile; + return true; + }, + content:function(){ + if(trigger.name=='phase'){ + player.unmarkSkill('rebotu_mark'); + return; + } + var suits=[]; + game.getGlobalHistory('cardMove',function(evt){ + if(suits.length>=4) return; + if(evt.name=='lose'){ + if(evt.position==ui.discardPile){ + for(var i of evt.cards) suits.add(get.suit(i,false)); + } + } + else{ + if(evt.name=='cardsDiscard'){ + for(var i of evt.cards) suits.add(get.suit(i,false)); + } + } + }); + player.storage.rebotu_mark=suits; + player.markSkill('rebotu_mark'); + }, + intro:{ + onunmark:true, + content:'本回合已有$花色的牌进入过弃牌堆', + }, + }, + }, + }, xinganlu:{ enable:'phaseUse', usable:1, @@ -1962,7 +2576,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(get.color(trigger.card)=='red'){ player.draw(); } - if(get.number(result.cards[0])==get.number(trigger.card)) player.restoreSkill('jiezhong'); + if(get.number(result.cards[0],player)==get.number(trigger.card)) player.restoreSkill('jiezhong'); } }, ai:{ @@ -3017,7 +3631,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var i=0;i7&&useful<7) return true; + if(get.number(cards[i])>7&&useful<7) return true; } } return false; @@ -3324,7 +3938,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, filter:function(event,player){ return player!=_status.currentPhase&&player.countCards('h')>=player.getHandcardLimit()&& - (get.type(event.card)=='delay'||get.color(event.card)=='nocolor'); + (get.type(event.card)=='delay'||get.color(event.card)=='none'); }, content:function(){ trigger.excluded.add(player); @@ -3333,7 +3947,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ effect:{ target:function(card,player,target){ if(target!=_status.currentPhase&&target.countCards('h')>=target.getHandcardLimit()&& - (get.type(card)=='delay'||get.color(card)=='nocolor')) return 'zerotarget'; + (get.type(card)=='delay'||get.color(card)=='none')) return 'zerotarget'; }, }, }, @@ -4478,9 +5092,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return card.name=='sha'&&get.position(card,true)=='o'; }); cards.sort(function(a,b){ - return b.number-a.number; + return get.number(b)-get.number(a); }); - if(cards.length>1&&cards[0].number>cards[1].number) cards.splice(1); + if(cards.length>1&&get.number(cards[0])>get.number(cards[1])) cards.splice(1); return '获得'+get.translation(cards); }, content:function(){ @@ -4488,9 +5102,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return card.name=='sha'&&get.position(card,true)=='o'; }); cards.sort(function(a,b){ - return b.number-a.number; + return get.number(b)-get.number(a); }); - if(cards.length>1&&cards[0].number>cards[1].number) cards.splice(1); + if(cards.length>1&&get.number(cards[0])>get.number(cards[1])) cards.splice(1); player.gain(cards,'gain2'); }, }, @@ -5685,11 +6299,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.finish(); return; } - if(event.card2.number>=10||event.card2.number<=4){ - if(target.countCards('h')>2){ - event.addToAI=true; - } - } game.broadcastAll(function(card1,card2){ card1.classList.remove('glow'); card2.classList.remove('glow'); @@ -5829,7 +6438,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 1; } for(var i=0;i11&&get.value(cards[i])<7){ + if(cards[i].name!='sha'&&get.number(cards[i])>11&&get.value(cards[i])<7){ return 9; } } @@ -6277,10 +6886,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var val=get.value(card); if(val<0) return true; if(val<=5){ - return card.number>=12; + return get.number(card)>=12; } if(val<=6){ - return card.number>=13; + return get.number(card)>=13; } return false; })>0) return -1; @@ -6292,15 +6901,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var maxnum=0; var cards2=target.getCards('h'); for(var i=0;imaxnum){ - maxnum=cards2[i].number; + if(get.number(cards2[i])>maxnum){ + maxnum=get.number(cards2[i]); } } if(maxnum>10) maxnum=10; if(maxnum<5&&cards2.length>1) maxnum=5; var cards=player.getCards('h'); for(var i=0;i=12; + return get.number(card)>=12; } if(val<=6){ - return card.number>=13; + return get.number(card)>=13; } return false; })>0)).set('ai',function(){return _status.event.choice}); @@ -7034,7 +7643,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ judgeCheck:function(card,bool){ var suit=get.suit(card); if(suit=='spade'){ - if(bool&&card.number>1&&card.number<10) return 5; + if(bool&&get.number(card)>1&&get.number(card)<10) return 5; return 4; } if(suit=='club') return 2; @@ -7163,7 +7772,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.$gain2(trigger.player.judging[0]); player.gain(trigger.player.judging[0]); var card=result.cards[0]; - if(get.suit(card)=='spade'&&card.number>1&&card.number<10) player.draw('nodelay'); + if(get.suit(card)=='spade'&&get.number(card)>1&&get.number(card)<10) player.draw('nodelay'); trigger.player.judging[0]=result.cards[0]; trigger.orderingCards.addArray(result.cards); game.log(trigger.player,'的判定牌改为',result.cards[0]); @@ -7823,7 +8432,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, prompt:"将一张红色牌当杀使用或打出", - check:function(card){return 4-get.value(card)}, + check:function(card){ + var val=get.value(card); + if(_status.event.name=='chooseToRespond') return 1/Math.max(0.1,val); + return 5-val; + }, ai:{ respondSha:true, skillTagFilter:function(player){ @@ -9012,6 +9625,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ "step 0" event.num=trigger.num; + if(get.mode()=='guozhan') event.num=1; "step 1" player.judge(function(card){ if(get.color(card)=='red') return 1; @@ -9051,19 +9665,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ unique:true, juexingji:true, derivation:'gongxin', - trigger:{player:'phaseZhunbeiBegin'}, + trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']}, forced:true, filter:function(event,player){ - if(player.storage.qinxue) return false; - if(player.countCards('h')>=player.hp+3) return true; - if(player.countCards('h')>=player.hp+2&&game.players.length+game.dead.length>=7) return true; + if(player.countCards('h')>=player.hp+2) return true; return false; }, content:function(){ - player.storage.qinxue=true; - player.loseMaxHp(); - player.addSkill('gongxin'); player.awakenSkill('qinxue'); + player.loseMaxHp(); + player.chooseDrawRecover(2,true); + player.addSkill('gongxin'); } }, qingjian:{ @@ -9666,7 +10278,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(hs.length<3) return 0; var bool=false; for(var i=0;i=9&&get.value(hs[i])<7){ + if(get.number(hs[i])>=9&&get.value(hs[i])<7){ bool=true; break; } @@ -10670,12 +11282,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_caocao:'界曹操', re_guojia:'界郭嘉', re_lvbu:'界吕布', - re_xushu:'界徐庶', re_huanggai:'界黄盖', re_daqiao:'界大乔', re_ganning:'界甘宁', re_huatuo:'界华佗', - re_lidian:'李典', re_liubei:'界刘备', re_diaochan:'界貂蝉', @@ -10861,12 +11471,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reyingzi_info:'锁定技,摸牌阶段摸牌时,你额外摸一张牌;你的手牌上限为你的体力上限。', refanjian_info:'出牌阶段限一次,你可以展示一张手牌并将此牌交给一名其他角色。然后该角色选择一项:展示其手牌并弃置所有与此牌花色相同的牌,或失去一点体力。', qingjian_info:'每当你于摸牌阶段外获得牌时,你可以将其中任意牌以任意顺序交给其他角色,每回合最多发动四次', - qinxue_info:'觉醒技,准备阶段开始时,若你的手牌数比体力值多3(人数不少于7时改为2)或更多,你须减一点体力上限并获得技能【攻心】', + qinxue_info:'觉醒技。准备阶段或结束阶段开始时,若你的手牌数减体力值大于1,则你减一点体力上限,回复1点体力或摸两张牌,获得技能【攻心】。', retuxi_info:'摸牌阶段摸牌时,你可以少摸任意张牌,然后选择等量的手牌数大于或等于你的其他角色,获得这些角色的各一张手牌。', reluoyi_info:'你可以跳过摸牌阶段,然后展示牌堆顶的三张牌,获得其中的基本牌、武器牌和【决斗】,若如此做,直到你的下回合开始,你为伤害来源的【杀】或【决斗】造成的伤害+1。', - reganglie_info:'每当你受到1点伤害后,可进行一次判定,若结果为红色,你对伤害来源造成1点伤害,若结果为黑色,你弃置其一张牌。', + reganglie_info:'当你受到1点伤害后,你可进行判定,若结果为:红色,你对伤害来源造成1点伤害,;黑色,你弃置伤害来源一张牌。', + reganglie_info_guozhan:'当你受到伤害后,你可进行判定,若结果为:红色,你对伤害来源造成1点伤害,;黑色,你弃置伤害来源一张牌。', botu:'博图', botu_info:'回合结束时,若你本回合出牌阶段内使用的牌包含四种花色,则你可以进行一个额外回合。', + rebotu:'博图', + rebotu_info:'每轮限X次。结束阶段,若本回合内置入弃牌堆的牌中包含至少四种花色,则你可获得一个额外的回合。(X为存活角色数且至多为3)', xin_yuji:'界于吉', re_zuoci:'界左慈', @@ -10915,7 +11528,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rezhijian_info:'出牌阶段,你可以将手牌中的一张装备牌置于一名其他角色装备区里(不得替换原装备),然后摸一张牌。当你使用装备牌时,你可以摸一张牌。', refangquan:'放权', refangquan_info:'你可跳过你的出牌阶段,若如此做,你本回合的手牌上限为你的体力上限,且回合结束时,你可以弃置一张手牌并令一名其他角色进行一个额外的回合。', - re_gaoshun:'界高顺', + xin_gaoshun:'界高顺', repojun:'破军', repojun2:'破军', repojun3:'破军', @@ -11150,7 +11763,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rebingyi_info:'结束阶段,你可展示所有手牌。若这些牌:颜色均相同,则你可以令至多X名角色各摸一张牌(X为你的手牌数);点数均相同,则你摸一张牌。', re_jiaxu:'界贾诩', rewansha:'完杀', - rewansha_info:'锁定技。①你的回合内,不处于濒死状态的角色不能使用【桃】。②当有角色于你的回合内进入濒死状态时,你令所有其他角色的非锁定技失效直到此濒死状态结算结束。', + rewansha_info:'锁定技。①你的回合内,不处于濒死状态的角色不能使用【桃】。②当有角色于你的回合内进入濒死状态时,你令其以外的所有其他角色的非锁定技失效直到此濒死状态结算结束。', reluanwu:'乱武', reluanwu_info:'限定技,出牌阶段,你可令所有其他角色依次选择一项:①对距离最近(或之一)的角色使用一张【杀】;②失去1点体力。然后你摸X张牌(X为选择①和②的角色数中的最大值)。', reweimu:'帷幕', @@ -11203,6 +11816,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinganlu_info:'出牌阶段限一次。你可以令两名角色交换装备区内的牌,然后若这两名角色装备区内牌数差的绝对值大于你已损失的体力值,则你弃置两张手牌。', xinbuyi:'补益', xinbuyi_info:'一名角色进入濒死状态时,你可展示其一张手牌。若此牌不为基本牌,则其弃置此牌并回复1点体力。若其以此法弃置的牌移动前为其的唯一一张手牌,则其摸一张牌。', + decadexianzhen:'陷阵', + decadexianzhen2:'陷阵', + decadexianzhen_info:'每回合限一次。出牌阶段,你可以和一名其他角色拼点。若你赢:本回合你无视该角色的防具,且对其使用牌没有次数和距离限制,且本回合使用【杀】或普通锦囊牌选择唯一目标后,可以令其也成为此牌的目标,且本回合对其使用牌造成伤害时,此伤害+1(每种牌名每回合限一次);若你没赢:你本回合内不能使用【杀】,且【杀】不计入手牌上限。', + decadejinjiu:'禁酒', + decadejinjiu_info:'锁定技。你的【酒】的牌名均视为【杀】且点数视为K;你的回合内,其他角色不能使用【酒】。', + dc_xushu:'界徐庶', + rezhuhai:'诛害', + rezhuhai_info:'其他角色的回合结束时,若其本回合内造成过伤害,则你可以选择一项:⒈将一张手牌当做【杀】对其使用。⒉视为对其使用一张【过河拆桥】。', + xsqianxin:'潜心', + xsqianxin_info:'觉醒技。当你造成伤害后,若你已受伤,则你减1点体力上限并获得〖荐言〗。', + rejianyan:'荐言', + rejianyan_info:'出牌阶段每项各限一次。你可选择一种颜色或一种牌的类别,然后系统从牌堆中检索出一张满足该条件的牌并展示之。然后你将此牌交给一名男性角色或Key势力角色。', + re_zhanghe:'界张郃', + reqiaobian:'巧变', + reqiaobian_info:'①游戏开始时,你获得两枚“变”。②判定阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段。③摸牌阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段,然后可以获得至多两名其他角色的各一张手牌。④出牌阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段,然后你可以移动场上的一张牌。⑤弃牌阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段。⑥结束阶段,若你的〖巧变⑥〗记录中不包含你的手牌数,则你获得一枚“变”并记录你的手牌数。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/shenhua.js b/character/shenhua.js index bf3350671..7b4c6eceb 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -3558,15 +3558,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var maxnum=0; var cards2=target.getCards('h'); for(var i=0;imaxnum){ - maxnum=cards2[i].number; + if(get.number(cards2[i])>maxnum){ + maxnum=get.number(cards2[i]); } } if(maxnum>10) maxnum=10; if(maxnum<5&&cards2.length>1) maxnum=5; var cards=player.getCards('h'); for(var i=0;i0){ return 10+get.attitude(_status.event.player,target); } - if(player.maxHp-player.hp==1){ + if(player.getDamagedHp()==1){ return -1; } return 1; - }); + }).setHiddenSkill(event.name); "step 1" if(result.bool){ - event.num=player.maxHp-player.hp; - if(player.countCards('e')>=player.hp){ - event.num=player.maxHp; - } - player.logSkill('yinghun',result.targets); + event.num=player.getDamagedHp(); + player.logSkill(event.name,result.targets); event.target=result.targets[0]; if(event.num==1){ event.directcontrol=true; @@ -4656,8 +4651,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var str1='摸'+get.cnNumber(event.num,true)+'弃一'; var str2='摸一弃'+get.cnNumber(event.num,true); player.chooseControl(str1,str2,function(event,player){ + if(player.isHealthy()) return 1-_status.event.choice; return _status.event.choice; - }).set('choice',get.attitude(player,event.target)>0?str1:str2); + }).set('choice',(get.attitude(player,event.target)>0)?0:1); event.str=str1; } } @@ -4666,32 +4662,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } "step 2" if(event.directcontrol||result.control==event.str){ - event.target.draw(event.num); + if(event.num>0) event.target.draw(event.num); event.target.chooseToDiscard(true,'he'); } else{ event.target.draw(); - event.target.chooseToDiscard(event.num,true,'he'); + if(event.num>0) event.target.chooseToDiscard(event.num,true,'he'); } }, - ai:{ - threaten:function(player,target){ - if(target.hp==1||target.countCards('e')>=target.hp) return 2; - if(target.hp==target.maxHp) return 0.5; - if(target.hp==2) return 1.5; - return 0.5; - }, - maixie:true, - effect:{ - target:function(card,player,target){ - if(target.maxHp<=3) return; - if(get.tag(card,'damage')){ - if(target.hp==target.maxHp) return [0,1]; - } - if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; - } - } - } }, gzyinghun:{ audio:'yinghun', @@ -5341,7 +5319,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var mn=1; var hs=player.getCards('h'); for(var i=0;i11&&get.value(cards[i])<7){ + if(cards[i].name!='sha'&&get.number(cards[i])>11&&get.value(cards[i])<7){ return 9; } } @@ -6232,7 +6210,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else event.finish(); "step 3" - if(event.related.cancelled||target.isDead()) return; + //if(event.related.cancelled||target.isDead()) return; if(event.index&&card.isInPile()) target.gain(card,'gain2'); else if(target.getDamagedHp()) target.draw(Math.min(5,target.getDamagedHp())); }, @@ -6546,11 +6524,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var nums=[]; var cards=player.storage.gzbuqu; for(var i=0;i0||player.hasCard(function(card){ + return get.type(card)!='basic'&&lib.filter.cardDiscardable(card,player,'zengou'); + },'eh')) + }, + logTarget:'player', + check:function(event,player){ + if(get.attitude(player,event.player)>=0) return false; + if(get.damageEffect(event.player,event.getParent(3).player,player,get.nature(event.card))<=0) return false; + if(player.hasCard(function(card){ + return get.type(card)!='basic'&&get.value(card)<7&&lib.filter.cardDiscardable(card,player,'zengou'); + },'eh')) return true; + return player.hp>Math.max(1,event.player.hp); + }, + content:function(){ + 'step 0' + trigger.all_excluded=true; + var str='弃置一张非基本牌'; + if(player.hp>0) str+=',或点「取消」失去一点体力'; + var next=player.chooseToDiscard(str,function(card){ + return get.type(card)!='basic'; + },'he').set('ai',function(card){ + return 7-get.value(card); + }); + if(player.hp<=0) next.set('forced',true); + 'step 1' + if(!result.bool) player.loseHp(); + 'step 2' + var cards=trigger.cards.filterInD(); + if(cards.length) player.gain(cards,'gain2'); + }, + }, + qhzhangji:{ + audio:2, + trigger:{global:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + if(!event.player.isIn()) return false; + if(player.getHistory('sourceDamage').length>0) return true; + if(player.getHistory('damage').length>0) return event.player.countCards('he')>0; + return false; + }, + content:function(){ + 'step 0' + event.target=trigger.player; + if(player.getHistory('sourceDamage').length) player.chooseBool(get.prompt('qhzhangji',event.target),'令'+get.translation(event.target)+'摸两张牌').set('choice',get.attitude(player,event.target)>0).set('ai',()=>_status.event.choice); + else event.goto(2); + 'step 1' + if(result.bool){ + player.logSkill('qhzhangji',target); + event.logged=true; + target.draw(2); + } + 'step 2' + if(target.isIn()&&target.countCards('he')>0&&player.getHistory('damage').length>0) player.chooseBool(get.prompt('qhzhangji',event.target),'令'+get.translation(event.target)+'弃置两张牌').set('choice',get.attitude(player,event.target)<0).set('ai',()=>_status.event.choice); + else event.finish(); + 'step 3' + if(result.bool){ + if(!event.logged) player.logSkill('qhzhangji',target); + target.chooseToDiscard('he',true,2); + } + }, + }, //十周年夏侯霸 rebaobian:{ audio:2, @@ -1644,7 +1713,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ intro:{ name:'诏颂(颂)', name2:'颂', - content:'当你使用【杀】选择唯一目标时,你可移去“颂”,并为此【杀】增加至多两个目标。然后若此【杀】造成的伤害小于2,你失去1点体力。', + content:'当你使用【杀】选择唯一目标时,你可移去“颂”,并为此【杀】增加至多两个目标。', }, trigger:{player:'useCard2'}, direct:true, @@ -1668,7 +1737,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(result.bool){ if(player!=event.player&&!player.isOnline()) game.delayx(); - player.addTempSkill('zhaosong_shaloss'); + //player.addTempSkill('zhaosong_shaloss'); } else event.finish(); 'step 2' @@ -1679,7 +1748,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.targets.addArray(targets); trigger.zhaosong_basic=true; }, - }, + },/* shaloss:{ trigger:{player:'useCardAfter'}, forced:true, @@ -1695,13 +1764,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ player.loseHp(); }, - }, + },*/ trick:{ marktext:'诔', intro:{ name:'诏颂(诔)', name2:'诔', - content:'当你进入濒死状态时,你可移去“诔”并减1点体力上限,然后将体力回复至1点并摸一张牌。', + content:'当你进入濒死状态时,你可移去“诔”,然后将体力回复至1点并摸一张牌。', }, trigger:{player:'dying'}, prompt:'是否弃置“诔”标记?', @@ -1724,11 +1793,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return true; }, content:function(){ - 'step 0' player.removeMark('zhaosong_trick',1); player.removeSkill('zhaosong_trick'); - player.loseMaxHp(); - 'step 1' + //player.loseMaxHp(); if(player.hp<1) player.recover(1-player.hp); player.draw(); }, @@ -1738,7 +1805,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ intro:{ name:'诏颂(赋)', name2:'赋', - content:'出牌阶段开始时,你可移去“赋”并弃置一名角色区域内的一张牌,然后可以令其摸一张牌。', + content:'出牌阶段开始时,你可移去“赋”并弃置一名角色区域内的至多两张牌,然后可以令其摸一张牌。', }, trigger:{player:'phaseUseBegin'}, direct:true, @@ -1753,7 +1820,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - player.chooseTarget('是否弃置“赋”标记?','弃置一名角色区域内的一张牌,然后可以令其摸一张牌',function(card,player,current){ + player.chooseTarget('是否弃置“赋”标记?','弃置一名角色区域内的至多两张牌,然后可以令其摸一张牌',function(card,player,current){ return current.hasCard(function(card){ return lib.filter.canBeDiscarded(card,player,current); },'hej'); @@ -1768,7 +1835,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('zhaosong_equip',target); player.removeMark('zhaosong_equip',1); player.removeSkill('zhaosong_equip'); - player.discardPlayerCard(target,true,'hej'); + player.discardPlayerCard(target,true,'hej',[1,2]); } else event.finish(); 'step 2' @@ -3709,64 +3776,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', audio:'mouzhu', usable:1, - chooseButton:{ - dialog:function(event,player){ - var list=[ - '选择距离为1的角色', - '选择体力值等于你的角色', - ]; - var choiceList=ui.create.dialog('谋诛:请选择一项','forcebutton','hidden'); - for(var i=0;ilib.skill.spmouzhu.filterTarget(null,player,current)); }, - ai:{ - order:7, - result:{ - player:1, - }, - }, - }, - spmouzhux:{ - audio:'mouzhu', filterTarget:function(card,player,target){ - return lib.skill.spmouzhux.filterTargets[lib.skill.spmouzhu_backup.link](card,player,target); + return player!=target&&(target.hp==player.hp||get.distance(player,target)==1); }, - filterTargets:[ - function(card,player,target){ - return player!=target&&get.distance(player,target)<=1; - }, - function(card,player,target){ - return player!=target&&player.hp==target.hp; - } - ], - selectTarget:-1, + selectTarget:[1,Infinity], content:function(){ 'step 0' if(!target.countCards('he')) event.finish(); @@ -3794,6 +3810,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ result:{ target:-1.2, player:function(player,target){ + if(ui.selected.targets.length) return 0; if(target.countCards('h')-player.countCards('h')>1) return 1; if(get.damageEffect(target,player,player,player)>0) return 1; if(player.hp>3||player.countCards('h','sha')&&player.countCards('h','shan')) return 0; @@ -3803,6 +3820,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, + spyanhuo:{ + audio:'yanhuo', + trigger:{player:'die'}, + forceDie:true, + skillAnimation:true, + animationColor:'soil', + content:function(){ + player.line(game.players,'green'); + game.addGlobalSkill('spyanhuo_damage'); + if(!_status.yanhuo) _status.yanhuo=0; + _status.yanhuo++; + }, + subSkill:{ + damage:{ + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + return event.card.name=='sha'; + }, + content:function(){ + trigger.baseDamage+=(_status.yanhuo||0); + }, + }, + }, + }, spniluan:{ enable:'phaseUse', audio:'niluan', @@ -6993,7 +7035,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } else{ - trigger.cancel(); + player.addTempSkill('zishou2'); event.finish(); } 'step 3' @@ -10365,8 +10407,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, mod:{ - attackFrom:function(from,to,distance){ - return distance-from.getExpansions('fentian').length; + attackRange:function(from,distance){ + return distance+from.getExpansions('fentian').length; } } }, @@ -10787,7 +10829,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var card=get.cardPile(function(card){ return get.type(card,'trick')=='trick'; }); - if(card) player.gain(card,'gain2').gaintag.add('qirang'); + if(card){ + var next=player.gain(card,'gain2'); + if(get.type(card)=='trick') next.gaintag.add('qirang'); + else{ + player.addMark('qirang_mark',1,false); + player.addTempSkill('qirang_mark',{player:'phaseBegin'}); + } + } }, ai:{ effect:{ @@ -10799,6 +10848,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, group:'qirang_use', subSkill:{ + mark:{ + charlotte:true, + onremove:function(player){ + var evt=_status.event; + if(evt.name!='phase') evt=evt.getParent('phase'); + if(evt&&evt.player==player){ + if(!evt.qirang_num) evt.qirang_num=0; + evt.qirang_num+=player.storage.qirang_mark; + } + delete player.storage.qirang_mark; + }, + intro:{ + content:'下回合发动〖羽化〗时卜算量+#', + }, + }, use:{ audio:'qirang', trigger:{player:'useCard2'}, @@ -10854,23 +10918,73 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, yuhua:{ - trigger:{player:'phaseJieshuBegin'}, + trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']}, forced:true, locked:false, audio:2, - filter:function(event,player){ - return player.countCards('h')>player.maxHp; - }, content:function(){ - 'step 0' - var cards=get.cards(); + "step 0" + var num=1,evt=trigger.getParent(); + if(evt.qirang_num) num+=evt.qirang_num; + var cards=get.cards(Math.min(5,num)); game.cardsGotoOrdering(cards); - event.card=cards[0]; - player.chooseControl('牌堆顶','牌堆底').set('dialog',['羽化:牌堆顶的一张牌',cards]); - 'step 1' - if(result.control=='牌堆顶') ui.cardPile.insertBefore(card,ui.cardPile.firstChild); - else ui.cardPile.appendChild(card); + var next=player.chooseToMove(); + next.set('list',[ + ['牌堆顶',cards], + ['牌堆底'], + ]); + next.set('prompt','羽化:点击将牌移动到牌堆顶或牌堆底'); + next.processAI=function(list){ + var cards=list[0][1],player=_status.event.player; + var target=(_status.event.getTrigger().name=='phaseZhunbei')?player:player.next; + var att=get.sgn(get.attitude(player,target)); + var top=[]; + var judges=target.getCards('j'); + var stopped=false; + if(player!=target||!target.hasWuxie()){ + for(var i=0;i0)) break; + top.unshift(cards.shift()); + } + } + bottom=cards; + return [top,bottom]; + } + "step 1" + var top=result.moved[0]; + var bottom=result.moved[1]; + top.reverse(); + for(var i=0;i锦囊牌:“诔”标记。当拥有者进入濒死状态时,其可弃置所有“诔”,减1点体力上限,将体力回复至1点并摸1张牌。
    装备牌:“赋”标记。拥有者的出牌阶段开始时,其可弃置所有“赋”,弃置一名角色区域内的一张牌,然后可令其摸一张牌。
    基本牌:“颂”标记。当使用者使用仅指定一个目标的【杀】时,其可弃置“颂”,为此【杀】增加至多两个目标。然后若此【杀】造成的伤害小于2,其失去1点体力。', + zhaosong_info:'一名其他角色的摸牌阶段结束时,若其没有因〖诏颂〗而获得的标记,则你可令其正面向上交给你一张手牌。根据此牌的类型,该角色获得对应的标记和效果:
    锦囊牌:“诔”标记。当拥有者进入濒死状态时,其可弃置所有“诔”,将体力回复至1点并摸1张牌。
    装备牌:“赋”标记。拥有者的出牌阶段开始时,其可弃置所有“赋”,弃置一名角色区域内的至多两张牌,然后可令其摸一张牌。
    基本牌:“颂”标记。当使用者使用仅指定一个目标的【杀】时,其可弃置“颂”,为此【杀】增加至多两个目标。', lisi:'离思', lisi_info:'每当你于回合外使用牌的置入弃牌堆时,你可将其交给一名手牌数不大于你的其他角色。', ol_yangyi:'杨仪', @@ -16812,6 +16929,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yuanchou_info:'锁定技。当你使用黑色【杀】指定目标角色后或成为黑色【杀】的目标角色后,你令目标角色的防具技能无效直到此【杀】被抵消或造成伤害。', juesheng:'决生', juesheng_info:'限定技。出牌阶段,你可视为使用一张【决斗】。当你因此【决斗】造成伤害时,你将伤害值改为X(X为目标角色本局游戏内使用过【杀】的数量)且令目标角色获得此技能直到其下回合结束。', + qinghegongzhu:'清河公主', + zengou:'谮构', + zengou_info:'当有角色使用【闪】时,若其在你的攻击范围内,则你可以弃置一张非基本牌或失去1点体力,然后取消此【闪】的目标并获得其对应的实体牌。', + qhzhangji:'长姬', + qhzhangji_info:'一名角色的回合结束时,若你本回合内:造成过伤害,则你可以令其摸两张牌;受到过伤害,则你可以令其弃置两张牌。', sp_tianji:'天极·皇室宗亲', sp_sibi:'四弼·辅国文曲', diff --git a/character/sp2.js b/character/sp2.js index cfd5d1554..22836e7d4 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -62,7 +62,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_dingyuan:['male','qun',4,['cixiao','xianshuai']], liubian:['male','qun',3,['shiyuan','dushi','yuwei'],['zhu']], xin_baosanniang:['female','shu',3,['decadewuniang','decadexushen']], - re_hejin:['male','qun',4,['spmouzhu']], + re_hejin:['male','qun',4,['spmouzhu','spyanhuo']], re_hansui:['male','qun',4,['spniluan','spweiwu']], liuhong:['male','qun',4,['yujue','tuxing']], zhujun:['male','qun',4,['gongjian','kuimang']], @@ -120,17 +120,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_shengun:["puyuan","guanlu","gexuan","xushao"], sp_baigei:['re_panfeng','xingdaorong','caoxing','re_chunyuqiong','xiahoujie'], sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou","xinping","hanmeng"], - sp_caizijiaren:['re_dongbai','re_sunluyu','huaxin','luyusheng','re_xunchen','heyan','zhaoyan'], - sp_huangjin:['liuhong','zhujun','re_hansui'], + sp_caizijiaren:['re_dongbai','re_sunluyu','huaxin','luyusheng','re_xunchen','heyan','zhaoyan','wangtao','wangyue','re_miheng','fengxi','re_dengzhi'], sp_qihuan:['liubian','zhaozhong','re_hejin'], + sp_binglin:['re_niujin',"sp_mifangfushiren"], + sp_zhilan:['liuyong','wanniangongzhu','zhanghu','lvlingqi'], + sp_fenghuo:['re_nanhualaoxian','tongyuan','zhangning','re_pangdegong'], + sp_guixin:['re_kanze','re_chendeng'], + sp_huangjin:['liuhong','zhujun','re_hansui'], sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], sp_xuzhou:['re_taoqian','caosong','zhangmiao','qiuliju'], sp_zhongyuan:['re_hucheer','re_zoushi','caoanmin','re_dongcheng'], - sp_binglin:['re_niujin',"sp_mifangfushiren"], - sp_zhilan:['liuyong','wanniangongzhu','zhanghu'], - sp_fenghuo:['re_nanhualaoxian','tongyuan','zhangning'], - sp_guixin:['re_kanze','re_chendeng'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_dongzhao','yangwan','re_panshu','dufuren','zhouyi','lvlingqi','caojinyu','wangtao','wangyue','re_pangdegong','re_sunyi','re_miheng','fengxi','re_dengzhi','re_zhangbao'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_dongzhao','yangwan','re_panshu','dufuren','zhouyi','caojinyu','re_sunyi','re_zhangbao'], } }, skill:{ @@ -246,11 +246,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ boyan:{ enable:'phaseUse', usable:1, - filter:function(event,player){ - return game.hasPlayer((target)=>lib.skill.boyan.filterTarget(null,player,target)); - }, filterTarget:function(card,player,target){ - return target!=player&&target.countCards('h')0) return Math.max(0,Math.min(5,target.maxHp)-target.countCards('h')); - if(target.maxHp-target.countCards('h')==1&&target.countCards('h','shan')&&!target.hasSkillTag('respondShan',true,null,true)&&player.countCards('h',function(card){ + if(Math.max(0,Math.min(5,target.maxHp)-target.countCards('h'))<=1&&target.countCards('h','shan')&&!target.hasSkillTag('respondShan',true,null,true)&&player.countCards('h',function(card){ return get.tag(card,'respondShan')&&player.getUseValue(card,null,true)>0&&get.effect(target,card,player,player)>0; })) return -2; }, @@ -291,8 +288,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return !player.getHistory('useCard').length||!player.getHistory('sourceDamage').length; }, content:function(){ - if(!player.getHistory('useCard').length) player.addTempSkill('rekuangcai_more'); - else player.addTempSkill('rekuangcai_less'); + lib.skill.rekuangcai.change(player,player.getHistory('useCard').length?-1:1); }, mod:{ targetInRange:function(card,player){ @@ -302,6 +298,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player==_status.currentPhase) return Infinity; }, }, + change:function(player,num){ + if(typeof player.storage.rekuangcai_change!='number') player.storage.rekuangcai_change=0; + player.storage.rekuangcai_change+=num; + player.addSkill('rekuangcai_change'); + }, group:'rekuangcai_draw', subSkill:{ draw:{ @@ -315,21 +316,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.draw(Math.min(5,player.getStat('damage'))); }, }, - less:{ + change:{ mod:{ maxHandcard:function(player,num){ - return num-1; + if(typeof player.storage.rekuangcai_change=='number') return num+player.storage.rekuangcai_change; }, }, charlotte:true, - }, - more:{ - mod:{ - maxHandcard:function(player,num){ - return num+1; - }, + mark:true, + intro:{ + content:(num)=>('手牌上限'+(num<0?'':'+')+num), }, - charlotte:true, }, }, }, @@ -1478,8 +1475,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ charlotte:true, onremove:true, mod:{ - attackFrom:function(player,target,num){ - return num-player.countMark('zhenge_effect'); + attackRange:function(player,num){ + return num+player.countMark('zhenge_effect'); }, }, intro:{content:'攻击范围+#'}, @@ -2750,6 +2747,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var targets=result.targets.sortBySeat(); player.logSkill('guowu_add',targets); trigger.targets.addArray(targets); + if(get.mode()=='guozhan') player.removeSkill('guowu_add'); }, }, }, @@ -8519,12 +8517,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, locked:false, filter:function(event,player){ - return !game.hasPlayer(function(current){ - return current.maxHpplayer.maxHp; }); }, content:function(){ player.gainMaxHp(); + player.chooseDrawRecover(2,true); }, }, //新潘凤 @@ -12600,6 +12599,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunyi:['re_sunyi','sunyi'], tw_liuhong:['tw_liuhong','liuhong'], miheng:['miheng','re_miheng'], + re_hejin:['re_hejin','tw_hejin'], }, translate:{ lijue:"李傕", @@ -12814,7 +12814,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinkuangfu_info:'出牌阶段限一次,你可选择:1,弃置装备区里的一张牌,你使用无对应实体牌的普【杀】。若此【杀】造成伤害,你摸两张牌。2,弃置一名其他角色装备区里的一张牌,你使用无对应实体牌的普【杀】。若此【杀】未造成伤害,你弃置两张手牌。', xingdaorong:'邢道荣', xuxie:'虚猲', - xuxie_info:'出牌阶段开始时,你可以减1点体力上限并选择所有与你距离为1的角色,弃置这些角色的各一张牌或令这些角色各摸一张牌。出牌阶段结束时,若你的体力上限为全场最少,则你加1点体力上限。', + xuxie_info:'出牌阶段开始时,你可以减1点体力上限并选择所有与你距离为1的角色,弃置这些角色的各一张牌或令这些角色各摸一张牌。出牌阶段结束时,若你的体力上限不为全场最多,则你加1点体力上限,然后回复1点体力或摸两张牌。', huaman:'花鬘', hmmanyi:'蛮裔', hmmanyi_info:'锁定技,【南蛮入侵】对你无效。', @@ -13074,7 +13074,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ qingtan_info:'出牌阶段限一次,你可令所有有手牌的角色同时选择一张手牌并同时展示。你可以获得其中一种花色的牌,然后展示此花色牌的角色各摸一张牌。若如此做,弃置其他的牌。', qiuliju:'丘力居', koulve:'寇略', - koulve_info:'当你于出牌阶段内对其他角色造成伤害后,你可以展示其X张手牌(X为其已损失的早)。若这些牌中:有带有伤害标签的基本牌或锦囊牌,则你获得之;有红色牌,则你失去1点体力(若已受伤则改为减1点体力上限),然后摸两张牌。', + koulve_info:'当你于出牌阶段内对其他角色造成伤害后,你可以展示其X张手牌(X为其已损失的体力值)。若这些牌中:有带有伤害标签的基本牌或锦囊牌,则你获得之;有红色牌,则你失去1点体力(若已受伤则改为减1点体力上限),然后摸两张牌。', qljsuiren:'随认', qljsuiren_info:'当你死亡时,你可以将手牌中所有的带有伤害标签的基本牌或锦囊牌交给一名其他角色。', re_dongbai:'董白', @@ -13125,6 +13125,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lvlingqi:'吕玲绮', guowu:'帼舞', guowu_info:'出牌阶段开始时,你可以展示全部手牌,根据你展示的类型数,你获得对应效果:至少一类,从弃牌堆获得一张【杀】;至少两类,此阶段使用牌无距离限制;至少三类,此阶段使用【杀】或普通锦囊牌可以多指定两个目标。', + guowu_info_guozhan:'出牌阶段开始时,你可以展示全部手牌,根据你展示的类型数,你获得对应效果:至少一类,从弃牌堆获得一张【杀】;至少两类,此阶段使用牌无距离限制;至少三类,此阶段使用【杀】或普通锦囊牌可以多指定两个目标(限一次)。', zhuangrong:'妆戎', zhuangrong_info:'觉醒技,一名角色的回合结束时,若你的体力值或手牌数为1,你减1点体力上限并回复体力至上限,将手牌摸至体力上限,然后获得〖神威〗和〖无双〗。', llqshenwei:'神威', @@ -13248,14 +13249,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinyingbing_info:'锁定技。每回合每名角色限一次,当你使用牌指定有“咒”的角色为目标后,你摸两张牌。', re_miheng:'祢衡', rekuangcai:'狂才', - rekuangcai_info:'锁定技。①你于回合内使用牌无距离和次数限制。②弃牌阶段开始时,若你本回合内:未使用过牌,则你本回合的手牌上限+1;使用过牌但未造成过伤害,则你本回合的手牌上限-1。③结束阶段开始时,你摸X张牌(X为你本回合内造成的伤害且至多为5)。', + rekuangcai_info:'锁定技。①你于回合内使用牌无距离和次数限制。②弃牌阶段开始时,若你本回合内:未使用过牌,则你本局游戏的手牌上限+1;使用过牌但未造成过伤害,则你本局游戏的手牌上限-1。③结束阶段开始时,你摸X张牌(X为你本回合内造成的伤害且至多为5)。', reshejian:'舌箭', reshejian_info:'当你成为其他角色使用牌的唯一目标后,你可以弃置至少两张手牌。若如此做,你选择一项:⒈弃置其等量的牌。⒉对其造成1点伤害。', fengxi:'冯熙', yusui:'玉碎', yusui_info:'当你成为其他角色使用黑色牌的目标后,你可以失去1点体力,然后选择一项:⒈令其将手牌数弃置至与你相同;⒉令其失去Y点体力(Y为其的体力值减去你的体力值,不为正时不可选择)', boyan:'驳言', - boyan_info:'出牌阶段限一次,你可令一名其他角色将手牌摸至体力上限(至多摸至五张),然后其本回合不能使用或打出手牌。', + boyan_info:'出牌阶段限一次,你可选择一名其他角色。其将手牌摸至体力上限(至多摸至五张),然后其本回合不能使用或打出手牌。', re_dengzhi:'邓芝', jianliang:'简亮', jianliang_info:'摸牌阶段开始时,若你的手牌数不为全场最多,则你可以令至多两名角色各摸一张牌。', @@ -13270,13 +13271,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_shengun:'三国奇人传', sp_baigei:'无双上将', sp_guandu:'官渡之战', - sp_huangjin:'黄巾之乱', - sp_fadong:'诸侯伐董', - sp_xuzhou:'徐州风云', + sp_huangjin:'列传·黄巾之乱', + sp_fadong:'列传·诸侯伐董', + sp_xuzhou:'列传·徐州风云', sp_caizijiaren:'才子佳人', sp_qihuan:'戚宦之争', - sp_zhongyuan:'中原狼烟', + sp_zhongyuan:'列传·中原狼烟', sp_binglin:'兵临城下', + sp_beige:'列传·虓虎悲歌', sp_yinyu:'隐玉包', sp_zhilan:'芝兰玉树', sp_fenghuo:'烽火连天', diff --git a/character/standard.js b/character/standard.js index 094d063da..2165a3f65 100755 --- a/character/standard.js +++ b/character/standard.js @@ -5,12 +5,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ standard:{ - standard_2008:["caocao","simayi","xiahoudun","zhangliao","xuzhu","guojia","zhenji","liubei","guanyu","zhangfei","zhugeliang","zhaoyun","machao","huangyueying","sunquan","ganning","lvmeng","huanggai","zhouyu","daqiao","luxun","sunshangxiang","huatuo","lvbu","diaochan",], - standard_2013:["huaxiong","re_yuanshu"], + standard_2008:["caocao","simayi","xiahoudun","zhangliao","xuzhu","guojia","zhenji","liubei","guanyu","zhangfei","zhugeliang","zhaoyun","machao","huangyueying","sunquan","ganning","lvmeng","huanggai","zhouyu","daqiao","luxun","sunshangxiang","huatuo","lvbu","diaochan","re_lidian"], + standard_2013:["huaxiong","re_yuanshu","re_xushu"], standard_2019:["gongsunzan","xf_yiji"], }, }, character:{ + re_lidian:['male','wei',3,['xunxun','wangxi']], + re_xushu:['male','shu',4,['zhuhai','qianxin']], caocao:['male','wei',4,['jianxiong','hujia'],['zhu']], simayi:['male','wei',3,['fankui','guicai']], xiahoudun:['male','wei',4,['ganglie']], @@ -993,7 +995,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, prompt:'将一张红色牌当杀使用或打出', - check:function(card){return 4-get.value(card)}, + check:function(card){ + var val=get.value(card); + if(_status.event.name=='chooseToRespond') return 1/Math.max(0.1,val); + return 5-val; + }, ai:{ skillTagFilter:function(player){ if(get.zhu(player,'shouyue')){ @@ -2625,6 +2631,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rewangzun_info:'锁定技,一名其他角色的准备阶段开始时,若其体力值大于你,你摸一张牌。然后若其身份为主公/主帅/君主/地主且明置,则你摸一张牌,且其本回合的手牌上限-1。', retongji:'同疾', retongji_info:'攻击范围内包含你的角色成为【杀】的目标时,若你不是此【杀】的使用者或目标,其可弃置一张牌,然后将此【杀】转移给你。', + re_xushu:'徐庶', + re_lidian:'李典', standard_2008:"2008版标准包", standard_2013:"2013版标准包", diff --git a/character/tw.js b/character/tw.js index 5be81b2d8..2ee45129b 100644 --- a/character/tw.js +++ b/character/tw.js @@ -1265,6 +1265,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', usable:1, locked:false, + limited:true, skillAnimation:true, animationColor:'fire', filter:function(event,player){ @@ -2103,13 +2104,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, twqueshi:{ trigger:{ - global:'gameDrawAfter', + global:'phaseBefore', player:'enterGame', }, forced:true, locked:false, filter:function(event,player){ - return !player.isDisabled(1); + return (event.name!='phase'||game.phaseNumber==0)&&!player.isDisabled(1); }, content:function(){ if(!lib.inpile.contains('meiyingqiang')){ @@ -2319,7 +2320,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:'loseHpAfter'}, forced:true, filter:function(event,player){ - return player!=event.player&&player.hp>=event.player.hp||player.isDamaged(); + return player!=event.player&&(player.hp>=event.player.hp||player.isDamaged()); }, logTarget:'player', content:function(){ @@ -2413,9 +2414,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twmiaolve:{ audio:2, trigger:{ - global:'gameDrawAfter', + global:'phaseBefore', player:'enterGame', }, + filter:function(event,player){ + return event.name!='phase'||game.phaseNumber==0; + }, forced:true, locked:false, content:function(){ @@ -2827,13 +2831,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twsidao:{ audio:2, trigger:{ - global:'gameDrawAfter', + global:'phaseBefore', player:'enterGame', }, forced:true, locked:false, filter:function(event,player){ - return !player.storage.twsidao; + return (event.name!='phase'||game.phaseNumber==0)&&!player.storage.twsidao; }, content:function(){ 'step 0' @@ -3363,10 +3367,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chijie:{ audio:true, forbid:['guozhan'], - trigger:{global:'gameDrawAfter'}, + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, direct:true, filter:function(event,player){ - return game.hasPlayer(function(current){ + return (event.name!='phase'||game.phaseNumber==0)&&game.hasPlayer(function(current){ return current.group!=player.group; }); }, @@ -3545,7 +3552,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twlihuo3:'疠火', twlihuo_info:'①当你声明使用普【杀】时,你可以将此【杀】改为火【杀】。此牌使用结算结束后,若有角色因此【杀】造成的伤害进入过濒死状态,则你失去1点体力。②当你使用火【杀】选择目标后,你可为此牌增加一个目标。', twchunlao:'醇醪', - twchunlao_info:'①准备阶段,若场上没有“醇”,则你可将一名角色区域内的一张牌置于其武将牌上,称为“醇”。②一名角色使用【杀】时,若其有“醇”,则你可以交给你一张牌,令此【杀】的伤害值基数+1。③一名角色进入濒死状态时,若其有“醇”,则你可以移去“醇”并摸一张牌,然后令其回复1点体力。', + twchunlao_info:'①准备阶段,若场上没有“醇”,则你可将一名角色区域内的一张牌置于其武将牌上,称为“醇”。②一名角色使用【杀】时,若其有“醇”,则其可以交给你一张牌,令此【杀】的伤害值基数+1。③一名角色进入濒死状态时,若其有“醇”,则你可以移去“醇”并摸一张牌,然后令其回复1点体力。', tw_mobile:'移动版·海外服', tw_mobile2:'海外服异构', diff --git a/character/yijiang.js b/character/yijiang.js index 524d8f960..19edb3e28 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -2283,7 +2283,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ card:arg.card }))) return true; return player.countCards('h',function(card){ - return card!=arg.card&&(!arg.card.cards||!arg.card.cards.contains(card))&&get.value(card)<=4&&(card.number>=(11+arg.target.countCards('h')/2)||get.suit(card,player)=='heart'); + return card!=arg.card&&(!arg.card.cards||!arg.card.cards.contains(card))&&get.value(card)<=4&&(get.number(card)>=(11+arg.target.countCards('h')/2)||get.suit(card,player)=='heart'); })>0; }(); delete player._zhuandui_temp; @@ -2303,7 +2303,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var player=_status.event.player; return (!player.hasCard(function(card){ var val=get.value(card); - return val<0||(val<=4&&(card.number>=11||get.suit(card)=='heart')); + return val<0||(val<=4&&(get.number(card)>=11||get.suit(card)=='heart')); },'h'))?20:0; }, filter:function(event){ @@ -4479,7 +4479,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var type=get.type(i,false); if(type=='basic'||type=='trick'){ var card={name:i,storage:{ - nowuxie:true,jiaozhao:player, + jiaozhao:player, }}; if(event.filterCard(card,player,event)) list.push([type,'',i]); if(i=='sha'){ @@ -4498,7 +4498,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:button.link[2], nature:button.link[3], storage:{ - nowuxie:true, jiaozhao:player, } }; @@ -4514,7 +4513,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:links[0][2], nature:links[0][3], storage:{ - nowuxie:true, jiaozhao:player, }, }, @@ -5374,7 +5372,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ logTarget:function(event,player){ return player.storage.xinxianzhen; }, - prompt2:'令该角色也成为此牌的目标', + prompt2:(event,player)=>('令'+get.translation(player.storage.decadexianzhen2)+'也成为'+get.translation(event.card)+'的目标'), content:function(){ var target=player.storage.xinxianzhen; trigger.targets.push(target); @@ -5428,7 +5426,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 1; } for(var i=0;i11&&get.value(cards[i])<7){ + if(cards[i].name!='sha'&&get.number(cards[i])>11&&get.value(cards[i])<7){ return 9; } } @@ -6829,11 +6827,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.finish(); return; } - if(event.card2.number>=10||event.card2.number<=4){ - if(target.countCards('h')>2){ - event.addToAI=true; - } - } game.broadcastAll(function(card1,card2){ card1.classList.remove('glow'); card2.classList.remove('glow'); @@ -8586,10 +8579,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var val=get.value(card) if(nd&&val<0) return true; if(val<=5){ - return card.number>=12; + return get.number(card)>=12; } if(val<=6){ - return card.number>=13; + return get.number(card)>=13; } return false; })) return -1; @@ -9482,7 +9475,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ for(var i=0;i9&&useful<7) return true; + if(get.number(cards[i])>9&&useful<7) return true; } } return false; @@ -9675,8 +9668,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, gongji2:{ mod:{ - attackFrom:function(){ - return -Infinity; + attackRangeBase:function(){ + return Infinity; }, }, }, @@ -11799,7 +11792,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ aiOrder:function(player,card,num){ if(typeof card=='object'&&player.isPhaseUsing()){ var evt=player.getLastUsed(); - if(evt&&evt.card&&(get.suit(evt.card)&&get.suit(evt.card)==get.suit(card)||evt.card.number&&evt.card.number==card.number)){ + if(evt&&evt.card&&(get.suit(evt.card)&&get.suit(evt.card)==get.suit(card)||evt.card.number&&evt.card.number==get.number(card))){ return num+10; } } @@ -11813,8 +11806,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!player.isPhaseUsing()) return false; var evt2=evt.getParent('phaseUse'); if(!evt2||evt2.name!='phaseUse'||evt2.player!=player) return false; - return get.suit(evt.card)&&get.suit(evt.card)==get.suit(event.card)|| - evt.card.number&&evt.card.number==event.card.number; + return get.suit(evt.card)!='none'&&get.suit(evt.card)==get.suit(event.card)|| + typeof get.number(evt.card,false)=='number'&&get.number(evt.card,false)==get.number(event.card); }, content:function(){ player.draw(); @@ -12053,13 +12046,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caozhi:['re_caozhi','caozhi'], zhangchunhua:['re_zhangchunhua','zhangchunhua','mini_zhangchunhua'], yujin:['yujin_yujin','ol_yujin','xin_yujin','yujin'], - xushu:['re_xushu','xin_xushu','xushu'], + dc_xushu:['dc_xushu','re_xushu'], + xushu:['xin_xushu','xushu'], fazheng:['re_fazheng','xin_fazheng','fazheng'], masu:['xin_masu','re_masu','masu'], xusheng:['xin_xusheng','re_xusheng','xusheng','old_xusheng'], wuguotai:['xin_wuguotai','re_wuguotai','wuguotai'], lingtong:['xin_lingtong','re_lingtong','lingtong','old_lingtong'], - gaoshun:['gaoshun','re_gaoshun'], + gaoshun:['xin_gaoshun','re_gaoshun','gaoshun'], zhonghui:['re_zhonghui','xin_zhonghui','zhonghui','old_zhonghui'], wangyi:['re_wangyi','wangyi','old_wangyi'], caozhang:['re_caozhang','xin_caozhang','caozhang'], diff --git a/character/yingbian.js b/character/yingbian.js index 685c666fa..d17d7ac47 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'yingbian', connect:true, character:{ + jin_yanghu:['male','jin',4,['huaiyuan','chongxin','dezhang']], xuangongzhu:['female','jin',3,['gaoling','qimei','ybzhuiji'],['hiddenSkill']], xinchang:['male','jin',3,['canmou','congjian']], yangzhi:['female','jin',3,['wanyi','maihuo']], @@ -29,12 +30,277 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yingbian:{ yingbian_pack1:['jin_simayi','jin_zhangchunhua','ol_lisu','simazhou','cheliji','ol_huaxin'], yingbian_pack2:['jin_simashi','jin_xiahouhui','zhanghuyuechen','shibao','jin_yanghuiyu'], - yingbian_pack3:['jin_simazhao','jin_wangyuanji','duyu','weiguan','xuangongzhu'], + yingbian_pack3:['jin_simazhao','jin_wangyuanji','duyu','weiguan','xuangongzhu','jin_yanghu'], yingbian_pack4:['zhongyan','xinchang'], yingbian_pack5:['yangyan','yangzhi'], }, }, skill:{ + huaiyuan:{ + audio:2, + trigger:{ + player:'loseAfter', + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], + }, + filter:function(event,player){ + var evt=event.getl(player); + if(!evt||!evt.hs||!evt.hs.length) return false; + if(event.name=='lose'){ + for(var i in event.gaintag_map){ + if(event.gaintag_map[i].contains('huaiyuanx')) return true; + } + return false; + } + return player.hasHistory('lose',function(evt){ + if(event!=evt.getParent()) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('huaiyuanx')) return true; + } + return false; + }); + }, + forced:true, + content:function(){ + 'step 0' + var num=0; + if(trigger.name=='lose'){ + for(var i in trigger.gaintag_map){ + if(trigger.gaintag_map[i].contains('huaiyuanx')) num++; + }; + } + else player.getHistory('lose',function(evt){ + if(trigger!=evt.getParent()) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('huaiyuanx')) num++; + } + return false; + }); + event.count=num; + 'step 1' + event.count--; + player.chooseTarget(true,'请选择【怀远】的目标','令一名角色执行一项:⒈其的手牌上限+1。⒉其的攻击范围+1。⒊其摸一张牌。').set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(att<=0) return 0; + if(target.hasValueTarget({name:'sha'},false)&&!target.hasValueTarget({name:'sha'})) att*=2.2; + if(target.needsToDiscard()) att*=1.3; + return att*Math.sqrt(Math.max(1,4-target.countCards('h'))); + }); + 'step 2' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.line(target,'green'); + var str=get.translation(target) + player.chooseControl().set('choiceList',[ + '令'+str+'的手牌上限+1', + '令'+str+'的攻击范围+1', + '令'+str+'摸一张牌', + ]).set('ai',function(){ + var player=_status.event.player,target=_status.event.getParent().target;if(target.hasValueTarget({name:'sha'},false)&&!target.hasValueTarget({name:'sha'})) return 1; + if(target.needsToDiscard()) return 0; + return 2; + }); + } + else event.finish(); + 'step 3' + if(result.index==2) target.draw(); + else{ + target.addSkill('huaiyuan_effect'+result.index); + target.addMark('huaiyuan_effect'+result.index,1,false); + game.log(target,'的','#g'+['手牌上限','攻击范围'][result.index],'+1') + game.delayx(); + } + if(event.count>0) event.goto(1); + }, + group:['huaiyuan_init','huaiyuan_die'], + subSkill:{ + init:{ + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, + forced:true, + locked:false, + filter:function(event,player){ + return (event.name!='phase'||game.phaseNumber==0)&&player.countCards('h')>0; + }, + content:function(){ + var hs=player.getCards('h'); + if(hs.length) player.addGaintag(hs,'huaiyuanx'); + }, + }, + die:{ + trigger:{player:'die'}, + direct:true, + forceDie:true, + skillAnimation:true, + animationColor:'water', + filter:function(event,player){ + return player.hasMark('huaiyuan_effect0')||player.hasMark('huaiyuan_effect1'); + }, + content:function(){ + 'step 0' + var str='令一名其他角色',num1=player.countMark('huaiyuan_effect0'),num2=player.countMark('huaiyuan_effect1'); + if(num1>0){ + str+='手牌上限+'; + str+=num1; + if(num2>0) str+='且'; + } + if(num2>0){ + str+='攻击范围+'; + str+=num2; + } + player.chooseTarget(lib.filter.notMe,get.prompt('huaiyuan'),str).set('forceDie',true).set('ai',function(target){ + return get.attitude(_status.event.player,target)+114514; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('huaiyuan_die',target); + var num1=player.countMark('huaiyuan_effect0'),num2=player.countMark('huaiyuan_effect1'); + if(num1>0){ + target.addSkill('huaiyuan_effect0'); + target.addMark('huaiyuan_effect0',num1,false); + } + if(num2>0){ + target.addSkill('huaiyuan_effect1'); + target.addMark('huaiyuan_effect1',num1,false); + } + game.delayx(); + } + }, + }, + effect0:{ + charlotte:true, + onremove:true, + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('huaiyuan_effect0'); + }, + }, + marktext:'怀', + intro:{content:'手牌上限+#'}, + }, + effect1:{ + charlotte:true, + onremove:true, + mod:{ + attackRange:function(player,num){ + return num+player.countMark('huaiyuan_effect1'); + }, + }, + marktext:'远', + intro:{content:'攻击范围+#'}, + }, + }, + }, + chongxin:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('h')>0&&game.hasPlayer(function(current){ + return current!=player&¤t.countCards('h')>0; + }); + }, + filterCard:true, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>0; + }, + check:function(card){ + return 6-get.value(card); + }, + discard:false, + lose:false, + delay:false, + content:function(){ + 'step 0' + player.loseToDiscardpile(cards); + player.draw(); + 'step 1' + if(target.countCards('h')>0){ + target.chooseCard('h',true,'请重铸一张手牌'); + } + else event.finish(); + 'step 2' + if(result.bool){ + target.loseToDiscardpile(result.cards); + target.draw(); + } + }, + ai:{ + order:6, + result:{ + player:1, + target:function(player,target){ + return 0.5*Math.sqrt(Math.min(3,target.countCards('h'))); + }, + }, + }, + }, + dezhang:{ + trigger:{player:'phaseZhunbeiBegin'}, + derivation:'weishu', + juexingji:true, + forced:true, + skillAnimation:true, + animationColor:'thunder', + filter:function(event,player){ + return !player.hasCard(function(card){ + return card.hasGaintag('huaiyuanx'); + },'h'); + }, + content:function(){ + player.awakenSkill('dezhang'); + player.loseMaxHp(); + player.addSkill('weishu'); + }, + }, + weishu:{ + audio:2, + trigger:{player:'gainAfter'}, + forced:true, + filter:function(event,player){ + return event.getParent().name=='draw'&&event.getParent(2).name!='weishu'&&event.getParent('phaseDraw').player!=player; + }, + content:function(){ + 'step 0' + player.chooseTarget(true,'请选择【卫戍】的目标','令一名角色摸一张牌').set('ai',function(target){ + return get.attitude(_status.event.player,target)*Math.sqrt(Math.max(1,4-target.countCards('h'))); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + target.draw(); + } + }, + group:'weishu_discard', + subSkill:{ + discard:{ + trigger:{player:'loseAfter'}, + forced:true, + filter:function(event,player){ + return event.type=='discard'&&event.getParent(3).name!='weishu_discard'&&event.getParent('phaseDiscard').player!=player&&game.hasPlayer((target)=>(target!=player&&target.countDiscardableCards(player,'he')>0)); + }, + content:function(){ + 'step 0' + player.chooseTarget(true,'请选择【卫戍】的目标','弃置一名其他角色的一张牌',function(card,player,target){ + return target!=player&&target.countDiscardableCards(player,'he')>0; + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'guohe_copy2'},player,player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + player.discardPlayerCard(target,'he',true); + } + }, + }, + }, + }, gaoling:{ audio:2, trigger:{player:'showCharacterAfter'}, @@ -2764,7 +3030,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jin_simazhao:['jin_wangyuanji'], jin_simashi:['jin_xiahouhui','jin_yanghuiyu'], }, - characterReplace:{}, + characterReplace:{ + yanghu:['jin_yanghu','sp_yanghu'], + }, translate:{ jin_zhangchunhua:'晋张春华', jin_zhangchunhua_ab:'张春华', @@ -2927,6 +3195,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ qimei_info:'准备阶段,你可以选择一名其他角色。你获得如下效果直到下回合开始:①每回合限一次,当你或其获得牌/失去手牌后,若你与其手牌数相等,则另一名角色摸一张牌。②每回合限一次,当你或其的体力值变化后,若你与其体力值相等,则另一名角色摸一张牌。', ybzhuiji:'追姬', ybzhuiji_info:'出牌阶段开始时,你可选择一项:①摸两张牌,并于出牌阶段结束时失去1点体力;②回复1点体力,并于出牌阶段结束时弃置两张牌。', + jin_yanghu:'羊祜', + huaiyuan:'怀远', + huaiyuanx:'绥', + huaiyuan_info:'①游戏开始时,你将你的手牌标记为“绥”。②当你失去一张“绥”后,你令一名角色执行一项:⒈其的手牌上限+1。⒉其的攻击范围+1。⒊其摸一张牌。③当你死亡时,你可令一名其他角色的手牌上限+X,且攻击范围+Y(X和Y为你自己被执行过〖怀远②〗的选项一和选项二的次数)。', + chongxin:'崇信', + chongxin_info:'出牌阶段限一次,你可重铸一张牌,且令一名有手牌的其他角色也重铸一张牌。', + dezhang:'德彰', + dezhang_info:'觉醒技。准备阶段,若你没有“绥”,则你减1点体力上限并获得〖卫戍〗。', + weishu:'卫戍', + weishu_info:'锁定技。①当你于摸牌阶段外不因〖卫戊①〗而摸牌后,你令一名角色摸一张牌。②当你于弃牌阶段外不因〖卫戊②〗而弃置牌后,你弃置一名其他角色的一张牌。', yingbian_pack1:'文德武备·理', yingbian_pack2:'文德武备·备', diff --git a/game/asset.js b/game/asset.js index 71ad4f80a..5afae2970 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.113.4', + 'v1.9.113.5', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -854,6 +854,30 @@ window.noname_asset_list=[ 'audio/die/re_guohuanghou.mp3', 'audio/die/tw_caocao.mp3', 'audio/die/tw_liuhong.mp3', + 'audio/die/dc_xushu.mp3', + 'audio/die/hucheer.mp3', + 'audio/die/jin_yanghu.mp3', + 'audio/die/ol_xuhuang.mp3', + 'audio/die/ol_yangyi.mp3', + 'audio/die/ol_zhuling.mp3', + 'audio/die/peixiu.mp3', + 'audio/die/qinghegongzhu.mp3', + 'audio/die/re_madai.mp3', + 'audio/die/re_miheng.mp3', + 'audio/die/re_pangdegong.mp3', + 'audio/die/sp_chendong.mp3', + 'audio/die/sp_huangfusong.mp3', + 'audio/die/sp_jianggan.mp3', + 'audio/die/sp_zongyu.mp3', + 'audio/die/xin_gaoshun.mp3', + 'audio/die/xin_wuguotai.mp3', + 'audio/die/xinchang.mp3', + 'audio/die/xuangongzhu.mp3', + 'audio/die/yangyan.mp3', + 'audio/die/yangzhi.mp3', + 'audio/die/zhangning.mp3', + 'audio/die/zhaoyan.mp3', + 'audio/die/zhouyi.mp3', 'audio/skill/decadezishou1.mp3', 'audio/skill/decadezishou2.mp3', @@ -3893,6 +3917,118 @@ window.noname_asset_list=[ 'audio/skill/twyujue2.mp3', 'audio/skill/twzhian1.mp3', 'audio/skill/twzhian2.mp3', + 'audio/skill/canmou1.mp3', + 'audio/skill/canmou2.mp3', + 'audio/skill/chongxin1.mp3', + 'audio/skill/chongxin2.mp3', + 'audio/skill/congjian1.mp3', + 'audio/skill/congjian2.mp3', + 'audio/skill/daoji1.mp3', + 'audio/skill/daoji2.mp3', + 'audio/skill/decadejinjiu1.mp3', + 'audio/skill/decadejinjiu2.mp3', + 'audio/skill/decadexianzhen1.mp3', + 'audio/skill/decadexianzhen2.mp3', + 'audio/skill/dezhang1.mp3', + 'audio/skill/dezhang2.mp3', + 'audio/skill/difa1.mp3', + 'audio/skill/difa2.mp3', + 'audio/skill/gaoling1.mp3', + 'audio/skill/gaoling2.mp3', + 'audio/skill/gzduannian1.mp3', + 'audio/skill/gzduannian2.mp3', + 'audio/skill/gzlianyou1.mp3', + 'audio/skill/gzlianyou2.mp3', + 'audio/skill/heqia1.mp3', + 'audio/skill/heqia2.mp3', + 'audio/skill/huaiyuan1.mp3', + 'audio/skill/huaiyuan2.mp3', + 'audio/skill/jinhui1.mp3', + 'audio/skill/jinhui2.mp3', + 'audio/skill/jixian1.mp3', + 'audio/skill/jixian2.mp3', + 'audio/skill/juezhi1.mp3', + 'audio/skill/juezhi2.mp3', + 'audio/skill/llqshenwei1.mp3', + 'audio/skill/llqshenwei2.mp3', + 'audio/skill/maihuo1.mp3', + 'audio/skill/maihuo2.mp3', + 'audio/skill/mengqing1.mp3', + 'audio/skill/mengqing2.mp3', + 'audio/skill/oldingcuo1.mp3', + 'audio/skill/oldingcuo2.mp3', + 'audio/skill/olduanliang1.mp3', + 'audio/skill/olduanliang2.mp3', + 'audio/skill/oljiezi1.mp3', + 'audio/skill/oljiezi2.mp3', + 'audio/skill/oljuanxia1.mp3', + 'audio/skill/oljuanxia2.mp3', + 'audio/skill/qhzhangji1.mp3', + 'audio/skill/qhzhangji2.mp3', + 'audio/skill/qimei1.mp3', + 'audio/skill/qimei2.mp3', + 'audio/skill/qingman1.mp3', + 'audio/skill/qingman2.mp3', + 'audio/skill/rejianyan1.mp3', + 'audio/skill/rejianyan2.mp3', + 'audio/skill/rekuangcai1.mp3', + 'audio/skill/rekuangcai2.mp3', + 'audio/skill/reqianxi1.mp3', + 'audio/skill/reqianxi2.mp3', + 'audio/skill/reshejian1.mp3', + 'audio/skill/reshejian2.mp3', + 'audio/skill/rezhuhai1.mp3', + 'audio/skill/rezhuhai2.mp3', + 'audio/skill/spdaizui1.mp3', + 'audio/skill/spdaizui2.mp3', + 'audio/skill/spdaoshu1.mp3', + 'audio/skill/spdaoshu2.mp3', + 'audio/skill/spdaoshu3.mp3', + 'audio/skill/spfenming1.mp3', + 'audio/skill/spfenming2.mp3', + 'audio/skill/spshiji1.mp3', + 'audio/skill/spshiji2.mp3', + 'audio/skill/sptaoluan1.mp3', + 'audio/skill/sptaoluan2.mp3', + 'audio/skill/spyilie1.mp3', + 'audio/skill/spyilie2.mp3', + 'audio/skill/spzhengjun1.mp3', + 'audio/skill/spzhengjun2.mp3', + 'audio/skill/spzhengjun3.mp3', + 'audio/skill/tianze1.mp3', + 'audio/skill/tianze2.mp3', + 'audio/skill/wanyi1.mp3', + 'audio/skill/wanyi2.mp3', + 'audio/skill/weishu1.mp3', + 'audio/skill/weishu2.mp3', + 'audio/skill/wushuang_lvlingqi1.mp3', + 'audio/skill/wushuang_lvlingqi2.mp3', + 'audio/skill/xianwan.mp3', + 'audio/skill/xianwan2.mp3', + 'audio/skill/xinbuyi1.mp3', + 'audio/skill/xinbuyi2.mp3', + 'audio/skill/xinganlu1.mp3', + 'audio/skill/xinganlu2.mp3', + 'audio/skill/xingtu1.mp3', + 'audio/skill/xingtu2.mp3', + 'audio/skill/xsqianxin1.mp3', + 'audio/skill/xsqianxin2.mp3', + 'audio/skill/xuanbei1.mp3', + 'audio/skill/xuanbei2.mp3', + 'audio/skill/ybzhuiji1.mp3', + 'audio/skill/ybzhuiji2.mp3', + 'audio/skill/yinyi1.mp3', + 'audio/skill/yinyi2.mp3', + 'audio/skill/yuyan1.mp3', + 'audio/skill/yuyan2.mp3', + 'audio/skill/yuyun1.mp3', + 'audio/skill/yuyun2.mp3', + 'audio/skill/zengou1.mp3', + 'audio/skill/zengou2.mp3', + 'audio/skill/zhibian1.mp3', + 'audio/skill/zhibian2.mp3', + 'audio/skill/zhukou1.mp3', + 'audio/skill/zhukou2.mp3', 'audio/voice/male/0.mp3', 'audio/voice/male/1.mp3', @@ -4949,6 +5085,13 @@ window.noname_asset_list=[ 'image/character/tw_chengpu.jpg', 'image/character/tw_zhangmancheng.jpg', 'image/character/xin_wuguotai.jpg', + 'image/character/dc_xushu.jpg', + 'image/character/jin_yanghu.jpg', + 'image/character/peixiu.jpg', + 'image/character/qinghegongzhu.jpg', + 'image/character/re_zhanghe.jpg', + 'image/character/sp_jianggan.jpg', + 'image/character/xin_gaoshun.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 388886962..7652d8cd6 100644 --- a/game/game.js +++ b/game/game.js @@ -13039,10 +13039,17 @@ lose_list:lose_list, }).setContent('chooseToCompareLose'); } + event.lose_list=lose_list; + event.getNum=function(card){ + for(var i of event.lose_list){ + if(i[1].contains&&i[1].contains(card)) return get.number(card,i[0]); + } + return get.number(card,false); + } event.cardlist=cards; event.cards=cards; event.card1=result[0].cards[0]; - event.num1=event.card1.number; + event.num1=event.getNum(event.card1); event.iwhile=0; event.result={ player:event.card1, @@ -13057,7 +13064,7 @@ event.target.animate('target'); player.animate('target'); event.card2=event.cardlist[event.iwhile]; - event.num2=event.card2.number; + event.num2=event.getNum(event.card2); game.log(event.target,'的拼点牌为',event.card2); player.line(event.target); player.$compare(event.card1,event.target,event.card2); @@ -13236,8 +13243,14 @@ player.$compare(event.card1,target,event.card2); game.log(player,'的拼点牌为',event.card1); game.log(target,'的拼点牌为',event.card2); - event.num1=event.card1.number; - event.num2=event.card2.number; + var getNum=function(card){ + for(var i of event.lose_list){ + if(i[1]==card) return get.number(card,i[0]); + } + return get.number(card,false); + } + event.num1=getNum(event.card1); + event.num2=getNum(event.card2); event.trigger('compare'); game.delay(0,1500); "step 6" @@ -18415,7 +18428,7 @@ if(str) game.log(this,'移去了',get.cnNumber(num),'个','#g【'+str+'】'); } this.syncStorage(i); - this[this.storage[i]?'markSkill':'unmarkSkill'](i); + this[(this.storage[i]||(lib.skill[i]&&lib.skill[i].mark))?'markSkill':'unmarkSkill'](i); }, addMark:function(i,num,log){ if(typeof num!='number'||!num) num=1; @@ -51950,7 +51963,15 @@ } }, number:function(card,player){ - //啥时候狗卡出相关技能我再完善 + //狗卡你是真敢出啊 + if(player!==false){ + var number=card.number; + var owner=player||get.owner(card); + if(owner){ + return game.checkMod(card,owner,number,'cardnumber',owner); + } + return number; + } if(typeof card.number=='number') return card.number; else if(card.cards&&card.cards.length==1) return get.number(card.cards[0]); return null; @@ -54373,28 +54394,30 @@ } result2+=temp02; result1+=temp01; - if(get.attitude(player,target)<0){ - result2*=Math.sqrt(threaten); - } - else{ - result2*=Math.sqrt(Math.sqrt(threaten)); - } - if(target.hp==1) result2*=2.5; - if(target.hp==2) result2*=1.8; - if(target.countCards('h')==0){ - if(get.tag(card,'respondSha')||get.tag(card,'respondShan')){ - result2*=1.7; + if(typeof card=='object'&&!result.ignoreStatus){ + if(get.attitude(player,target)<0){ + result2*=Math.sqrt(threaten); } else{ - result2*=1.5; + result2*=Math.sqrt(Math.sqrt(threaten)); } + if(target.hp==1) result2*=2.5; + if(target.hp==2) result2*=1.8; + if(target.countCards('h')==0){ + if(get.tag(card,'respondSha')||get.tag(card,'respondShan')){ + result2*=1.7; + } + else{ + result2*=1.5; + } + } + if(target.countCards('h')==1) result2*=1.3; + if(target.countCards('h')==2) result2*=1.1; + if(target.countCards('h')>3) result2*=0.5; + if(target.hp==4) result2*=0.9; + if(target.hp==5) result2*=0.8; + if(target.hp>5) result2*=0.6; } - if(target.countCards('h')==1) result2*=1.3; - if(target.countCards('h')==2) result2*=1.1; - if(target.countCards('h')>3) result2*=0.5; - if(target.hp==4) result2*=0.9; - if(target.hp==5) result2*=0.8; - if(target.hp>5) result2*=0.6; } else{ result2+=temp02; @@ -54543,7 +54566,7 @@ } result2+=temp02; result1+=temp01; - if(typeof card=='object'){ + if(typeof card=='object'&&!result.ignoreStatus){ if(get.attitude(player,target)<0){ result2*=Math.sqrt(threaten); } @@ -54774,7 +54797,7 @@ cards[ix].classList.add('selected'); ui.selected.cards.add(cards[ix]); game.check(); - if(ui.selected.cards.length>=range[ix]){ + if(ui.selected.cards.length>=range[0]){ ok=true; } if(ui.selected.cards.length==range[1]){ diff --git a/game/update.js b/game/update.js index 33df652d5..1e5e109e3 100644 --- a/game/update.js +++ b/game/update.js @@ -1,15 +1,15 @@ window.noname_update={ - version:'1.9.113.4', - update:'1.9.113.3', + version:'1.9.113.5', + update:'1.9.113.4', changeLog:[ - '苍井えりか、藏里见', - '海外服张曼成、程普', - '十周年界吴国太、冯熙、邓芝、祢衡、张宝', - '护甲图标修改', + '国战新国标2022', + '十周年界徐庶、高顺', + 'OL界张郃、羊祜、清河公主、', + '手杀裴秀、蒋干', 'bug修复', ], files:[ - //'card/extra.js', + 'card/extra.js', //'card/gujian.js', //'card/guozhan.js', //'card/gwent.js', @@ -18,7 +18,7 @@ window.noname_update={ //'card/sp.js', 'card/standard.js', //'card/swd.js', - 'card/yunchou.js', + //'card/yunchou.js', //'card/yingbian.js', //'card/yongjian.js', //'card/zhenfa.js', @@ -28,7 +28,7 @@ window.noname_update={ //'character/hearth.js', //'character/gujian.js', //'character/gwent.js', - //'character/hearth.js', + 'character/hearth.js', 'character/mobile.js', //'character/mtg.js', //'character/offline.js', @@ -39,7 +39,7 @@ window.noname_update={ 'character/shenhua.js', 'character/sp.js', 'character/sp2.js', - //'character/standard.js', + 'character/standard.js', 'character/tw.js', //'character/swd.js', //'character/xianjian.js', @@ -48,7 +48,7 @@ window.noname_update={ 'character/yijiang.js', //'character/yxs.js', //'extension/boss/extension.js', - 'layout/default/layout.css', + //'layout/default/layout.css', //'layout/newlayout/global.css', //'layout/default/menu.css', //'layout/nova/layout.css', @@ -71,16 +71,16 @@ window.noname_update={ //'game/package.js', //'game/asset.js', //'game/source.js', - 'theme/style/hp/custom.css', - 'theme/style/hp/emotion.css', - 'theme/style/hp/glass.css', - 'theme/style/hp/image', - 'theme/style/hp/official.css', - 'theme/style/hp/ol.css', - 'theme/style/hp/round.css', - 'theme/style/hp/xinglass.css', - 'theme/style/hp/xinround.css', - 'theme/style/hp/image/shield.png', + //'theme/style/hp/custom.css', + //'theme/style/hp/emotion.css', + //'theme/style/hp/glass.css', + //'theme/style/hp/image', + //'theme/style/hp/official.css', + //'theme/style/hp/ol.css', + //'theme/style/hp/round.css', + //'theme/style/hp/xinglass.css', + //'theme/style/hp/xinround.css', + //'theme/style/hp/image/shield.png', //'theme/style/hp/image/xinglass1.png', //'theme/style/hp/image/xinglass2.png', //'theme/style/hp/image/xinglass3.png', diff --git a/image/character/dc_xushu.jpg b/image/character/dc_xushu.jpg new file mode 100644 index 000000000..1c1bcd25f Binary files /dev/null and b/image/character/dc_xushu.jpg differ diff --git a/image/character/jin_yanghu.jpg b/image/character/jin_yanghu.jpg new file mode 100644 index 000000000..6a9ce936c Binary files /dev/null and b/image/character/jin_yanghu.jpg differ diff --git a/image/character/peixiu.jpg b/image/character/peixiu.jpg new file mode 100644 index 000000000..80fc8461b Binary files /dev/null and b/image/character/peixiu.jpg differ diff --git a/image/character/qinghegongzhu.jpg b/image/character/qinghegongzhu.jpg new file mode 100644 index 000000000..4b8d907bc Binary files /dev/null and b/image/character/qinghegongzhu.jpg differ diff --git a/image/character/re_zhanghe.jpg b/image/character/re_zhanghe.jpg new file mode 100644 index 000000000..be80e4de5 Binary files /dev/null and b/image/character/re_zhanghe.jpg differ diff --git a/image/character/sp_jianggan.jpg b/image/character/sp_jianggan.jpg new file mode 100644 index 000000000..9ad5d1935 Binary files /dev/null and b/image/character/sp_jianggan.jpg differ diff --git a/image/character/xin_gaoshun.jpg b/image/character/xin_gaoshun.jpg new file mode 100644 index 000000000..4280c40a8 Binary files /dev/null and b/image/character/xin_gaoshun.jpg differ diff --git a/mode/guozhan.js b/mode/guozhan.js index 1ff930da7..346384cb9 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -410,31 +410,31 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_simayi:['male','wei',3,['fankui','guicai']], gz_xiahoudun:['male','wei',4,['reganglie']], gz_zhangliao:['male','wei',4,['new_retuxi']], - gz_xuzhu:['male','wei',4,['luoyi']], + gz_xuzhu:['male','wei',4,['gzluoyi']], gz_guojia:['male','wei',3,['tiandu','gzyiji'],['gzskin']], gz_zhenji:['female','wei',3,['luoshen','qingguo'],['gzskin']], - gz_xiahouyuan:['male','wei',4,['shensu']], + gz_xiahouyuan:['male','wei',5,['gzshensu']], gz_zhanghe:['male','wei',4,['qiaobian']], gz_xuhuang:['male','wei',4,['new_duanliang']], gz_caoren:['male','wei',4,['gzjushou']], - gz_dianwei:['male','wei',4,['qiangxi']], + gz_dianwei:['male','wei',4,['gzqiangxi']], gz_xunyu:['male','wei',3,['quhu','gzjieming']], gz_caopi:['male','wei',3,['xingshang','gzfangzhu'],['gzskin']], gz_yuejin:['male','wei',4,['gzxiaoguo'],['gzskin']], gz_liubei:['male','shu',4,['rerende']], - gz_guanyu:['male','shu',5,['wusheng']], + gz_guanyu:['male','shu',5,['new_rewusheng']], gz_zhangfei:['male','shu',4,['gzpaoxiao']], gz_zhugeliang:['male','shu',3,['guanxing','new_kongcheng'],['gzskin']], gz_zhaoyun:['male','shu',4,['new_longdan']], gz_machao:['male','shu',4,['mashu','new_tieji']], gz_huangyueying:['female','shu',3,['jizhi','qicai'],['gzskin']], - gz_huangzhong:['male','shu',4,['liegong']], + gz_huangzhong:['male','shu',4,['gzliegong']], gz_weiyan:['male','shu',4,['xinkuanggu']], gz_pangtong:['male','shu',3,['lianhuan','oldniepan']], gz_sp_zhugeliang:['male','shu',3,['huoji','bazhen','kanpo'],['gzskin']], gz_liushan:['male','shu',3,['xiangle','fangquan']], - gz_menghuo:['male','shu',4,['huoshou','zaiqi']], + gz_menghuo:['male','shu',4,['huoshou','rezaiqi']], gz_zhurong:['female','shu',4,['juxiang','lieren']], gz_ganfuren:['female','shu',3,['new_shushen','shenzhi'],['gzskin']], gz_yuji:['male','qun',3,['qianhuan'],['gzskin']], @@ -447,8 +447,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_daqiao:['female','wu',3,['guose','liuli']], gz_luxun:['male','wu',3,['gzqianxun','duoshi'],['gzskin']], gz_sunshangxiang:['female','wu',3,['jieyin','gzxiaoji']], - gz_sunjian:['male','wu',5,['gzyinghun']], - gz_xiaoqiao:['female','wu',3,['retianxiang','hongyan'],['gzskin']], + gz_sunjian:['male','wu',5,['yinghun']], + gz_xiaoqiao:['female','wu',3,['gztianxiang','gzhongyan'],['gzskin']], gz_taishici:['male','wu',4,['tianyi']], gz_zhoutai:['male','wu',4,['buqu','new_fenji']], gz_re_lusu:['male','wu',3,['haoshi','dimeng']], @@ -456,7 +456,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_dingfeng:['male','wu',4,['reduanbing','refenxun'],['gzskin']], gz_huatuo:['male','qun',3,['new_chuli','jijiu']], - gz_lvbu:['male','qun',5,['wushuang'],['gzskin']], + gz_lvbu:['male','qun',5,['gzwushuang'],['gzskin']], gz_diaochan:['female','qun',3,['lijian','biyue'],['gzskin']], gz_re_yuanshao:['male','qun',4,['new_luanji'],['gzskin']], gz_yanwen:['male','qun',4,['shuangxiong']], @@ -468,7 +468,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_kongrong:['male','qun',3,['gzmingshi','lirang']], gz_jiling:['male','qun',4,['shuangren']], gz_tianfeng:['male','qun',3,['sijian','gzsuishi']], - gz_panfeng:['male','qun',4,['kuangfu'],['gzskin']], + gz_panfeng:['male','qun',4,['gzkuangfu'],['gzskin']], gz_zoushi:['female','qun',3,['huoshui','new_qingcheng']], gz_dengai:['male','wei',4,['tuntian','ziliang','gzjixi'],['gzskin','die_audio']], @@ -545,6 +545,324 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //新国标2022 + //许褚 + gzluoyi:{ + audio:'luoyi', + trigger:{player:'phaseDrawEnd'}, + direct:true, + preHidden:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.chooseToDiscard('he',get.prompt2('gzluoyi')).setHiddenSkill('gzluoyi').set('ai',function(card){ + var player=_status.event.player; + if(player.hasCard(function(cardx){ + if(cardx==card) return false; + return (cardx.name=='sha'||cardx.name=='juedou')&&player.hasValueTarget(cardx,null,true); + },'hs')) return 5-get.value(card); + return -get.value(card); + }).logSkill='gzluoyi'; + 'step 1' + if(result.bool) player.addTempSkill('gzluoyi_buff') + }, + subSkill:{ + buff:{ + audio:'luoyi', + charlotte:true, + forced:true, + trigger:{source:'damageBegin1'}, + filter:function(event,player){ + return event.card&&(event.card.name=='sha'||event.card.name=='juedou') + }, + content:function(){ + trigger.num++; + }, + }, + }, + }, + //典韦 + gzqiangxi:{ + audio:'qiangxi', + inherit:'qiangxi', + filterTarget:function(card,player,target){ + return target!=player; + }, + }, + //小乔 + gztianxiang:{ + audio:'tianxiang', + audioname:['daxiaoqiao','re_xiaoqiao','ol_xiaoqiao'], + trigger:{player:'damageBegin4'}, + direct:true, + preHidden:true, + usable:1, + filter:function(event,player){ + return player.countCards('h',function(card){ + return _status.connectMode||get.suit(card,player)=='heart'; + })>0&&event.num>0; + }, + content:function(){ + "step 0" + player.chooseCardTarget({ + filterCard:function(card,player){ + return get.suit(card)=='heart'&&lib.filter.cardDiscardable(card,player); + }, + filterTarget:function(card,player,target){ + return player!=target; + }, + ai1:function(card){ + return 10-get.value(card); + }, + ai2:function(target){ + var att=get.attitude(_status.event.player,target); + var trigger=_status.event.getTrigger(); + var da=0; + if(_status.event.player.hp==1){ + da=10; + } + var eff=get.damageEffect(target,trigger.source,target); + if(att==0) return 0.1+da; + if(eff>=0&&att>0){ + return att+da; + } + if(att>0&&target.hp>1){ + if(target.maxHp-target.hp>=3) return att*1.1+da; + if(target.maxHp-target.hp>=2) return att*0.9+da; + } + return -att+da; + }, + prompt:get.prompt('gztianxiang'), + prompt2:lib.translate.gztianxiang_info + }).setHiddenSkill(event.name); + "step 1" + if(result.bool){ + player.discard(result.cards); + var target=result.targets[0]; + player.chooseControlList(true,function(event,player){ + var target=_status.event.target; + var att=get.attitude(player,target); + if(target.hasSkillTag('maihp')) att=-att; + if(att>0){ + return 0; + } + else{ + return 1; + } + }, + ['令'+get.translation(target)+'受到伤害来源对其造成的1点伤害,然后摸X张牌(X为其已损失体力值且至多为5)', + '令'+get.translation(target)+'失去1点体力,然后获得'+get.translation(result.cards)]).set('target',target); + player.logSkill(event.name,target); + trigger.cancel(); + event.target=target; + event.card=result.cards[0]; + } + else{ + player.storage.counttrigger.gztianxiang--; + event.finish(); + } + "step 2" + if(typeof result.index=='number'){ + event.index=result.index; + if(result.index){ + event.related=event.target.loseHp(); + } + else{ + event.related=event.target.damage(trigger.source||'nosource','nocard'); + } + } + else event.finish(); + "step 3" + //if(event.related.cancelled||target.isDead()) return; + if(event.index&&card.isInPile()) target.gain(card,'gain2'); + else if(target.getDamagedHp()) target.draw(Math.min(5,target.getDamagedHp())); + }, + ai:{ + maixie_defend:true, + effect:{ + target:function(card,player,target){ + if(player.hasSkillTag('jueqing',false,target)) return; + if(get.tag(card,'damage')&&target.countCards('he')>1) return 0.7; + } + }, + } + }, + gzhongyan:{ + mod:{ + suit:function(card,suit){ + if(suit=='spade') return 'heart'; + }, + maxHandcard:function(player,num){ + if(player.hasCard(function(card){ + return get.suit(card,player)=='heart'; + },'e')) return num+1; + }, + } + }, + //黄忠 + gzliegong:{ + audio:'liegong', + locked:false, + mod:{ + targetInRange:function(card,player,target){ + if(card.name=='sha'&&target.countCards('h')0) return 2; + return target.mayHaveShan()?1:0; + }); + 'step 1' + if(result.control!='cancel2'){ + var target=trigger.target; + player.logSkill('gzliegong',target); + if(result.index==1){ + game.log(trigger.card,'不可被',target,'响应'); + trigger.directHit.add(target); + } + else { + game.log(trigger.card,'对',target,'的伤害+1'); + var map=trigger.getParent().customArgs,id=target.playerid; + if(!map[id]) map[id]={}; + if(!map[id].extraDamage) map[id].extraDamage=0; + map[id].extraDamage++; + } + } + }, + }, + //潘凤 + gzkuangfu:{ + audio:'kuangfu', + trigger:{player:'useCardToPlayered'}, + shaRelated:true, + preHidden:true, + logTarget:'target', + filter:function(event,player){ + return event.card.name=='sha'&&player.isPhaseUsing()&&!player.hasSkill('gzkuangfu_extra')&&event.target.countGainableCards(player,'e')>0; + }, + check:function(event,player){ + if(get.attitude(player,event.target)>0||!event.target.hasCard(function(card){ + return lib.filter.canBeGained(card,player,event.target)&&get.value(card,event.target)>0; + },'e')) return false; + return true; + }, + content:function(){ + trigger.getParent()._gzkuangfued=true; + player.gainPlayerCard(trigger.target,'e',true); + player.addTempSkill('gzkuangfu_extra','phaseUseAfter'); + }, + subSkill:{ + extra:{ + trigger:{player:'useCardAfter'}, + charlotte:true, + forced:true, + filter:function(event,player){ + return event._gzkuangfued&&!player.hasHistory('sourceDamage',function(evt){ + return evt.card&&event.card; + })&&player.countCards('h')>0; + }, + content:function(){ + player.chooseToDiscard('h',2,true); + }, + }, + }, + }, + //吕布 + gzwushuang:{ + shaRelated:true, + audio:'wushuang', + audioname:['re_lvbu','shen_lvbu','lvlingqi'], + forced:true, + locked:true, + group:['wushuang1','wushuang2'], + preHidden:['wushuang1','wushuang2','gzwushuang'], + trigger:{player:'useCard1'}, + direct:true, + filter:function(event,player){ + if(event.card.name!='juedou'||!event.card.isCard) return false; + if(event.targets){ + if(game.hasPlayer(function(current){ + return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current); + })){ + return true; + } + } + return false; + }, + content:function(){ + 'step 0' + var num=game.countPlayer(function(current){ + return !trigger.targets.contains(current)&&lib.filter.targetEnabled2(trigger.card,player,current); + }); + player.chooseTarget('无双:是否为'+get.translation(trigger.card)+'增加'+(num>1?'至多两个':'一个')+'目标?',[1,Math.min(2,num)],function(card,player,target){ + var trigger=_status.event.getTrigger(); + var card=trigger.card; + return !trigger.targets.contains(target)&&lib.filter.targetEnabled2(card,player,target); + }).set('ai',function(target){ + var player=_status.event.player; + var card=_status.event.getTrigger().card; + return get.effect(target,card,player,player); + }).setHiddenSkill('gzwushuang'); + 'step 1' + if(result.bool){ + if(player!=game.me&&!player.isOnline()) game.delayx(); + } + else event.finish(); + 'step 2' + var targets=result.targets.sortBySeat(); + player.logSkill('gzwushuang',targets); + trigger.targets.addArray(targets); + }, + }, + //夏侯渊 + gzshensu:{ + audio:'shensu1', + audioname:['xiahouba','re_xiahouyuan','ol_xiahouyuan'], + group:['shensu1','shensu2'], + preHidden:['shensu1','shensu2','gzshensu'], + trigger:{player:'phaseDiscardBegin'}, + direct:true, + filter:function(event,player){ + return player.hp>0; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('gzshensu'),'失去1点体力并跳过弃牌阶段,视为对一名其他角色使用使用一张无距离限制的【杀】',function(card,player,target){ + return player.canUse('sha',target,false); + }).setHiddenSkill('gzshensu').set('goon',player.needsToDiscard()).set('ai',function(target){ + var player=_status.event.player; + if(!_status.event.goon||player.hp<=target.hp) return false; + return get.effect(target,{name:'',isCard:true},player,player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('gzshensu',target); + player.loseHp(); + trigger.cancel(); + player.useCard({name:'sha',isCard:true},target,false); + } + }, + }, //吕玲绮 gzshenwei:{ audio:'llqshenwei', @@ -570,7 +888,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', usable:1, filter:function(event,player){ - return !player.hasSkill('wushuang')&&player.hasCard(function(card){ + return !player.hasSkill('gzwushuang')&&player.hasCard(function(card){ return get.type2(card,player)=='trick'; },'h'); }, @@ -578,8 +896,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return get.type2(card,player)=='trick'; }, content:function(){ - player.addTempSkill('wushuang','phaseUseEnd'); + player.addTempSkill('gzwushuang','phaseUseEnd'); }, + derivation:'gzwushuang', }, //荀谌 gzfenglve:{ @@ -711,12 +1030,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ event.source.isFriendOf(player)&&event.player.isIn(); }, check:function(event,player){ + if(get.attitude(player,event.player)>0) return false; if(event.player.hasSkillTag('filterDamage',null,{ player:event.source, card:event.card, })) return false; if(event.player.isUnseen()) return true; - if(event.player.hp>event.num&&event.player.hp<=event.num*2) return player.hp>1||trigger.player.isUnseen(2); + if(event.player.hp>event.num&&event.player.hp<=event.num*2) return player.hp>1||event.player.isUnseen(2); return false; }, logTarget:'player', @@ -1290,7 +1610,42 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ huoshui:{ audio:2, forced:true, - global:'huoshui_mingzhi' + global:'huoshui_mingzhi', + trigger:{player:'useCardToTargeted'}, + preHidden:true, + filter:function(event,player){ + return (event.card.name=='sha'||event.card.name=='wanjian')&&event.target.isUnseen(2)&&event.target.isEnemyOf(player); + }, + logTarget:'target', + content:function(){ + var target=trigger.target; + target.addTempSkill('huoshui_norespond'); + target.markAuto('huoshui_norespond',[trigger.card]); + }, + }, + huoshui_norespond:{ + charlotte:true, + trigger:{global:'useCardEnd'}, + onremove:true, + forced:true, + popup:false, + silent:true, + firstDo:true, + filter:function(event,player){ + return player.getStorage('huoshui_norespond').contains(event.card); + }, + content:function(){ + player.unmarkAuto('huoshui_norespond',[trigger.card]); + if(!player.storage.huoshui_norespond.length) player.removeSkill('huoshui_norespond'); + }, + mod:{ + cardEnabled:function(card){ + if(card.name=='shan') return false; + }, + cardRespondable:function(card){ + if(card.name=='shan') return false; + }, + }, }, huoshui_mingzhi:{ ai:{ @@ -3090,8 +3445,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return !player.getHistory('useCard').length||!player.getHistory('sourceDamage').length; }, content:function(){ - if(!player.getHistory('useCard').length) player.addTempSkill('gzrekuangcai_more'); - else player.addTempSkill('gzrekuangcai_less'); + lib.skill.rekuangcai.change(player,player.getHistory('useCard').length?-1:1); }, mod:{ targetInRange:function(card,player){ @@ -3101,24 +3455,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(player==_status.currentPhase) return Infinity; }, }, - subSkill:{ - less:{ - mod:{ - maxHandcard:function(player,num){ - return num-1; - }, - }, - charlotte:true, - }, - more:{ - mod:{ - maxHandcard:function(player,num){ - return num+1; - }, - }, - charlotte:true, - }, - }, }, gzkuangcai:{ audio:2, @@ -5474,7 +5810,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, gzxuanhuo:{ global:'gzxuanhuo_others', - derivation:['fz_wusheng','fz_gzpaoxiao','fz_new_longdan','fz_new_tieji','fz_liegong','fz_xinkuanggu'], + derivation:['fz_new_rewusheng','fz_gzpaoxiao','fz_new_longdan','fz_new_tieji','fz_liegong','fz_xinkuanggu'], ai:{ threaten:function(player,target){ if(game.hasPlayer(function(current){ @@ -5505,7 +5841,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - var list=['wusheng','gzpaoxiao','new_longdan','new_tieji','liegong','xinkuanggu']; + var list=['new_rewusheng','gzpaoxiao','new_longdan','new_tieji','liegong','xinkuanggu']; player.chooseControl(list).set('ai',function(){ if(list.contains('gzpaoxiao')) return 'gzpaoxiao'; return list.randomGet(); @@ -5535,9 +5871,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ audio:true, inherit:'new_tieji', }, - fz_wusheng:{ + fz_new_rewusheng:{ audio:true, - inherit:'wusheng', + inherit:'new_rewusheng', }, fz_liegong:{ audio:true, @@ -6451,83 +6787,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, }, - "baka_yinghun":{ - inherit:"gzyinghun", - filter:function(event,player){ - return player.isDamaged(); - }, + baka_yinghun:{ + inherit:"yinghun", audio:'yinghun_sunce', - trigger:{ - player:"phaseZhunbeiBegin", - }, - direct:true, - content:function(){ - "step 0" - player.chooseTarget(get.prompt2('gzyinghun'),function(card,player,target){ - return player!=target; - }).set('ai',function(target){ - var player=_status.event.player; - if(player.maxHp-player.hp==1&&target.countCards('he')==0){ - return 0; - } - if(get.attitude(_status.event.player,target)>0){ - return 10+get.attitude(_status.event.player,target); - } - if(player.maxHp-player.hp==1){ - return -1; - } - return 1; - }); - "step 1" - if(result.bool){ - event.num=player.maxHp-player.hp; - player.logSkill(event.name,result.targets); - event.target=result.targets[0]; - if(event.num==1){ - event.directcontrol=true; - } - else{ - var str1='摸'+get.cnNumber(event.num,true)+'弃一'; - var str2='摸一弃'+get.cnNumber(event.num,true); - player.chooseControl(str1,str2,function(event,player){ - return _status.event.choice; - }).set('choice',get.attitude(player,event.target)>0?str1:str2); - event.str=str1; - } - } - else{ - event.finish(); - } - "step 2" - if(event.directcontrol||result.control==event.str){ - event.target.draw(event.num); - event.target.chooseToDiscard(true,'he'); - } - else{ - event.target.draw(); - event.target.chooseToDiscard(event.num,true,'he'); - } - }, - ai:{ - threaten:function(player,target){ - if(target.hp==target.maxHp) return 0.5; - if(target.hp==1) return 2; - if(target.hp==2) return 1.5; - return 0.5; - }, - maixie:true, - effect:{ - target:function(card,player,target){ - if(target.maxHp<=3) return; - if(get.tag(card,'damage')){ - if(target.hp==target.maxHp) return [0,1]; - } - if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0]; - }, - }, - }, }, - "baka_yingzi":{ + baka_yingzi:{ mod:{ maxHandcardBase:function(player,num){ return player.maxHp; @@ -9301,10 +9565,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, hunshang_yinghun:{ - inherit:'gzyinghun', + inherit:'yinghun', audio:'yinghun_sunce', filter:function(event,player){ - return player.hp<=1&&player.isDamaged()&&!player.hasSkill('gzyinghun'); + return player.hp<=1&&player.isDamaged()&&!player.hasSkill('yinghun'); } }, yingyang:{ @@ -9536,7 +9800,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ audio:'xiaoji', preHidden:true, content:function(){ - player.draw(2); + player.draw(player==_status.currentPhase?1:3); } }, gzrende:{ @@ -10987,6 +11251,23 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ junling6_bg:'令', junling6_info:'若被执行,执行者选择一张手牌和一张装备区内牌(若有),然后弃置其余的牌。', + gzshensu:'神速', + gzshensu_info:'①判定阶段开始时,你可跳过此阶段和摸牌阶段,视为使用一张【杀】(无距离限制)。②出牌阶段开始时,你可跳过此阶段并弃置一张装备牌,视为使用一张【杀】(无距离限制)。③弃牌开始时,你可跳过此阶段并失去1点体力,视为使用一张【杀】(无距离限制)。', + gzwushuang:'无双', + gzwushuang_info:'锁定技。①当你使用【杀】或【决斗】指定目标后/成为【决斗】的目标后,你令此牌需要依次使用或打出两张【闪】或【杀】响应。②当你使用非转化的【决斗】选择目标后,你可为此【决斗】增加两个目标。', + gzkuangfu:'狂斧', + gzkuangfu_info:'出牌阶段限一次。当你使用【杀】指定目标后,你可获得目标角色装备区内的一张牌。然后若此【杀】未造成伤害,则你弃置两张手牌。', + gzliegong:'烈弓', + gzliegong_info:'①你对手牌数不大于你的角色使用【杀】不受距离关系的限制。②当你使用【杀】指定目标后,若其体力值不小于你,则你可以选择一项:⒈令此【杀】对其的伤害值基数+1。⒉令其不氪响应此【杀】。', + gzhongyan:'红颜', + gzhongyan_info:'锁定技。①你区域内的黑桃牌和黑桃判定牌的花色视为红桃。②若你的装备区内有红桃牌,则你的手牌上限+1。', + gztianxiang:'天香', + gztianxiang_info:'每回合限一次。当你受到伤害时,你可以弃置一张红桃手牌,防止此次伤害并选择一名其他角色,然后你选择一项:1.令其受到伤害来源对其造成的1点伤害,然后摸X张牌(X为其已损失体力值且至多为5);2.令其失去1点体力,然后获得你弃置的牌。', + gzluoyi:'裸衣', + gzluoyi_info:'摸牌阶段结束时,你可弃置一张牌,然后你于本回合内造成渠道为【杀】或【决斗】的伤害+1。', + gzqiangxi:'强袭', + gzqiangxi_info:'出牌阶段限一次,你可以弃置一张武器牌或失去1点体力,然后对一名其他角色造成1点伤害。', + gz_sp_duyu:'杜预', gzpozhen:'破阵', gzpozhen_info:'限定技,其他角色的回合开始时,你可以令其本回合不可使用、打出或重铸手牌;若其处于队列或围攻关系中,你可依次弃置此队列或参与围攻关系的其他角色的一张牌。', @@ -11109,7 +11390,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzlixia:'礼下', gzlixia_info:'与你势力不同的角色的准备阶段开始时,其可弃置你装备区内的一张牌,然后其选择一项:①弃置两张手牌。②失去1点体力。③令你摸两张牌。', gzrekuangcai:'狂才', - gzrekuangcai_info:'锁定技,你于回合内使用牌无距离和次数限制;弃牌阶段开始时,若你本回合内:未使用过牌,则你本回合的手牌上限+1;使用过牌但未造成过伤害,则你本回合的手牌上限-1。', + gzrekuangcai_info:'锁定技,你于回合内使用牌无距离和次数限制;弃牌阶段开始时,若你本回合内:未使用过牌,则你本局游戏的手牌上限+1;使用过牌但未造成过伤害,则你本局游戏的手牌上限-1。', gzkuangcai:'狂才', gzkuangcai_info:'锁定技,你的回合内,你使用牌无距离和次数限制,无视防具且不能被【无懈可击】响应;弃牌阶段开始时,若你本回合使用过牌但没造成伤害,本回合你的手牌上限-2;若你本回合造成的伤害点数不小于你使用的牌数,你将手牌摸至体力上限且本回合手牌上限+2。', gzshejian:'舌箭', @@ -11212,7 +11493,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ "new_qingcheng":"倾城", "new_qingcheng_info":"出牌阶段,你可以弃置一张黑色牌并选择一名武将牌均明置的其他角色,然后你暗置其一张武将牌。若你以此法弃置的牌为装备牌,则你可以暗置另一名武将牌均明置的角色的一张武将牌。", huoshui:'祸水', - huoshui_info:'锁定技。你的回合内,若此武将牌处于明置状态,其他角色不能明置其武将牌。', + huoshui_info:'锁定技。你的回合内,①其他角色不能明置武将牌。②当你使用【杀】或【万箭齐发】指定目标后,若目标角色与你势力不同且有暗置武将牌,则其不能使用或出【闪】直到此牌结算结束。', "new_kongcheng":"空城", "new_kongcheng_info":"锁定技,若你没有手牌,1.当你成为【杀】或【决斗】的目标时,取消之;2.你的回合外,其他角色交给你牌后,你将这些牌置于你的武将牌上。摸牌阶段开始时,你获得武将牌上的这些牌。", "new_keji":"克己", @@ -11236,7 +11517,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ "baka_hunshang":"魂殇", "baka_hunshang_info":"副将技,此武将牌减少半个阴阳鱼;准备阶段,若你的体力值不大于1,则你获得〖英姿〗和〖英魂〗直到回合结束。", "baka_yinghun":"英魂", - "baka_yinghun_info":"准备阶段开始时,若你已受伤,你可令一名其他角色执行一项:摸X张牌,然后弃置一张牌;或摸一张牌,然后弃置X张牌(X为你已损失的体力值)", + "baka_yinghun_info":"准备阶段开始时,你可令一名其他角色执行一项:摸X张牌,然后弃置一张牌;或摸一张牌,然后弃置X张牌(X为你已损失的体力值)", "baka_yingzi":"英姿", "baka_yingzi_info":"锁定技,摸牌阶段摸,你多摸一张牌;你的手牌上限+X(X为你已损失的体力值)。", gzyiji:"遗计", @@ -11397,7 +11678,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzkongcheng:'空城', gzkongcheng_info:'锁定技,当你成为【杀】或【决斗】的目标时,若你没有手牌,则取消之', gzxiaoji:'枭姬', - gzxiaoji_info:'当你失去装备区里的牌后,你可以摸两张牌。', + gzxiaoji_info:'当你失去装备区里的牌后,你可以摸一张牌。若你不是当前回合角色,则你改为摸三张牌。', gzrende:'仁德', gzrende_info:'出牌阶段,你可以将任意张手牌交给其他角色,然后若你于此阶段内给出第三张“仁德”牌时,你回复1点体力', gzzhiheng:'制衡',