├── .idea
├── .gitignore
├── misc.xml
├── vcs.xml
├── modules.xml
└── three-kingdoms-kill.iml
├── hero
├── lv_bu.lua
├── zhang_fei.lua
├── huang_yue_ying.lua
├── lv_meng.lua
├── huang_gai.lua
├── jia_xv.lua
├── lu_xvn.lua
├── xv_chu.lua
├── cao_cao.lua
├── zhu_ge_liang.lua
├── wo_long_zhu_ge.lua
├── guo_jia.lua
├── ma_chao.lua
├── zhen_ji.lua
├── sun_jian.lua
├── liu_bei.lua
├── tai_shi_ci.lua
├── zhu_rong.lua
├── meng_huo.lua
├── xia_hou_dun.lua
├── pang_de.lua
├── pang_tong.lua
├── zhang_liao.lua
├── sun_quan.lua
├── si_ma_yi.lua
├── zhao_yun.lua
├── zhou_tai.lua
├── sun_shang_xiang.lua
├── hua_tuo.lua
├── cao_pi.lua
├── wei_yan.lua
├── gan_ning.lua
├── zhou_yu.lua
├── zhang_zhao_zhang_hong.lua
├── xia_hou_yuan.lua
├── dian_wei.lua
├── liu_shan.lua
├── zhang_jiao.lua
├── xiao_qiao.lua
├── diao_chan.lua
├── cai_wen_ji.lua
├── yuan_shao.lua
├── guan_yu.lua
├── yan_liang_wen_chou.lua
├── huang_zhong.lua
├── xvn_yu.lua
├── da_qiao.lua
├── deng_ai.lua
├── jiang_wei.lua
├── sun_ce.lua
├── lu_su.lua
├── cao_ren.lua
└── zhang_he.lua
├── main.lua
├── macro.lua
├── README.md
├── deck.lua
├── class.lua
├── helper.lua
├── query.lua
├── game.lua
├── opt.lua
├── resmng.lua
└── test.lua
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /workspace.xml
--------------------------------------------------------------------------------
/hero/lv_bu.lua:
--------------------------------------------------------------------------------
1 | LvBu = class(Player)
2 |
3 | return LvBu
--------------------------------------------------------------------------------
/hero/zhang_fei.lua:
--------------------------------------------------------------------------------
1 | ZhangFei = class(Player)
2 |
3 | return ZhangFei
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/hero/huang_yue_ying.lua:
--------------------------------------------------------------------------------
1 | HuangYueYing = class(Player)
2 |
3 | HuangYueYing.skill["集智"] = function (self)
4 | if not query["询问发动技能"]("集智") then
5 | return
6 | end
7 | helper.insert(self.hand_cards, deck:draw(1))
8 | end
9 |
10 | return HuangYueYing
--------------------------------------------------------------------------------
/hero/lv_meng.lua:
--------------------------------------------------------------------------------
1 | LvMeng = class(Player)
2 |
3 | LvMeng.skill["弃牌阶段开始前"] = function (self)
4 | if not self:has_skill("克己") then
5 | return
6 | end
7 | if not self.flags["使用或打出过杀"] then
8 | self.flags["跳过弃牌"] = true
9 | end
10 | end
11 |
12 | return LvMeng
--------------------------------------------------------------------------------
/main.lua:
--------------------------------------------------------------------------------
1 | require("class")
2 | require("helper")
3 | require("deck")
4 | require("game")
5 | require("macro")
6 | require("opt")
7 | require("player")
8 | require("query")
9 | require("resmng")
10 |
11 | deck = Deck:new()
12 | game = Game:new()
13 |
14 | deck:init()
15 | game:init()
16 |
17 | game:main()
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/three-kingdoms-kill.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/macro.lua:
--------------------------------------------------------------------------------
1 | macro = {}
2 |
3 | macro.suit = {
4 | spade = 0,
5 | heart = 1,
6 | club = 2,
7 | diamond = 3
8 | }
9 |
10 | macro.color = {
11 | black = 0,
12 | red = 1
13 | }
14 |
15 | macro.sub_life_type = {
16 | life_loss = 0,
17 | damage = 1
18 | }
19 |
20 | macro.toward = {
21 | up = 0,
22 | down = 1
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/hero/huang_gai.lua:
--------------------------------------------------------------------------------
1 | HuangGai = class(Player)
2 |
3 | HuangGai.check_skill["苦肉"] = function (self)
4 | return true
5 | end
6 |
7 | HuangGai.skill["苦肉"] = function (self)
8 | self:sub_life({causer = nil, type = macro.sub_life_type.life_loss, name = "苦肉", card_id = nil, n = 1})
9 | if self:check_alive() then
10 | helper.insert(self.hand_cards, deck:draw(2))
11 | end
12 | end
13 |
14 | return HuangGai
--------------------------------------------------------------------------------
/hero/jia_xv.lua:
--------------------------------------------------------------------------------
1 | JiaXv = class(Player)
2 |
3 | function JiaXv:ctor()
4 | self["已使用乱武"] = false
5 | end
6 |
7 | JiaXv.check_skill["乱武"] = function (self)
8 | return not self["已使用乱武"]
9 | end
10 |
11 | JiaXv.skill["乱武"] = function (self)
12 | self["已使用乱武"] = true
13 | local settle_players = game:get_settle_players_except_self(self)
14 | for _, responder in ipairs(settle_players) do
15 | if responder:check_alive() then
16 | responder.respond["乱武"](responder)
17 | end
18 | end
19 | end
20 |
21 | return JiaXv
--------------------------------------------------------------------------------
/hero/lu_xvn.lua:
--------------------------------------------------------------------------------
1 | LuXvn = class(Player)
2 |
3 | LuXvn.skill["失去手牌"] = function (self, causer, responder, reason)
4 | if self:has_skill("连营") then
5 | self.skill["连营"](self, causer, responder, reason)
6 | end
7 | end
8 |
9 | LuXvn.skill["连营"] = function (self, causer, responder, reason)
10 | if self ~= responder then
11 | return
12 | end
13 | if #self.hand_cards ~= 0 then
14 | return
15 | end
16 | if not query["询问发动技能"]("连营") then
17 | return
18 | end
19 | helper.insert(self.hand_cards, deck:draw(1))
20 | end
21 |
22 | return LuXvn
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 用lua语言基于面向对象思想实现的一款文字版三国杀,5000余行代码实现了三国杀标准版108张卡牌的效果以及标准包、风、林、火、山包中除神将和左慈外53位武将的技能效果,并通过严谨测试。输入lua main.lua即可试玩,需安装好lua,建议在ubutnu系统下运行,否则会出现中文乱码。
2 | 项目亮点:
3 | 1、lua面向对象的实现基于云风大佬的代码,但原版代码不支持在声明类时对table赋值,即可以执行classA.t = {},但无法执行classA.t[1] = 1,本项目对云风大佬的代码进行改进,使得这一操作可以完成;
4 | 2、代码封装性好,可读性强。本项目对游戏过程中经常出现的操作(比如许多武将发动技能都需要的“弃置一张牌”的操作)进行了封装,大大缩减了代码行数,也使得技能实现的代码更容易看懂;
5 | 3、进行了逻辑层和IO层的分离。本项目将接收玩家输入的IO层单独用query模块实现,不与游戏逻辑层写在一起,避免了在编写具体卡牌或技能逻辑时出现大段的读取玩家输入的代码导致整体代码冗长混乱;
6 | 4、在深入了解游戏玩法的基础上,对游戏逻辑进行了较好的拆解和划分,整体代码实现逻辑清晰,扩展性强。例如,对玩家一个回合的行动流程进行了清晰划分,每个流程都由一个对应的函数完成;将每个卡的结算逻辑分为use(使用)和respond(响应),然后根据具体武将技能的不同,编写不同的use和respond方法;被动技能基于时机触发,在一个时机内处理相关技能,就算涉及到的技能多但结算链清晰有序。
7 |
--------------------------------------------------------------------------------
/hero/xv_chu.lua:
--------------------------------------------------------------------------------
1 | XvChu = class(Player)
2 |
3 | function XvChu:draw()
4 | text("现在是%s的摸牌阶段", self.name)
5 | self.skill["摸牌阶段开始前"](self)
6 | if self:has_flag("跳过摸牌") then
7 | return
8 | end
9 | if self:has_skill("裸衣") then
10 | self.skill["裸衣"](self)
11 | else
12 | helper.insert(self.hand_cards, deck:draw(2))
13 | end
14 | end
15 |
16 | XvChu.skill["裸衣"] = function (self)
17 | if self:has_flag("跳过摸牌") then
18 | return
19 | end
20 | if not query["询问发动技能"]("裸衣") then
21 | return
22 | end
23 | helper.insert(self.hand_cards, deck:draw(1))
24 | self.flags["裸衣"] = true
25 | end
26 |
27 | return XvChu
--------------------------------------------------------------------------------
/hero/cao_cao.lua:
--------------------------------------------------------------------------------
1 | CaoCao = class(Player)
2 |
3 | CaoCao.skill["受到伤害后"] = function (self, causer, responder, t)
4 | if self:has_skill("奸雄") then
5 | self.skill["奸雄"](self, responder, t)
6 | end
7 | end
8 |
9 | CaoCao.skill["奸雄"] = function (self, responder, t)
10 | if responder ~= self then
11 | return
12 | end
13 | if not t.card_id then
14 | return
15 | end
16 | if not helper.equal(game.settling_card[#game.settling_card], t.card_id) then
17 | return
18 | end
19 | if not query["询问发动技能"]("奸雄") then
20 | return
21 | end
22 | helper.pop(game.settling_card)
23 | helper.insert(self.hand_cards, t.card_id)
24 | end
25 |
26 | return CaoCao
--------------------------------------------------------------------------------
/hero/zhu_ge_liang.lua:
--------------------------------------------------------------------------------
1 | ZhuGeLiang = class(Player)
2 |
3 | ZhuGeLiang.skill["回合开始阶段"] = function (self)
4 | self.skill["观星"]()
5 | end
6 |
7 | ZhuGeLiang.skill["观星"] = function ()
8 | if not query["询问发动技能"]("观星") then
9 | return
10 | end
11 | local n = #game.players > 5 and 5 or #game.players
12 | local cards = deck:draw(n)
13 | cards = type(cards) == "number" and {cards} or cards
14 | local cards1 = query["观星-调整牌序"](cards)
15 | if query["二选一"]("观星") then
16 | for i, v in ipairs(cards1) do
17 | table.insert(deck.card_pile, i, v)
18 | end
19 | else
20 | helper.insert(deck.card_pile, cards1)
21 | end
22 | end
23 |
24 | return ZhuGeLiang
--------------------------------------------------------------------------------
/hero/wo_long_zhu_ge.lua:
--------------------------------------------------------------------------------
1 | WoLongZhuGe = class(Player)
2 |
3 | WoLongZhuGe.skill["看破"] = function (self)
4 | local func = function (id) return self:get_color(id) == macro.color.black end
5 | local cards = self:get_cards(func, true)
6 | local id = query["选择一张牌"](cards, "看破")
7 | helper.remove(self.hand_cards, id)
8 | self:before_settle(id)
9 | self:after_settle(id)
10 | end
11 |
12 | WoLongZhuGe.skill["八阵"] = function (self)
13 | if self.armor then
14 | return false
15 | end
16 | if not query["询问发动技能"]("八阵") then
17 | return false
18 | end
19 | local id = game:judge(self, "八阵")
20 | helper.insert(deck.discard_pile, id)
21 | return self:get_color(id) == macro.color.red and true or false
22 | end
23 |
24 | return WoLongZhuGe
--------------------------------------------------------------------------------
/hero/guo_jia.lua:
--------------------------------------------------------------------------------
1 | GuoJia = class(Player)
2 |
3 | GuoJia.skill["天妒"] = function (self, id)
4 | if not query["询问发动技能"]("天妒") then
5 | return false
6 | end
7 | helper.insert(self.hand_cards, id)
8 | return true
9 | end
10 |
11 | GuoJia.skill["受到伤害后"] = function (self, causer, responder, t)
12 | if self:has_skill("遗计") then
13 | self.skill["遗计"](self, responder)
14 | end
15 | end
16 |
17 | GuoJia.skill["遗计"] = function (self, responder)
18 | if responder ~= self then
19 | return
20 | end
21 | if not query["询问发动技能"]("遗计") then
22 | return
23 | end
24 | for _ = 1, 2, 1 do
25 | local target = query["选择一名玩家"](game.players, "遗计")
26 | helper.insert(target.hand_cards, deck:draw(1))
27 | end
28 | end
29 |
30 | return GuoJia
--------------------------------------------------------------------------------
/hero/ma_chao.lua:
--------------------------------------------------------------------------------
1 | MaChao = class(Player)
2 |
3 | function MaChao:get_distance(another)
4 | local dis = Player.get_distance(self, another)
5 | if self:has_skill("马术") then
6 | dis = dis - 1
7 | end
8 | return dis > 0 and dis or 0
9 | end
10 |
11 | MaChao.skill["杀-指定目标后"] = function (self, target, t)
12 | self.skill["铁骑"](self, target, t)
13 | if self:has_skill("雌雄双股剑") then
14 | self.skill["雌雄双股剑"](self, target)
15 | end
16 | end
17 |
18 | MaChao.skill["铁骑"] = function (self, target, t)
19 | if not query["询问发动技能"]("铁骑") then
20 | return
21 | end
22 | local id = game:judge(self, "铁骑")
23 | if self:get_color(id) == macro.color.red then
24 | t.can_dodge[target] = false
25 | end
26 | helper.insert(deck.discard_pile, id)
27 | end
28 |
29 | return MaChao
--------------------------------------------------------------------------------
/hero/zhen_ji.lua:
--------------------------------------------------------------------------------
1 | ZhenJi = class(Player)
2 |
3 | ZhenJi.skill["回合开始阶段"] = function (self)
4 | if self:has_skill("洛神") then
5 | self.skill["洛神"](self)
6 | end
7 | end
8 |
9 | ZhenJi.skill["洛神"] = function (self)
10 | if not query["询问发动技能"]("洛神") then
11 | return
12 | end
13 | local id = game:judge(self, "洛神")
14 | if self:get_color(id) == macro.color.black then
15 | helper.insert(self.hand_cards, id)
16 | self.skill["洛神"](self)
17 | else
18 | helper.insert(deck.discard_pile, id)
19 | end
20 | end
21 |
22 | ZhenJi.skill["倾国"] = function (self)
23 | local func = function (id) return self:get_color(id) == macro.color.black end
24 | local cards = self:get_cards(func, true)
25 | local id = query["选择一张牌"](cards, "倾国")
26 | helper.remove(self.hand_cards, id)
27 | helper.insert(deck.discard_pile, id)
28 | end
29 |
30 | return ZhenJi
--------------------------------------------------------------------------------
/hero/sun_jian.lua:
--------------------------------------------------------------------------------
1 | SunJian = class(Player)
2 |
3 | SunJian.skill["回合开始阶段"] = function (self)
4 | if self:has_skill("英魂") then
5 | self.skill["英魂"](self)
6 | end
7 | end
8 |
9 | SunJian.skill["英魂"] = function (self)
10 | local n = self.life_limit - self.life
11 | if n == 0 then
12 | return
13 | end
14 | if not query["询问发动技能"]("英魂") then
15 | return
16 | end
17 | local target = query["选择一名玩家"](game:get_other_players(self), "英魂")
18 | if query["二选一"]("英魂") then
19 | helper.insert(target.hand_cards, deck:draw(n))
20 | opt["弃置一张牌"](target, target, "英魂", true, true)
21 | else
22 | helper.insert(target.hand_cards, deck:draw(1))
23 | local card_n = #target:get_cards(nil, true, true)
24 | n = n > card_n and card_n or n
25 | opt["弃置n张牌"](target, target, "英魂", true, true, n)
26 | end
27 | end
28 |
29 | return SunJian
--------------------------------------------------------------------------------
/hero/liu_bei.lua:
--------------------------------------------------------------------------------
1 | LiuBei = class(Player)
2 |
3 | LiuBei.check_skill["仁德"] = function (self)
4 | if not next(self.hand_cards) then
5 | return false
6 | end
7 | return true
8 | end
9 |
10 | local function give_card(player, targets)
11 | local id = query["选择一张牌"](player.hand_cards, "仁德")
12 | local target = query["选择一名玩家"](targets, "仁德")
13 | helper.remove(player.hand_cards, id)
14 | helper.insert(target.hand_cards, id)
15 | player.flags["仁德"] = player.flags["仁德"] or 0
16 | player.flags["仁德"] = player.flags["仁德"] + 1
17 | if player.flags["仁德"] == 2 then
18 | player:add_life(1)
19 | end
20 | end
21 |
22 | LiuBei.skill["仁德"] = function (self)
23 | local targets = game:get_other_players(self)
24 | give_card(self, targets)
25 | while next(self.hand_cards) do
26 | if not query["二选一"]("仁德") then
27 | break
28 | end
29 | give_card(self, targets)
30 | end
31 | end
32 |
33 | return LiuBei
--------------------------------------------------------------------------------
/hero/tai_shi_ci.lua:
--------------------------------------------------------------------------------
1 | TaiShiCi = class(Player)
2 |
3 | TaiShiCi.get_targets["天义"] = function (self)
4 | local targets = {}
5 | for _, target in ipairs(game:get_other_players(self)) do
6 | if next(target.hand_cards) then
7 | helper.insert(targets, target)
8 | end
9 | end
10 | return targets
11 | end
12 |
13 | TaiShiCi.check_skill["天义"] = function (self)
14 | if self:has_flag("使用过天义") then
15 | return false
16 | end
17 | if not next(self.get_targets["天义"](self)) then
18 | return false
19 | end
20 | return true
21 | end
22 |
23 | TaiShiCi.skill["天义"] = function (self)
24 | self.flags["使用过天义"] = true
25 | local targets = self.get_targets["天义"](self)
26 | local target = query["选择一名玩家"](targets, "天义")
27 | if game:compare_points(self, target) then
28 | self.flags["天义-赢"] = true
29 | self.flags["杀-剩余次数"] = self.flags["杀-剩余次数"] + 1
30 | else
31 | self.flags["天义-输"] = true
32 | end
33 | end
34 |
35 | return TaiShiCi
--------------------------------------------------------------------------------
/hero/zhu_rong.lua:
--------------------------------------------------------------------------------
1 | ZhuRong = class(Player)
2 |
3 | ZhuRong.skill["巨象"] = function (self, id)
4 | if not query["询问发动技能"]("巨象") then
5 | return false
6 | end
7 | helper.insert(self.hand_cards, id)
8 | return true
9 | end
10 |
11 | ZhuRong.skill["造成伤害后"] = function (self, causer, responder, t)
12 | if self:has_skill("烈刃") then
13 | self.skill["烈刃"](self, causer, responder, t)
14 | end
15 | end
16 |
17 | ZhuRong.skill["烈刃"] = function (self, causer, responder, t)
18 | if self ~= causer then
19 | return
20 | end
21 | if not responder:check_alive() then
22 | return
23 | end
24 | if t.name ~= "杀" then
25 | return
26 | end
27 | if not next(self.hand_cards) or not next(responder.hand_cards) then
28 | return
29 | end
30 | if not query["询问发动技能"]("烈刃") then
31 | return
32 | end
33 | if game:compare_points(self, responder) then
34 | opt["获得一张牌"](self, responder, "烈刃", true, true)
35 | end
36 | end
37 |
38 | return ZhuRong
--------------------------------------------------------------------------------
/hero/meng_huo.lua:
--------------------------------------------------------------------------------
1 | MengHuo = class(Player)
2 |
3 | function MengHuo:draw()
4 | text("现在是%s的摸牌阶段", self.name)
5 | self.skill["摸牌阶段开始前"](self)
6 | if self:has_flag("跳过摸牌") then
7 | return
8 | end
9 | if self:has_skill("再起") then
10 | self.skill["再起"](self)
11 | else
12 | helper.insert(self.hand_cards, deck:draw(2))
13 | end
14 | end
15 |
16 | MengHuo.skill["再起"] = function (self)
17 | local n = self.life_limit - self.life
18 | if n == 0 then
19 | return
20 | end
21 | if not query["询问发动技能"]("再起") then
22 | return false
23 | end
24 | local cards = deck:draw(n + 1)
25 | local n1 = 0
26 | local cards1 = {}
27 | for _, id in pairs(cards) do
28 | if resmng[id].suit == macro.suit.heart then
29 | n1 = n1 + 1
30 | helper.insert(cards1, id)
31 | end
32 | end
33 | self:add_life(n1)
34 | helper.remove(cards, cards1)
35 | helper.insert(self.hand_cards, cards)
36 | helper.insert(deck.discard_pile, cards1)
37 | end
38 |
39 | return MengHuo
--------------------------------------------------------------------------------
/deck.lua:
--------------------------------------------------------------------------------
1 | Deck = class()
2 |
3 | function Deck:ctor()
4 | self.card_pile = {}
5 | self.discard_pile = {}
6 | end
7 |
8 | local function shuffle(card_pile)
9 | local len = #card_pile
10 | while len > 0 do
11 | local i = math.random(len)
12 | local id = card_pile[i]
13 | card_pile[i] = card_pile[len]
14 | card_pile[len] = id
15 | len = len - 1
16 | end
17 | end
18 |
19 | function Deck:init()
20 | for i = 1, resmng.card_finish_id - resmng.card_start_id + 1, 1 do
21 | helper.insert(self.card_pile, i)
22 | end
23 | shuffle(self.card_pile)
24 | end
25 |
26 | function Deck:draw(n)
27 | if #self.card_pile < n then
28 | shuffle(self.discard_pile)
29 | helper.insert(self.card_pile, self.discard_pile)
30 | helper.clear(self.discard_pile)
31 | end
32 | local cards = {}
33 | for _ = 1, n, 1 do
34 | helper.insert(cards, self.card_pile[1])
35 | table.remove(self.card_pile, 1)
36 | end
37 | return n == 1 and cards[1] or cards
38 | end
39 |
40 | return Deck
--------------------------------------------------------------------------------
/hero/xia_hou_dun.lua:
--------------------------------------------------------------------------------
1 | XiaHouDun = class(Player)
2 |
3 | XiaHouDun.skill["受到伤害后"] = function (self, causer, responder, t)
4 | if self:has_skill("刚烈") then
5 | self.skill["刚烈"](self, causer, responder)
6 | end
7 | end
8 |
9 | XiaHouDun.skill["刚烈"] = function (self, causer, responder)
10 | if responder ~= self then
11 | return
12 | end
13 | if not causer:check_alive() then
14 | return
15 | end
16 | if not query["询问发动技能"]("刚烈") then
17 | return
18 | end
19 | local id = game:judge(self, "刚烈")
20 | if self:get_suit(id) == macro.suit.heart then
21 | return
22 | end
23 | if #causer:get_cards(nil, true) < 2 then
24 | causer:sub_life({causer = self, type = macro.sub_life_type.damage, name = "刚烈", id = nil, n = 1})
25 | return
26 | end
27 | if query["二选一"]("刚烈") then
28 | opt["弃置n张牌"](causer, causer, "刚烈", true, false, 2)
29 | else
30 | causer:sub_life({causer = self, type = macro.sub_life_type.damage, name = "刚烈", id = nil, n = 1})
31 | end
32 | end
33 |
34 | return XiaHouDun
--------------------------------------------------------------------------------
/hero/pang_de.lua:
--------------------------------------------------------------------------------
1 | PangDe = class(Player)
2 |
3 | function PangDe:get_distance(another)
4 | local dis = Player.get_distance(self, another)
5 | if self:has_skill("马术") then
6 | dis = dis - 1
7 | end
8 | return dis > 0 and dis or 0
9 | end
10 |
11 | PangDe.skill["杀-指定目标后"] = function (self, target, t)
12 | self.skill["鞬出"](self, target, t)
13 | if self:has_skill("雌雄双股剑") then
14 | self.skill["雌雄双股剑"](self, target)
15 | end
16 | end
17 |
18 | PangDe.skill["鞬出"] = function (self, target, t)
19 | if not next(target:get_cards(nil, true ,true)) then
20 | return
21 | end
22 | if not query["询问发动技能"]("鞬出") then
23 | return
24 | end
25 | local id = opt["弃置一张牌"](self, target, "鞬出", true, true)
26 | if resmng[id].type ~= "basic" and resmng[id].type ~= "tactic" then
27 | t.can_dodge[target] = false
28 | else
29 | if helper.equal(game.settling_card[#game.settling_card], t.id) then
30 | helper.pop(game.settling_card)
31 | helper.insert(target.hand_cards, t.id)
32 | end
33 | end
34 | end
35 |
36 | return PangDe
--------------------------------------------------------------------------------
/hero/pang_tong.lua:
--------------------------------------------------------------------------------
1 | PangTong = class(Player)
2 |
3 | function PangTong:ctor()
4 | self["已使用涅槃"] = false
5 | end
6 |
7 | PangTong.skill["涅槃"] = function (self)
8 | self["已使用涅槃"] = true
9 | local cards = {}
10 | if next(self.hand_cards) then
11 | helper.insert(cards, self.hand_cards)
12 | helper.clear(self.hand_cards)
13 | end
14 | if self.arm then
15 | helper.insert(cards, self.arm)
16 | self.arm = nil
17 | end
18 | if self.armor then
19 | helper.insert(cards, self.armor)
20 | self.armor = nil
21 | end
22 | if self.add_horse then
23 | helper.insert(cards, self.add_horse)
24 | self.add_horse = nil
25 | end
26 | if self.sub_horse then
27 | helper.insert(cards, self.sub_horse)
28 | self.sub_horse = nil
29 | end
30 | if next(self.judge_cards) then
31 | helper.insert(cards, self.judge_cards)
32 | helper.clear(self.judge_cards)
33 | end
34 | helper.insert(deck.discard_pile, cards)
35 | helper.insert(self.hand_cards, deck:draw(3))
36 | self:add_life(3 - self.life)
37 | end
38 |
39 | return PangTong
--------------------------------------------------------------------------------
/hero/zhang_liao.lua:
--------------------------------------------------------------------------------
1 | ZhangLiao = class(Player)
2 |
3 | function ZhangLiao:draw()
4 | text("现在是%s的摸牌阶段", self.name)
5 | self.skill["摸牌阶段开始前"](self)
6 | if self:has_flag("跳过摸牌") then
7 | return
8 | end
9 | if self:has_skill("突袭") then
10 | self.skill["突袭"](self)
11 | else
12 | helper.insert(self.hand_cards, deck:draw(2))
13 | end
14 | end
15 |
16 | ZhangLiao.skill["突袭"] = function (self)
17 | local targets = {}
18 | for _, player in ipairs (game:get_other_players(self)) do
19 | if #player.hand_cards > 0 then
20 | helper.insert(targets, player)
21 | end
22 | end
23 | if not next(targets) then
24 | return
25 | end
26 | if not query["询问发动技能"]("突袭") then
27 | return
28 | end
29 | local target = query["选择一名玩家"](targets, "突袭")
30 | opt["获得一张牌"](self, target, "突袭", true)
31 | helper.remove(targets, target)
32 | if next(targets) then
33 | if not query["二选一"]("是否继续指定抽牌的目标") then
34 | return
35 | end
36 | local target1 = query["选择一名玩家"](targets, "突袭")
37 | opt["获得一张牌"](self, target1, "突袭", true)
38 | end
39 | end
40 |
41 | return ZhangLiao
--------------------------------------------------------------------------------
/hero/sun_quan.lua:
--------------------------------------------------------------------------------
1 | SunQuan = class(Player)
2 |
3 | SunQuan.check_skill["制衡"] = function (self)
4 | if self:has_flag("使用过制衡") then
5 | return false
6 | end
7 | if not next(self:get_cards(nil, true, true)) then
8 | return false
9 | end
10 | return true
11 | end
12 |
13 | SunQuan.skill["制衡"] = function (self)
14 | self.flags["使用过制衡"] = true
15 | local cards = self:get_cards(nil, true, true)
16 | local zhiheng_cards = {}
17 | local id = query["选择一张牌"](cards, "制衡")
18 | helper.remove(cards, id)
19 | helper.insert(zhiheng_cards, id)
20 | while next(cards) do
21 | if not query["二选一"]("制衡") then
22 | break
23 | end
24 | id = query["选择一张牌"](cards, "制衡")
25 | helper.remove(cards, id)
26 | helper.insert(zhiheng_cards, id)
27 | end
28 | for _, id in ipairs(zhiheng_cards) do
29 | if helper.element(self.hand_cards, id) then
30 | helper.remove(self.hand_cards, id)
31 | else
32 | self:take_off_equip(id)
33 | end
34 | end
35 | helper.insert(deck.discard_pile, zhiheng_cards)
36 | helper.insert(self.hand_cards, deck:draw(#zhiheng_cards))
37 | end
38 |
39 | return SunQuan
--------------------------------------------------------------------------------
/hero/si_ma_yi.lua:
--------------------------------------------------------------------------------
1 | SiMaYi = class(Player)
2 |
3 | SiMaYi.skill["改判"] = function(self, id, judge_player, reason)
4 | if self:has_skill("鬼才") then
5 | return self.skill["鬼才"](self, id)
6 | end
7 | end
8 |
9 | SiMaYi.skill["鬼才"] = function (self, id)
10 | local cards = self:get_cards(nil, true)
11 | if #cards == 0 then
12 | return
13 | end
14 | if not query["询问发动技能"]("鬼才") then
15 | return
16 | end
17 | local id1 = query["选择一张牌"](cards, "鬼才")
18 | helper.remove(self.hand_cards, id1)
19 | helper.insert(deck.discard_pile, id)
20 | return id1
21 | end
22 |
23 | SiMaYi.skill["受到伤害后"] = function (self, causer, responder, t)
24 | if self:has_skill("反馈") then
25 | self.skill["反馈"](self, causer, responder)
26 | end
27 | end
28 |
29 | SiMaYi.skill["反馈"] = function (self, causer, responder)
30 | if responder ~= self then
31 | return
32 | end
33 | if not causer:check_alive() then
34 | return
35 | end
36 | if not next(causer:get_cards(nil, true, true)) then
37 | return
38 | end
39 | if not query["询问发动技能"]("反馈") then
40 | return
41 | end
42 | opt["获得一张牌"](self, causer, "反馈", true, true)
43 | end
44 |
45 | return SiMaYi
--------------------------------------------------------------------------------
/class.lua:
--------------------------------------------------------------------------------
1 | local _class={}
2 |
3 | function class(super)
4 | local class_type={}
5 | class_type.ctor=false
6 | class_type.super=super
7 | class_type.new=function(...)
8 | local obj={}
9 | do
10 | local create
11 | create = function(c,...)
12 | if c.super then
13 | create(c.super,...)
14 | end
15 | if c.ctor then
16 | c.ctor(obj,...)
17 | end
18 | end
19 |
20 | create(class_type,...)
21 | end
22 | setmetatable(obj,{ __index=_class[class_type] })
23 | return obj
24 | end
25 | local vtbl={}
26 | _class[class_type]=vtbl
27 |
28 | setmetatable(class_type,{
29 | __newindex= function(t,k,v) vtbl[k]=v end,
30 | __index= function(t,k) return vtbl[k] end
31 | })
32 |
33 | if super then
34 | setmetatable(vtbl,{__index=
35 | function(t,k)
36 | local ret=_class[super][k]
37 | if type(ret) == "table" then
38 | vtbl[k]=deep_copy(ret)
39 | return vtbl[k]
40 | else
41 | vtbl[k]=ret
42 | return ret -- 这里不能写成return vtbl[k],否则ret为空时会死循环
43 | end
44 | end
45 | })
46 | end
47 |
48 | return class_type
49 | end
50 |
51 | function deep_copy(t)
52 | local t1 = {}
53 | for k, v in pairs(t) do
54 | if type(v) == "table" then
55 | t[k] = deep_copy(v)
56 | else
57 | t1[k] = v
58 | end
59 | end
60 | return t1
61 | end
--------------------------------------------------------------------------------
/hero/zhao_yun.lua:
--------------------------------------------------------------------------------
1 | ZhaoYun = class(Player)
2 |
3 | ZhaoYun.check_skill["龙胆"] = function (self)
4 | if not self:check_can_kill() then
5 | return false
6 | end
7 | local func = function (id) return resmng[id].name == "闪" end
8 | local cards = {}
9 | if self:check_can_kill() and next(self:get_players_in_attack_range()) then
10 | helper.insert(cards, self:get_cards(func, true))
11 | end
12 | if not next(cards) then
13 | return false
14 | end
15 | return true
16 | end
17 |
18 | ZhaoYun.skill["龙胆"] = function (self, reason, ...)
19 | if reason == "被杀" or reason == "万箭齐发" then
20 | local func = function (id) return resmng[id].name == "杀" end
21 | local cards = self:get_cards(func, true)
22 | local id = query["选择一张牌"](cards, "龙胆")
23 | helper.remove(self.hand_cards, id)
24 | helper.insert(deck.discard_pile, id)
25 | else
26 | local func = function (id) return resmng[id].name == "闪" end
27 | local cards = self:get_cards(func, true)
28 | local id = query["选择一张牌"](cards, "龙胆")
29 | helper.remove(self.hand_cards, id)
30 | self:before_settle(id)
31 | self.use["杀"](self, {is_transfer = true, transfer_type = "龙胆", id = id}, reason, ...)
32 | self:after_settle(id)
33 | end
34 | end
35 |
36 | return ZhaoYun
--------------------------------------------------------------------------------
/hero/zhou_tai.lua:
--------------------------------------------------------------------------------
1 | ZhouTai = class(Player)
2 |
3 | function ZhouTai:ctor()
4 | self["创"] = {}
5 | end
6 |
7 | function ZhouTai:get_hand_cards_limit()
8 | return next(self["创"]) and #self["创"] or self.life
9 | end
10 |
11 | ZhouTai.skill["失去手牌"] = function (self, causer, responder, reason)
12 | if self:has_skill("奋激") then
13 | self.skill["奋激"](self, causer, responder, reason)
14 | end
15 | end
16 |
17 | ZhouTai.skill["奋激"] = function (self, causer, responder, reason)
18 | if causer == responder then
19 | return
20 | end
21 | if reason ~= "弃置" and reason ~= "获得" then
22 | return
23 | end
24 | if not query["询问发动技能"]("奋激") then
25 | return
26 | end
27 | self:sub_life({casuer = self, type = macro.sub_life_type.life_loss, name = "奋激", card_id = nil, n = 1})
28 | helper.insert(responder.hand_cards, deck:draw(2))
29 | end
30 |
31 | ZhouTai.skill["不屈"] = function (self)
32 | local id = deck:draw(1)
33 | local flag = true
34 | for _, id1 in ipairs(self["创"]) do
35 | if resmng[id].points == resmng[id1].points then
36 | flag = false
37 | break
38 | end
39 | end
40 | if flag then
41 | self:add_life(1 - self.life)
42 | helper.insert(self["创"], id)
43 | else
44 | helper.insert(deck.discard_pile, id)
45 | end
46 | end
47 |
48 | return ZhouTai
--------------------------------------------------------------------------------
/hero/sun_shang_xiang.lua:
--------------------------------------------------------------------------------
1 | SunShangXiang = class(Player)
2 |
3 | SunShangXiang.skill["失去装备"] = function (self)
4 | if self:has_skill("枭姬") then
5 | self.skill["枭姬"](self)
6 | end
7 | end
8 |
9 | SunShangXiang.skill["枭姬"] = function (self)
10 | if not query["询问发动技能"]("枭姬") then
11 | return
12 | end
13 | helper.insert(self.hand_cards, deck:draw(2))
14 | end
15 |
16 | SunShangXiang.get_targets["结姻"] = function (self)
17 | local targets = {}
18 | for _, target in ipairs(game:get_other_players(self)) do
19 | if target.sex == "man" and target.life < target.life_limit then
20 | helper.insert(targets, target)
21 | end
22 | end
23 | return targets
24 | end
25 |
26 | SunShangXiang.check_skill["结姻"] = function (self)
27 | if self:has_flag("使用过结姻") then
28 | return false
29 | end
30 | if #self.hand_cards < 2 then
31 | return false
32 | end
33 | if not next(self.get_targets["结姻"](self)) then
34 | return false
35 | end
36 | return true
37 | end
38 |
39 | SunShangXiang.skill["结姻"] = function (self)
40 | self.flags["使用过结姻"] = true
41 | opt["弃置n张牌"](self, self, "结姻", true, false, 2)
42 | local targets = self.get_targets["结姻"](self)
43 | local target = query["选择一名玩家"](targets, "结姻")
44 | self:add_life(1)
45 | target:add_life(1)
46 | end
47 |
48 | return SunShangXiang
--------------------------------------------------------------------------------
/hero/hua_tuo.lua:
--------------------------------------------------------------------------------
1 | HuaTuo = class(Player)
2 |
3 | HuaTuo.get_targets["青囊"] = function (self)
4 | local targets = {}
5 | for _, target in ipairs(game.players) do
6 | if target.life < target.life_limit then
7 | helper.insert(targets, target)
8 | end
9 | end
10 | return targets
11 | end
12 |
13 | HuaTuo.check_skill["青囊"] = function (self)
14 | if self:has_flag("使用过青囊") then
15 | return false
16 | end
17 | if not next(self.hand_cards) then
18 | return false
19 | end
20 | if not next(self.get_targets["青囊"](self)) then
21 | return false
22 | end
23 | return true
24 | end
25 |
26 | HuaTuo.skill["青囊"] = function (self)
27 | self.flags["使用过青囊"] = true
28 | local targets = self.get_targets["青囊"](self)
29 | local target = query["选择一名玩家"](targets, "青囊")
30 | opt["弃置一张牌"](self, self, "青囊", true)
31 | target:add_life(1)
32 | end
33 |
34 | HuaTuo.skill["急救"] = function (self, target)
35 | local func = function (id) return self:get_color(id) == macro.color.red end
36 | local cards = self:get_cards(func, true, true)
37 | local id = query["选择一张牌"](cards, "急救")
38 | if helper.element(self.hand_cards, id) then
39 | helper.remove(self.hand_cards, id)
40 | elseif helper.element(self:get_equip_cards(), id) then
41 | self:take_off_equip(id)
42 | end
43 | helper.insert(deck.discard_pile, id)
44 | target:add_life(1)
45 | end
46 |
47 | return HuaTuo
--------------------------------------------------------------------------------
/hero/cao_pi.lua:
--------------------------------------------------------------------------------
1 | CaoPi = class(Player)
2 |
3 | CaoPi.skill["行殇"] = function (self, target)
4 | if not query["询问发动技能"]("行殇") then
5 | return
6 | end
7 | local cards = {}
8 | if next(target.hand_cards) then
9 | helper.insert(cards, target.hand_cards)
10 | helper.clear(target.hand_cards)
11 | end
12 | if target.arm then
13 | helper.insert(cards, target.arm)
14 | target.arm = nil
15 | end
16 | if target.armor then
17 | helper.insert(cards, target.armor)
18 | target.armor = nil
19 | end
20 | if target.add_horse then
21 | helper.insert(cards, target.add_horse)
22 | target.add_horse = nil
23 | end
24 | if target.sub_horse then
25 | helper.insert(cards, target.sub_horse)
26 | target.sub_horse = nil
27 | end
28 | helper.insert(self.hand_cards, cards)
29 | end
30 |
31 | CaoPi.skill["受到伤害后"] = function (self, causer, responder, t)
32 | if self:has_skill("放逐") then
33 | self.skill["放逐"](self, responder)
34 | end
35 | end
36 |
37 | CaoPi.skill["放逐"] = function (self, responder)
38 | if responder ~= self then
39 | return
40 | end
41 | if not query["询问发动技能"]("放逐") then
42 | return
43 | end
44 | local targets = game:get_other_players(self)
45 | local target = query["选择一名玩家"](targets, "放逐")
46 | target:flip()
47 | local n = self.life_limit - self.life
48 | helper.insert(target.hand_cards, deck:draw(n))
49 | end
50 |
51 | return CaoPi
--------------------------------------------------------------------------------
/hero/wei_yan.lua:
--------------------------------------------------------------------------------
1 | WeiYan = class(Player)
2 |
3 | function WeiYan:ctor()
4 | self["已使用奇谋"] = false
5 | end
6 |
7 | function WeiYan:get_distance(another)
8 | local dis = Player.get_distance(self, another)
9 | if self.flags["奇谋"] then
10 | dis = dis - self.flags["奇谋"]
11 | end
12 | return dis > 0 and dis or 0
13 | end
14 |
15 | WeiYan.skill["造成伤害后"] = function (self, causer, responder, t)
16 | if self:has_skill("狂骨") then
17 | self.skill["狂骨"](self, causer, t)
18 | end
19 | end
20 |
21 | WeiYan.skill["狂骨"] = function (self, causer, t)
22 | if self ~= causer then
23 | return
24 | end
25 | if not self["狂骨"] then
26 | return
27 | end
28 | if not query["询问发动技能"]("狂骨") then
29 | return
30 | end
31 | self["狂骨"] = nil
32 | for _ = 1, t.n, 1 do
33 | if query["二选一"]("狂骨") then
34 | self:add_life(1)
35 | else
36 | helper.insert(self.hand_cards, deck:draw(1))
37 | end
38 | end
39 | end
40 |
41 | WeiYan.check_skill["奇谋"] = function (self)
42 | return not self["已使用奇谋"]
43 | end
44 |
45 | WeiYan.skill["奇谋"] = function (self)
46 | self["已使用奇谋"] = true
47 | local loss_life_n = query["奇谋"](self.life)
48 | self:sub_life({causer = self, type = macro.sub_life_type.life_loss, name = "奇谋", card_id = nil, n = loss_life_n})
49 | if self:check_alive() then
50 | self.flags["奇谋"] = loss_life_n
51 | self.flags["杀-剩余次数"] = self.flags["杀-剩余次数"] + loss_life_n
52 | end
53 | end
54 |
55 | return WeiYan
--------------------------------------------------------------------------------
/hero/gan_ning.lua:
--------------------------------------------------------------------------------
1 | GanNing = class(Player)
2 |
3 | GanNing.get_t["奇袭"] = function (self)
4 | local t = {}
5 | local func = function (v) return resmng[v].suit == macro.suit.spade or resmng[v].suit == macro.suit.club end
6 | for _, id in ipairs(self:get_cards(func, true, true)) do
7 | local targets = {}
8 | for _, player in ipairs(game:get_other_players(self)) do
9 | if player:has_skill("帷幕") and self:get_color(id) == macro.color.black then
10 | goto continue
11 | end
12 | if #player:get_cards(nil, true, true, true) == 0 then
13 | goto continue
14 | end
15 | helper.insert(targets, player)
16 | ::continue::
17 | end
18 | if #targets > 0 then
19 | t[id] = targets
20 | end
21 | end
22 | return t
23 | end
24 |
25 | GanNing.check_skill["奇袭"] = function (self)
26 | if not next(self.get_t["奇袭"](self)) then
27 | return false
28 | end
29 | return true
30 | end
31 |
32 | GanNing.skill["奇袭"] = function (self)
33 | local t = self.get_t["奇袭"](self)
34 | local cards = helper.get_keys(t)
35 | local id = query["选择一张牌"](cards, "奇袭")
36 | if helper.element(self:get_equip_cards(), id) then
37 | self:take_off_equip(id)
38 | elseif helper.element(self.hand_cards, id) then
39 | helper.remove(self.hand_cards, id)
40 | end
41 | self:before_settle(id)
42 | local target = query["选择一名玩家"](t[id], "奇袭")
43 | target.respond["过河拆桥"](target, self)
44 | self:after_settle(id)
45 | end
46 |
47 | return GanNing
--------------------------------------------------------------------------------
/hero/zhou_yu.lua:
--------------------------------------------------------------------------------
1 | ZhouYu = class(Player)
2 |
3 | function ZhouYu:draw()
4 | text("现在是%s的摸牌阶段", self.name)
5 | self.skill["摸牌阶段开始前"](self)
6 | if self:has_flag("跳过摸牌") then
7 | return
8 | end
9 | if self:has_skill("英姿") then
10 | self.skill["英姿"](self)
11 | else
12 | helper.insert(self.hand_cards, deck:draw(2))
13 | end
14 | end
15 |
16 | ZhouYu.skill["英姿"] = function (self)
17 | if not query["询问发动技能"]("英姿") then
18 | helper.insert(self.hand_cards, deck:draw(2))
19 | else
20 | helper.insert(self.hand_cards, deck:draw(3))
21 | end
22 | end
23 |
24 | ZhouYu.check_skill["反间"] = function (self)
25 | if self:has_flag("使用过反间") then
26 | return false
27 | end
28 | if not next(self.hand_cards) then
29 | return false
30 | end
31 | return true
32 | end
33 |
34 | ZhouYu.skill["反间"] = function (self)
35 | self.flags["使用过反间"] = true
36 | local targets = game:get_other_players(self)
37 | local target = query["选择一名玩家"](targets, "反间")
38 | local suit = query["选择花色"]({macro.suit.spade, macro.suit.heart, macro.suit.club, macro.suit.diamond})
39 | local n = math.random(#self.hand_cards)
40 | local id = self.hand_cards[n]
41 | helper.remove(self.hand_cards, id)
42 | if resmng[id].suit ~= suit then
43 | target:sub_life({causer = self, type = macro.sub_life_type.damage, name = "反间", card_id = nil, n = 1})
44 | end
45 | if target:check_alive() then
46 | helper.insert(target.hand_cards, id)
47 | else
48 | helper.insert(deck.discard_pile, id)
49 | end
50 | end
51 |
52 | return ZhouYu
--------------------------------------------------------------------------------
/hero/zhang_zhao_zhang_hong.lua:
--------------------------------------------------------------------------------
1 | ZhangZhaoZhangHong = class(Player)
2 |
3 | ZhangZhaoZhangHong.skill["固政"] = function (self, discard_player, cards)
4 | if not query["询问发动技能"]("固政") then
5 | return
6 | end
7 | local id = query["选择一张牌"](cards, "固政")
8 | helper.remove(deck.discard_pile, cards)
9 | helper.insert(discard_player.hand_cards, id)
10 | helper.remove(cards, id)
11 | helper.insert(self.hand_cards, cards)
12 | end
13 |
14 | ZhangZhaoZhangHong.get_t["直谏"] = function (self)
15 | local t = {}
16 | local func = function (id) return resmng[id].type ~= "basic" and resmng[id].type ~= "tactic" end
17 | local cards = self:get_cards(func, true)
18 | for _, id in ipairs(cards) do
19 | local targets = {}
20 | for _, target in ipairs(game:get_other_players(self)) do
21 | if not target:has_equip(resmng[id].type) then
22 | helper.insert(targets, target)
23 | end
24 | end
25 | if next(targets) then
26 | t[id] = targets
27 | end
28 | end
29 | return t
30 | end
31 |
32 | ZhangZhaoZhangHong.check_skill["直谏"] = function (self)
33 | if not next(self.get_t["直谏"](self)) then
34 | return false
35 | end
36 | return true
37 | end
38 |
39 | ZhangZhaoZhangHong.skill["直谏"] = function (self)
40 | local t = self.get_t["直谏"](self)
41 | local cards = helper.get_keys(t)
42 | local id = query["选择一张牌"](cards, "直谏")
43 | local target = query["选择一名玩家"](t[id], "直谏")
44 | helper.remove(self.hand_cards, id)
45 | target:put_on_equip(id)
46 | helper.insert(self.hand_cards, deck:draw(1))
47 | end
48 |
49 | return ZhangZhaoZhangHong
--------------------------------------------------------------------------------
/hero/xia_hou_yuan.lua:
--------------------------------------------------------------------------------
1 | XiaHouYuan = class(Player)
2 |
3 | XiaHouYuan.skill["判定阶段开始前"] = function (self)
4 | if self:has_skill("神速") then
5 | self.skill["神速-判定阶段开始前"](self)
6 | end
7 | end
8 |
9 | XiaHouYuan.skill["神速-判定阶段开始前"] = function (self)
10 | if not query["询问发动技能"]("神速") then
11 | return
12 | end
13 | self.flags["跳过判定"] = true
14 | self.flags["跳过摸牌"] = true
15 | self.use["杀"](self, {is_transfer = true, transfer_type = "神速", id = nil}, "神速")
16 | end
17 |
18 | XiaHouYuan.skill["出牌阶段开始前"] = function (self)
19 | if self:has_skill("神速") then
20 | self.skill["神速-出牌阶段开始前"](self)
21 | end
22 | end
23 |
24 | XiaHouYuan.skill["神速-出牌阶段开始前"] = function (self)
25 | if self.has_flag(self, "跳过出牌") then
26 | return
27 | end
28 | local func = function (id) return resmng[id].type ~= "basic" and resmng[id].type ~= "tactic" end
29 | if not next(self.get_cards(self, func, true, true)) then
30 | return
31 | end
32 | if not query["询问发动技能"]("神速") then
33 | return
34 | end
35 | opt["弃置一张牌"](self, self, "神速", true, true, false, func)
36 | self.flags["跳过出牌"] = true
37 | self.use["杀"](self, {is_transfer = true, transfer_type = "神速", id = nil}, "神速")
38 | end
39 |
40 | XiaHouYuan.skill["弃牌阶段开始前"] = function (self)
41 | if self:has_skill("神速") then
42 | self.skill["神速-弃牌阶段开始前"](self)
43 | end
44 | end
45 |
46 | XiaHouYuan.skill["神速-弃牌阶段开始前"] = function (self)
47 | if not query["询问发动技能"]("神速") then
48 | return
49 | end
50 | self.flags["跳过弃牌"] = true
51 | self:flip()
52 | self.use["杀"](self, {is_transfer = true, transfer_type = "神速", id = nil}, "神速")
53 | end
54 |
55 | return XiaHouYuan
--------------------------------------------------------------------------------
/hero/dian_wei.lua:
--------------------------------------------------------------------------------
1 | DianWei = class(Player)
2 |
3 | DianWei.check_skill["强袭"] = function (self)
4 | if not self:has_flag("使用过强袭") then
5 | return true
6 | end
7 | if #self.flags["使用过强袭"] == 2 then
8 | return false
9 | end
10 | local targets = game:get_other_players(self)
11 | helper.remove(targets, self.flags["使用过强袭"])
12 | if not next(targets) then
13 | return false
14 | end
15 | return true
16 | end
17 |
18 | DianWei.skill["强袭"] = function (self)
19 | self.flags["使用过强袭"] = self.flags["使用过强袭"] or {}
20 | local targets = game:get_other_players(self)
21 | helper.remove(targets, self.flags["使用过强袭"])
22 | local target = query["选择一名玩家"](targets, "强袭")
23 | local func = function (id) return resmng[id].type ~= "basic" and resmng[id].type ~= "tactic" end
24 | local cards = self:get_cards(func, true, true)
25 | if next(cards) then
26 | if query["二选一"]("强袭") then
27 | self:sub_life({causer = nil, type = macro.sub_life_type.life_loss, name = "强袭", card_id = nil, n = 1})
28 | target:sub_life({causer = self, type = macro.sub_life_type.damage, name = "强袭", card_id = nil, n = 1})
29 | else
30 | opt["弃置一张牌"](self, self, "强袭", true, true, false, func)
31 | target:sub_life({causer = self, type = macro.sub_life_type.damage, name = "强袭", card_id = nil, n = 1})
32 | end
33 | else
34 | self:sub_life({causer = nil, type = macro.sub_life_type.life_loss, name = "强袭", card_id = nil, n = 1})
35 | target:sub_life({causer = self, type = macro.sub_life_type.damage, name = "强袭", card_id = nil, n = 1})
36 | end
37 | helper.insert(self.flags["使用过强袭"], target)
38 | end
39 |
40 | return DianWei
--------------------------------------------------------------------------------
/hero/liu_shan.lua:
--------------------------------------------------------------------------------
1 | LiuShan = class(Player)
2 |
3 | LiuShan.skill["出牌阶段开始前"] = function (self)
4 | if self:has_skill("放权") then
5 | self.skill["放权-出牌阶段开始前"](self)
6 | end
7 | end
8 |
9 | LiuShan.skill["放权-出牌阶段开始前"] = function (self)
10 | if self:has_flag("跳过出牌") then
11 | return
12 | end
13 | if not query["询问发动技能"]("放权") then
14 | return
15 | end
16 | self.flags["跳过出牌"] = true
17 | self.flags["放权"] = true
18 | end
19 |
20 | LiuShan.skill["回合结束阶段"] = function (self)
21 | if self:has_skill("放权") then
22 | self.skill["放权-回合结束阶段"](self)
23 | end
24 | end
25 |
26 | LiuShan.skill["放权-回合结束阶段"] = function (self)
27 | if not self:has_flag("放权") then
28 | return
29 | end
30 | if #self.hand_cards == 0 then
31 | return
32 | end
33 | opt["弃置一张牌"](self, self, "放权", true)
34 | local targets = game:get_other_players(self)
35 | local target = query["选择一名玩家"](targets, "放权")
36 | table.insert(game.settle_players, self.order + 1, target)
37 | end
38 |
39 | LiuShan.skill["杀-成为目标后"] = function (self, causer, t)
40 | if self:has_skill("享乐") then
41 | self.skill["享乐"](self, causer, t)
42 | end
43 | end
44 |
45 | LiuShan.skill["享乐"] = function (self, causer, t)
46 | if not query["询问发动技能"]("享乐") then
47 | return
48 | end
49 | local func = function (id) return resmng[id].type == "basic" end
50 | if not next(causer:get_cards(func, true ,true)) then
51 | t.invalid[self] = true
52 | return
53 | end
54 | if query["二选一"]("享乐") then
55 | opt["弃置一张牌"](causer, causer, "享乐", true, true, nil, func)
56 | else
57 | t.invalid[self] = true
58 | end
59 | end
60 |
61 | return LiuShan
--------------------------------------------------------------------------------
/hero/zhang_jiao.lua:
--------------------------------------------------------------------------------
1 | ZhangJiao = class(Player)
2 |
3 | ZhangJiao.skill["改判"] = function(self, id, judge_player, reason)
4 | if self:has_skill("鬼道") then
5 | return self.skill["鬼道"](self, id, judge_player, reason)
6 | end
7 | end
8 |
9 | ZhangJiao.skill["鬼道"] = function(self, id, judge_player, reason)
10 | local func = function (id) return resmng[id].suit == macro.suit.spade or resmng[id].suit == macro.suit.club end
11 | local cards = self:get_cards(func, true, true)
12 | if judge_player == self and reason == "八卦阵" then
13 | helper.remove(cards, self.armor)
14 | end
15 | if #cards == 0 then
16 | return
17 | end
18 | if not query["询问发动技能"]("鬼道") then
19 | return
20 | end
21 | local id1 = query["选择一张牌"](cards, "鬼道")
22 | if helper.element(self.hand_cards, id1) then
23 | helper.remove(self.hand_cards, id1)
24 | else
25 | self:take_off_equip(id1)
26 | end
27 | helper.insert(self.hand_cards, id)
28 | return id1
29 | end
30 |
31 | ZhangJiao.skill["雷击"] = function (self)
32 | if not query["询问发动技能"]("雷击") then
33 | return
34 | end
35 | local target = query["选择一名玩家"](game:get_other_players(self), "雷击")
36 | local id = game:judge(target, "雷击")
37 | if not (target:has_skill("天妒") and target.skill["天妒"](target, id)) then
38 | helper.insert(deck.discard_pile, id)
39 | end
40 | if target:get_suit(id) == macro.suit.spade then
41 | target:sub_life({causer = self, type = macro.sub_life_type.damage, name = "雷击", card_id = nil, n = 2})
42 | elseif target:get_suit(id) == macro.suit.club then
43 | self:add_life(1)
44 | target:sub_life({causer = self, type = macro.sub_life_type.damage, name = "雷击", card_id = nil, n = 1})
45 | end
46 | end
47 |
48 | return ZhangJiao
--------------------------------------------------------------------------------
/hero/xiao_qiao.lua:
--------------------------------------------------------------------------------
1 | XiaoQiao = class(Player)
2 |
3 | function XiaoQiao:get_suit(id)
4 | if self:has_skill("红颜") then
5 | if resmng[id].suit == macro.suit.spade and not helper.element(self.judge_cards, id) then
6 | return macro.suit.heart
7 | end
8 | end
9 | return resmng[id].suit
10 | end
11 |
12 | XiaoQiao.skill["受到伤害时"] = function (self, causer, responder, t)
13 | if self:has_skill("天香") then
14 | self.skill["天香"](self, responder, t)
15 | end
16 | end
17 |
18 | XiaoQiao.skill["天香"] = function (self, responder, t)
19 | if self ~= responder then
20 | return
21 | end
22 | local func = function (id) return self:get_suit(id) == macro.suit.heart end
23 | if not next(self:get_cards(func, true)) then
24 | return
25 | end
26 | if not query["询问发动技能"]("天香") then
27 | return
28 | end
29 | t.settle_finish = true
30 | local targets = game:get_other_players(self)
31 | local target = query["选择一名玩家"](targets, "天香")
32 | local id = opt["弃置一张牌"](self, self, "天香", true, false, false, func)
33 | if query["二选一"]("天香") then
34 | target:sub_life({causer = target, type = macro.sub_life_type.damage, name = "天香", card_id = nil, n = 1})
35 | if target:check_alive() then
36 | local n = target.life_limit - target.life
37 | if n > 5 then
38 | n = 5
39 | end
40 | helper.insert(target.hand_cards, deck:draw(n))
41 | end
42 | else
43 | target:sub_life({causer = nil, type = macro.sub_life_type.life_loss, name = "天香", card_id = nil, n = 1})
44 | if target:check_alive() then
45 | helper.remove(deck.discard_pile, id)
46 | helper.insert(target.hand_cards, id)
47 | end
48 | end
49 | end
50 |
51 | return XiaoQiao
--------------------------------------------------------------------------------
/hero/diao_chan.lua:
--------------------------------------------------------------------------------
1 | DiaoChan = class(Player)
2 |
3 | DiaoChan.skill["回合结束阶段"] = function (self)
4 | if self:has_skill("闭月") then
5 | self.skill["闭月"](self)
6 | end
7 | end
8 |
9 | DiaoChan.skill["闭月"] = function (self)
10 | if not query["询问发动技能"]("闭月") then
11 | return
12 | end
13 | helper.insert(self.hand_cards, deck:draw(1))
14 | end
15 |
16 | DiaoChan.get_t["离间"] = function (self)
17 | local t = {}
18 | for _, player in ipairs(game:get_other_players(self)) do
19 | if player.sex == "man" then
20 | local targets = {}
21 | for _, player1 in ipairs(game:get_other_players(player)) do
22 | if player1.sex == "woman" then
23 | goto continue
24 | end
25 | if player1:has_skill("空城") and #player1.hand_cards == 0 then
26 | goto continue
27 | end
28 | helper.insert(targets, player1)
29 | ::continue::
30 | end
31 | if #targets > 0 then
32 | t[player] = targets
33 | end
34 | end
35 | end
36 | return t
37 | end
38 |
39 | DiaoChan.check_skill["离间"] = function (self)
40 | if self:has_flag("使用过离间") then
41 | return false
42 | end
43 | if self:get_cards(nil, true, true) == 0 then
44 | return false
45 | end
46 | if not next(self.get_t["离间"](self)) then
47 | return false
48 | end
49 | return true
50 | end
51 |
52 | DiaoChan.skill["离间"] = function (self)
53 | self.flags["使用过离间"] = true
54 | opt["弃置一张牌"](self, self, "离间", true, true)
55 | local t = self.get_t["离间"](self)
56 | local targets = helper.get_keys(t)
57 | local target1 = query["选择一名玩家"](targets, "离间")
58 | local target2 = query["选择一名玩家"](t[target1], "离间")
59 | target2.respond["决斗"](target2, target1, nil)
60 | end
61 |
62 | return DiaoChan
--------------------------------------------------------------------------------
/hero/cai_wen_ji.lua:
--------------------------------------------------------------------------------
1 | CaiWenJi = class(Player)
2 |
3 | CaiWenJi.skill["受到伤害后"] = function (self, causer, responder, t)
4 | if self:has_skill("悲歌") then
5 | self.skill["悲歌"](self, causer, responder, t)
6 | end
7 | end
8 |
9 | CaiWenJi.skill["悲歌"] = function (self, causer, responder, t)
10 | if t.name ~= "杀" then
11 | return
12 | end
13 | if not next(self:get_cards(nil, true, true)) then
14 | return
15 | end
16 | if not query["询问发动技能"]("悲歌") then
17 | return
18 | end
19 | opt["弃置一张牌"](self, self, "悲歌", true, true)
20 | local id = game:judge(responder, "悲歌")
21 | if not (responder:has_skill(responder, "天妒") and responder.skill["天妒"](responder, id)) then
22 | helper.insert(deck.discard_pile, id)
23 | end
24 | local suit = responder:get_suit(id)
25 | if suit == macro.suit.heart then
26 | responder:add_life(1)
27 | elseif suit == macro.suit.diamond then
28 | helper.insert(responder.hand_cards, deck:draw(2))
29 | elseif suit == macro.suit.club and causer:check_alive() then
30 | if #causer:get_cards(nil, true, true) >= 2 then
31 | opt["弃置n张牌"](causer, causer, "悲歌", true, true, 2)
32 | elseif #causer:get_cards(nil, true, true) == 1 then
33 | opt["弃置一张牌"](causer, causer, "悲歌", true, true)
34 | end
35 | elseif suit == macro.suit.spade and causer:check_alive() then
36 | causer:flip()
37 | end
38 | end
39 |
40 | CaiWenJi.skill["断肠"] = function (self, causer)
41 | if not query["询问发动技能"]("断肠") then
42 | return
43 | end
44 | helper.clear(causer.skills)
45 | if causer["田"] and next(causer["田"]) then
46 | helper.insert(deck.discard_pile, causer["田"])
47 | helper.clear(causer["田"])
48 | elseif causer["创"] and next(causer["创"]) then
49 | helper.insert(deck.discard_pile, causer["创"])
50 | helper.clear(causer["创"])
51 | end
52 | end
53 |
54 | return CaiWenJi
--------------------------------------------------------------------------------
/hero/yuan_shao.lua:
--------------------------------------------------------------------------------
1 | YuanShao = class(Player)
2 |
3 | YuanShao.get_t["乱击"] = function (self)
4 | local t = {}
5 | local suits = {macro.suit.spade, macro.suit.heart, macro.suit.club, macro.suit.diamond}
6 | for _, suit in ipairs(suits) do
7 | local cards = {}
8 | for _, id in ipairs(self.hand_cards) do
9 | if resmng[id].suit == suit then
10 | helper.insert(cards, id)
11 | end
12 | end
13 | if #cards < 2 then
14 | goto continue
15 | end
16 | local has_targets = false
17 | for _, target in ipairs(game:get_other_players(self)) do
18 | if not (target:has_skill("帷幕") and (suit == macro.suit.spade or suit == macro.suit.club)) then
19 | has_targets = true
20 | break
21 | end
22 | end
23 | if not has_targets then
24 | goto continue
25 | end
26 | t[suit] = cards
27 | ::continue::
28 | end
29 | return t
30 | end
31 |
32 | YuanShao.check_skill["乱击"] = function (self)
33 | if not next(self.get_t["急袭"](self)) then
34 | return false
35 | end
36 | return true
37 | end
38 |
39 | YuanShao.skill["乱击"] = function (self)
40 | local t = self.get_t["乱击"](self)
41 | local suits = helper.get_keys(t)
42 | local suit = query["乱击-选择花色"](suits)
43 | local id1 = query["选择一张牌"](t[suit], "乱击")
44 | helper.remove(t[suit], id1)
45 | local id2 = query["选择一张牌"](t[suit], "乱击")
46 | local ids = {id1, id2}
47 | helper.remove(self.hand_cards, ids)
48 | self:before_settle(ids)
49 | local settle_players = game:get_settle_players_except_self(self)
50 | for _, player in ipairs(settle_players) do
51 | if player:check_alive() then
52 | if not (player:has_skill("帷幕") and self:get_color(id1) == macro.color.black) then
53 | player.respond["万箭齐发"](player, self, ids)
54 | end
55 | end
56 | end
57 | self:after_settle(ids)
58 | end
59 |
60 | return YuanShao
--------------------------------------------------------------------------------
/hero/guan_yu.lua:
--------------------------------------------------------------------------------
1 | GuanYu = class(Player)
2 |
3 | GuanYu.check_skill["武圣"] = function (self)
4 | local cards = {}
5 | local func = function(id) return self:get_color(id) == macro.color.red end
6 | if self:check_can_kill() and next(self:get_players_in_attack_range()) then
7 | helper.insert(cards, self:get_cards(func, true, true))
8 | end
9 | if self.arm and self:get_color(self.arm) == macro.color.red then
10 | local arm_id = self.arm
11 | self:take_off_equip(arm_id)
12 | if not (self:check_can_kill() and next(self:get_players_in_attack_range())) then
13 | helper.remove(cards, arm_id)
14 | end
15 | self:put_on_equip(arm_id)
16 | end
17 | if not next(cards) then
18 | return false
19 | end
20 | return true
21 | end
22 |
23 | GuanYu.skill["武圣"] = function (self, reason, ...)
24 | local func = function(id) return self:get_color(id) == macro.color.red end
25 | if reason == "南蛮入侵" or reason == "决斗" then
26 | opt["弃置一张牌"](self, self, "武圣", true, true, false, func)
27 | else
28 | local cards = self:get_cards(func, true, true)
29 | if reason == "正常出杀" then
30 | if self.arm and self:get_color(self.arm) == macro.color.red then
31 | local arm_id = self.arm
32 | self:take_off_equip(arm_id)
33 | if not (self:check_can_kill() and next(self:get_players_in_attack_range())) then
34 | helper.remove(cards, arm_id)
35 | end
36 | self:put_on_equip(arm_id)
37 | end
38 | end
39 | local id = query["选择一张牌"](cards, "武圣")
40 | if helper.element(self:get_equip_cards(), id) then
41 | self:take_off_equip(id)
42 | elseif helper.element(self.hand_cards, id) then
43 | helper.remove(self.hand_cards, id)
44 | end
45 | self:before_settle(id)
46 | self.use["杀"](self, {is_transfer = true, transfer_type = "武圣", id = id}, reason, ...)
47 | self:after_settle(id)
48 | end
49 | end
50 |
51 | return GuanYu
--------------------------------------------------------------------------------
/hero/yan_liang_wen_chou.lua:
--------------------------------------------------------------------------------
1 | YanLiangWenChou = class(Player)
2 |
3 | function YanLiangWenChou:draw()
4 | text("现在是%s的摸牌阶段", self.name)
5 | self.skill["摸牌阶段开始前"](self)
6 | if self:has_flag("跳过摸牌") then
7 | return
8 | end
9 | if self:has_skill("双雄") then
10 | self.skill["双雄-摸牌阶段"](self)
11 | else
12 | helper.insert(self.hand_cards, deck:draw(2))
13 | end
14 | end
15 |
16 | YanLiangWenChou.skill["双雄-摸牌阶段"] = function (self)
17 | if not query["询问发动技能"]("双雄") then
18 | return false
19 | end
20 | local id = game:judge(self, "双雄")
21 | helper.insert(self.hand_cards, id)
22 | self.flags["双雄"] = self:get_color(id)
23 | end
24 |
25 | YanLiangWenChou.get_t["双雄"] = function (self)
26 | local t = {}
27 | local cards = {}
28 | for _, id in ipairs(self.hand_cards) do
29 | if self:get_color(id) ~= self.flags["双雄"] then
30 | helper.insert(cards, id)
31 | end
32 | end
33 | for _, id in ipairs(cards) do
34 | local targets = {}
35 | for _, target in ipairs(game:get_other_players(self)) do
36 | if target:has_skill("帷幕") and self:get_color(id) == macro.color.black then
37 | goto continue
38 | end
39 | if target:has_skill("空城") and #target.hand_cards == 0 then
40 | goto continue
41 | end
42 | helper.insert(targets, target)
43 | ::continue::
44 | end
45 | if next(targets) then
46 | t[id] = targets
47 | end
48 | end
49 | return t
50 | end
51 |
52 | YanLiangWenChou.check_skill["双雄"] = function (self)
53 | if not self:has_flag("双雄") then
54 | return false
55 | end
56 | if not next(self.get_t["双雄"](self)) then
57 | return false
58 | end
59 | return true
60 | end
61 |
62 | YanLiangWenChou.skill["双雄"] = function (self)
63 | local t = self.get_t["双雄"](self)
64 | local cards = helper.get_keys(t)
65 | local id = query["选择一张牌"](cards, "双雄")
66 | helper.remove(self.hand_cards, id)
67 | local target = query["选择一名玩家"](t[id], "双雄")
68 | target.skill["决斗-成为目标后"](target, self, id)
69 | self:before_settle(id)
70 | target.respond["决斗"](target, self, id)
71 | self:after_settle(id)
72 | end
73 |
74 | return YanLiangWenChou
--------------------------------------------------------------------------------
/hero/huang_zhong.lua:
--------------------------------------------------------------------------------
1 | HuangZhong = class(Player)
2 |
3 | function HuangZhong:get_min_dis_targets()
4 | local targets = {}
5 | local min_dis
6 | for _, target in ipairs(game:get_other_players(self)) do
7 | local dis = self:get_distance(target)
8 | if next(targets) then
9 | if dis < min_dis then
10 | min_dis = dis
11 | targets = {target}
12 | elseif dis == min_dis then
13 | helper.insert(targets, target)
14 | end
15 | else
16 | min_dis = dis
17 | targets = {target}
18 | end
19 | end
20 | for _, target in ipairs(targets) do
21 | if target:has_skill("空城") and #target.hand_cards == 0 then
22 | helper.remove(targets, target)
23 | end
24 | end
25 | return targets
26 | end
27 |
28 | HuangZhong.respond["乱武"] = function (self)
29 | local targets = self:get_min_dis_targets()
30 | local func = function (id) return resmng[id].name == "杀" end
31 | local cards = self:get_cards(func, true)
32 | local t = {}
33 | for _, id in ipairs(cards) do
34 | local targets1 = {}
35 | for _, target in ipairs(targets) do
36 | if resmng[id].points > self:get_distance(target) then
37 | helper.insert(targets1, target)
38 | elseif helper.element(self:get_players_in_attack_range(), target) then
39 | helper.insert(targets1, target)
40 | end
41 | end
42 | if next(targets1) then
43 | t[id] = targets1
44 | end
45 | end
46 | if next(t) then
47 | local cards1 = helper.get_keys(t)
48 | local id = query["询问出牌"](cards1, {}, "杀")
49 | if resmng.check_card(id) then
50 | helper.remove(self.hand_cards, id)
51 | self:before_settle(id)
52 | self.use["杀"](self, {id = id}, "乱武", t[id])
53 | self:after_settle(id)
54 | elseif resmng.check_skill(id) then
55 | self.skill["杀"](self, id, "乱武", t[id])
56 | else
57 | self:sub_life({causer = self, type = macro.sub_life_type.life_loss, name = "乱武", card_id = nil, n = 1})
58 | end
59 | else
60 | self:sub_life({causer = self, type = macro.sub_life_type.life_loss, name = "乱武", card_id = nil, n = 1})
61 | end
62 | end
63 |
64 | return HuangZhong
--------------------------------------------------------------------------------
/hero/xvn_yu.lua:
--------------------------------------------------------------------------------
1 | XvnYu = class(Player)
2 |
3 | XvnYu.get_t["驱虎"] = function (self)
4 | local t = {}
5 | for _, target in ipairs(game:get_other_players(self)) do
6 | if next(target.hand_cards) and target.life > self.life then
7 | local targets = target:get_players_in_attack_range()
8 | if next(targets) then
9 | t[target] = targets
10 | end
11 | end
12 | end
13 | return t
14 | end
15 |
16 | XvnYu.check_skill["驱虎"] = function (self)
17 | if self:has_flag("使用过驱虎") then
18 | return false
19 | end
20 | if not next(self.get_t["驱虎"](self)) then
21 | return false
22 | end
23 | return true
24 | end
25 |
26 | XvnYu.skill["驱虎"] = function (self)
27 | self.flags["使用过驱虎"] = true
28 | local t = self.get_t["驱虎"](self)
29 | local targets = helper.get_keys(t)
30 | local target = query["选择一名玩家"](targets, "驱虎")
31 | if game:compare_points(self, target) then
32 | local target1 = query["选择一名玩家"](t[target], "驱虎")
33 | target1:sub_life({causer = target, type = macro.sub_life_type.damage, name = "驱虎", card_id = nil, n = 1})
34 | else
35 | self:sub_life({causer = target, type = macro.sub_life_type.damage, name = "驱虎", card_id = nil, n = 1})
36 | end
37 | end
38 |
39 | XvnYu.skill["受到伤害后"] = function (self, causer, responder, t)
40 | if self:has_skill("节命") then
41 | self.skill["节命"](self, responder, t)
42 | end
43 | end
44 |
45 | XvnYu.get_targets["节命"] = function()
46 | local targets = {}
47 | for _, target in ipairs(game.players) do
48 | if #target.hand_cards < target.life_limit and #target.hand_cards < 5 then
49 | helper.insert(targets, target)
50 | end
51 | end
52 | return targets
53 | end
54 |
55 | XvnYu.skill["节命"] = function (self, responder, t)
56 | if responder ~= self then
57 | return
58 | end
59 | local targets = self.get_targets["节命"]()
60 | if not next(targets) then
61 | return
62 | end
63 | if not query["询问发动技能"]("节命") then
64 | return
65 | end
66 | for _ = 1, t.n, 1 do
67 | local target = query["选择一名玩家"](targets, "节命")
68 | local limit = target.life_limit <= 5 and target.life_limit or 5
69 | helper.insert(target.hand_cards, deck:draw(limit - #target.hand_cards))
70 | targets = self.get_targets["节命"]()
71 | if not next(targets) then
72 | return
73 | end
74 | end
75 | end
76 |
77 | return XvnYu
--------------------------------------------------------------------------------
/hero/da_qiao.lua:
--------------------------------------------------------------------------------
1 | DaQiao = class(Player)
2 |
3 | DaQiao.get_t["国色"] = function (self)
4 | local t = {}
5 | local func = function (v) return resmng[v].suit == macro.suit.diamond end
6 | local cards = self:get_cards(func, true, true)
7 | for _, id in ipairs(cards) do
8 | local targets = {}
9 | for _, player in ipairs(game:get_other_players(self)) do
10 | local name = game:get_judge_card_name(id)
11 | -- 被转移目标判定区内不能有同名判定牌
12 | for _, id1 in ipairs(player.judge_cards) do
13 | if name == game:get_judge_card_name(id1) then
14 | goto continue
15 | end
16 | end
17 | -- 不能把乐不思蜀转给陆逊
18 | if name == "乐不思蜀" and player:has_skill("谦逊") then
19 | goto continue
20 | end
21 | -- 不能把黑色牌转给贾诩
22 | if player:has_skill("帷幕") and self:get_color(id) == macro.color.black then
23 | goto continue
24 | end
25 | helper.insert(targets, player)
26 | ::continue::
27 | end
28 | if #targets > 0 then
29 | t[id] = targets
30 | end
31 | end
32 | return t
33 | end
34 |
35 | DaQiao.check_skill["国色"] = function (self)
36 | if not next(self.get_t["国色"](self)) then
37 | return false
38 | end
39 | return true
40 | end
41 |
42 | DaQiao.skill["国色"] = function (self)
43 | local t = self.get_t["国色"](self)
44 | local cards = helper.get_keys(t)
45 | local id = query["选择一张牌"](cards, "国色")
46 | if helper.element(self.hand_cards, id) then
47 | helper.remove(self.hand_cards, id)
48 | elseif helper.element(self:get_equip_cards(), id) then
49 | self:take_off_equip(id)
50 | end
51 | local target = query["选择一名玩家"](t[id], "国色")
52 | helper.put(target.judge_cards, id)
53 | game.transfer_delay_tactics[id] = "乐不思蜀"
54 | end
55 |
56 | DaQiao.skill["流离"] = function (self, causer)
57 | local targets = self:get_players_in_attack_range()
58 | -- 不能转移给杀的使用者
59 | helper.remove(targets, causer)
60 | -- 不能转移给空城的诸葛亮
61 | for _, target in ipairs(targets) do
62 | if target:has_skill("空城") and #target.hand_cards == 0 then
63 | helper.remove(targets, target)
64 | break
65 | end
66 | end
67 | if not next(targets) then
68 | return
69 | end
70 | if not next(self:get_cards(nil, true, true)) then
71 | return
72 | end
73 | if not query["询问发动技能"]("流离") then
74 | return
75 | end
76 | opt["弃置一张牌"](self, self, "流离", true, true)
77 | local target = query["选择一名玩家"](targets, "流离")
78 | return target
79 | end
80 |
81 | return DaQiao
--------------------------------------------------------------------------------
/hero/deng_ai.lua:
--------------------------------------------------------------------------------
1 | DengAi = class(Player)
2 |
3 | function DengAi:ctor()
4 | self["田"] = {}
5 | end
6 |
7 | function DengAi:get_distance(another)
8 | local dis = Player.get_distance(self, another)
9 | if self:has_skill("屯田") then
10 | dis = dis - #self["田"]
11 | end
12 | return dis > 0 and dis or 0
13 | end
14 |
15 | DengAi.skill["回合开始阶段"] = function (self)
16 | if self:has_skill("凿险") then
17 | self.skill["凿险"](self)
18 | end
19 | end
20 |
21 | DengAi.skill["凿险"] = function (self)
22 | if #self["田"] < 3 then
23 | return
24 | end
25 | if not query["询问发动技能"]("凿险") then
26 | return
27 | end
28 | self.life_limit = self.life_limit - 1
29 | self.life = self.life > self.life_limit and self.life_limit or self.life
30 | helper.remove(self.skills, resmng.get_skill_id("凿险"))
31 | helper.insert(self.skills, resmng.get_skill_id("急袭"))
32 | end
33 |
34 | DengAi.skill["失去手牌"] = function (self, causer, responder, reason)
35 | if self:has_skill("屯田") then
36 | self.skill["屯田"](self, responder)
37 | end
38 | end
39 |
40 | DengAi.skill["失去装备"] = function (self)
41 | if self:has_skill("屯田") then
42 | self.skill["屯田"](self, self)
43 | end
44 | end
45 |
46 | DengAi.skill["屯田"] = function (self, responder)
47 | if self ~= responder then
48 | return
49 | end
50 | if game.whose_turn == self then
51 | return
52 | end
53 | if not query["询问发动技能"]("屯田") then
54 | return
55 | end
56 | local id = game:judge(self, "屯田")
57 | if resmng[id].suit ~= macro.suit.heart then
58 | helper.insert(self["田"], id)
59 | else
60 | helper.insert(deck.discard_pile, id)
61 | end
62 | end
63 |
64 | DengAi.get_t["急袭"] = function (self)
65 | local t = {}
66 | for _, id in ipairs(self["田"]) do
67 | local targets = {}
68 | for _, player in ipairs(game:get_other_players(self)) do
69 | if player:has_skill("帷幕") and self:get_color(id) == macro.color.black then
70 | goto continue
71 | end
72 | if #player:get_cards(nil, true, true, true) == 0 then
73 | goto continue
74 | end
75 | if player:has_skill("谦逊") then
76 | goto continue
77 | end
78 | if self:get_distance(player) > 0 then
79 | goto continue
80 | end
81 | helper.insert(targets, player)
82 | ::continue::
83 | end
84 | if #targets > 0 then
85 | t[id] = targets
86 | end
87 | end
88 | return t
89 | end
90 |
91 | DengAi.check_skill["急袭"] = function (self)
92 | if not next(self.get_t["急袭"](self)) then
93 | return false
94 | end
95 | return true
96 | end
97 |
98 | DengAi.skill["急袭"] = function (self)
99 | local t = self.get_t["急袭"](self)
100 | local cards = helper.get_keys(t)
101 | local id = query["选择一张牌"](cards, "急袭")
102 | helper.remove(self["田"], id)
103 | self:before_settle(id)
104 | local target = query["选择一名玩家"](t[id], "急袭")
105 | target.respond["顺手牵羊"](target, self)
106 | self:after_settle(id)
107 | end
108 |
109 | return DengAi
--------------------------------------------------------------------------------
/hero/jiang_wei.lua:
--------------------------------------------------------------------------------
1 | JiangWei = class(Player)
2 |
3 | JiangWei.skill["回合开始阶段"] = function (self)
4 | if self:has_skill("志继") then
5 | self.skill["志继"](self)
6 | end
7 | if self:has_skill("观星") then
8 | self.skill["观星"](self)
9 | end
10 | end
11 |
12 | JiangWei.skill["志继"] = function (self)
13 | if #self.hand_cards > 0 then
14 | return
15 | end
16 | if not query["询问发动技能"]("志继") then
17 | return
18 | end
19 | if self.life < self.life_limit then
20 | if not query["二选一"]("志继") then
21 | helper.insert(self.hand_cards, deck:draw(2))
22 | else
23 | self:add_life(1)
24 | end
25 | else
26 | helper.insert(self.hand_cards, deck:draw(2))
27 | end
28 | self.life_limit = self.life_limit - 1
29 | self.life = self.life > self.life_limit and self.life_limit or self.life
30 | helper.remove(self.skills, resmng.get_skill_id("志继"))
31 | helper.insert(self.skills, resmng.get_skill_id("观星"))
32 | end
33 |
34 | JiangWei.skill["观星"] = function ()
35 | if not query["询问发动技能"]("观星") then
36 | return
37 | end
38 | local n = #game.players > 5 and 5 or #game.players
39 | local cards = deck:draw(n)
40 | cards = type(cards) == "number" and {cards} or cards
41 | local cards1 = query["观星-调整牌序"](cards)
42 | if query["二选一"]("观星") then
43 | for i, v in ipairs(cards1) do
44 | table.insert(deck.card_pile, i, v)
45 | end
46 | else
47 | helper.insert(deck.card_pile, cards1)
48 | end
49 | end
50 |
51 | JiangWei.get_targets["挑衅"] = function (self)
52 | local targets = {}
53 | for _, target in ipairs(game:get_other_players(self)) do
54 | if helper.element(target:get_players_in_attack_range(), self) then
55 | helper.insert(targets, target)
56 | end
57 | end
58 | return targets
59 | end
60 |
61 | JiangWei.check_skill["挑衅"] = function (self)
62 | if self:has_flag("使用过挑衅") then
63 | return false
64 | end
65 | if not next(self.get_targets["挑衅"](self)) then
66 | return false
67 | end
68 | return true
69 | end
70 |
71 | JiangWei.skill["挑衅"] = function (self)
72 | self.flags["使用过挑衅"] = true
73 | local targets = self.get_targets["挑衅"](self)
74 | local target = query["选择一名玩家"](targets, "挑衅")
75 | local func = function (id) return resmng[id].name == "杀" end
76 | local kills = target:get_cards(func, true, true)
77 | local skills = target:get_skills_can_be_card("杀")
78 | if next(kills) or next(skills) then
79 | if query["二选一"]("挑衅") then
80 | local id = query["询问出牌"](kills, skills, "杀", true)
81 | if resmng.check_card(id) then
82 | helper.remove(target.hand_cards, id)
83 | game.skill["失去手牌"](game, target, target, "使用")
84 | self:before_settle(id)
85 | target.use["杀"](target, {id = id}, "挑衅", self)
86 | self:after_settle(id)
87 | elseif resmng.check_skill(id) then
88 | self.skill["杀"](target, id, "挑衅", self)
89 | end
90 | else
91 | opt["弃置一张牌"](self, target, "挑衅", true, true)
92 | end
93 | else
94 | opt["弃置一张牌"](self, target, "挑衅", true, true)
95 | end
96 | end
97 |
98 | return JiangWei
--------------------------------------------------------------------------------
/hero/sun_ce.lua:
--------------------------------------------------------------------------------
1 | SunCe = class(Player)
2 |
3 | SunCe.skill["回合开始阶段"] = function (self)
4 | if self:has_skill("魂姿") then
5 | self.skill["魂姿"](self)
6 | end
7 | if self:has_skill("英魂") then
8 | self.skill["英魂"](self)
9 | end
10 | end
11 |
12 | SunCe.skill["魂姿"] = function (self)
13 | if self.life > 1 then
14 | return
15 | end
16 | if not query["询问发动技能"]("魂姿") then
17 | return
18 | end
19 | self.life_limit = self.life_limit - 1
20 | self.life = self.life > self.life_limit and self.life_limit or self.life
21 | helper.remove(self.skills, resmng.get_skill_id("魂姿"))
22 | helper.insert(self.skills, resmng.get_skill_id("英姿"))
23 | helper.insert(self.skills, resmng.get_skill_id("英魂"))
24 | end
25 |
26 | function SunCe:draw()
27 | text("现在是%s的摸牌阶段", self.name)
28 | self.skill["摸牌阶段开始前"](self)
29 | if self:has_flag("跳过摸牌") then
30 | return
31 | end
32 | if self:has_skill("英姿") then
33 | self.skill["英姿"](self)
34 | else
35 | helper.insert(self.hand_cards, deck:draw(2))
36 | end
37 | end
38 |
39 | SunCe.skill["英姿"] = function (self)
40 | if not query["询问发动技能"]("英姿") then
41 | helper.insert(self.hand_cards, deck:draw(2))
42 | else
43 | helper.insert(self.hand_cards, deck:draw(3))
44 | end
45 | end
46 |
47 | SunCe.skill["英魂"] = function (self)
48 | local n = self.life_limit - self.life
49 | if n == 0 then
50 | return
51 | end
52 | if not query["询问发动技能"]("英魂") then
53 | return
54 | end
55 | local target = query["选择一名玩家"](game:get_other_players(self), "英魂")
56 | if query["二选一"]("英魂") then
57 | helper.insert(target.hand_cards, deck:draw(n))
58 | opt["弃置一张牌"](target, target, "英魂", true, true)
59 | else
60 | helper.insert(target.hand_cards, deck:draw(1))
61 | local card_n = #target:get_cards(nil, true, true)
62 | n = n > card_n and card_n or n
63 | opt["弃置n张牌"](target, target, "英魂", true, true, n)
64 | end
65 | end
66 |
67 | SunCe.skill["杀-指定目标后"] = function (self, target, t)
68 | if self:has_skill("雌雄双股剑") then
69 | self.skill["雌雄双股剑"](self, target)
70 | end
71 | if self:has_skill("激昂") then
72 | self.skill["激昂"](self, self, "杀", t)
73 | end
74 | end
75 |
76 | SunCe.skill["杀-成为目标后"] = function (self, causer, t)
77 | if self:has_skill("激昂") then
78 | self.skill["激昂"](self, causer, "杀", t)
79 | end
80 | end
81 |
82 | SunCe.skill["决斗-指定目标后"] = function (self, id)
83 | if self:has_skill("激昂") then
84 | self.skill["激昂"](self, self, "决斗", id)
85 | end
86 | end
87 |
88 | SunCe.skill["决斗-成为目标后"] = function (self, causer, id)
89 | if self:has_skill("激昂") then
90 | self.skill["激昂"](self, causer, "决斗", id)
91 | end
92 | end
93 |
94 | SunCe.skill["激昂"] = function (self, causer, reason, args)
95 | local color
96 | if reason == "杀" then
97 | color = causer:get_kill_color(args)
98 | elseif reason == "决斗" then
99 | color = causer:get_color(args)
100 | end
101 | if color ~= macro.color.red then
102 | return
103 | end
104 | if not query["询问发动技能"]("激昂") then
105 | return
106 | end
107 | helper.insert(self.hand_cards, deck:draw(1))
108 | end
109 |
110 | return SunCe
--------------------------------------------------------------------------------
/hero/lu_su.lua:
--------------------------------------------------------------------------------
1 | LuSu = class(Player)
2 |
3 | function LuSu:draw()
4 | text("现在是%s的摸牌阶段", self.name)
5 | self.skill["摸牌阶段开始前"](self)
6 | if self:has_flag("跳过摸牌") then
7 | return
8 | end
9 | if self:has_skill("好施") then
10 | self.skill["好施"](self)
11 | else
12 | helper.insert(self.hand_cards, deck:draw(2))
13 | end
14 | end
15 |
16 | LuSu.skill["好施"] = function (self)
17 | if not query["询问发动技能"]("好施") then
18 | return
19 | end
20 | helper.insert(self.hand_cards, deck:draw(4))
21 | if #self.hand_cards > 5 then
22 | local n = math.floor(#self.hand_cards / 2)
23 | local cards = {}
24 | for _ = 1, n, 1 do
25 | local id = query["选择一张牌"](self.hand_cards, "好施")
26 | helper.remove(self.hand_cards, id)
27 | helper.insert(cards, id)
28 | end
29 | local other_players = game:get_other_players(self)
30 | local min_n = #other_players[1].hand_cards
31 | local targets = {other_players[1]}
32 | for i = 2, #other_players, 1 do
33 | if #other_players[i].hand_cards == min_n then
34 | helper.insert(targets, other_players[i])
35 | elseif #other_players[i].hand_cards < min_n then
36 | min_n = #other_players[i].hand_cards
37 | helper.clear(targets)
38 | helper.insert(targets, other_players)
39 | end
40 | end
41 | local target = query["选择一名玩家"](targets, "好施")
42 | helper.remove(self.hand_cards, cards)
43 | helper.insert(target.hand_cards, cards)
44 | end
45 | end
46 |
47 | LuSu.get_t["缔盟"] = function (self)
48 | local others1 = game:get_other_players(self)
49 | if #others1 < 2 then
50 | return {}
51 | end
52 | local t = {}
53 | for _, target in ipairs(others1) do
54 | local targets = {}
55 | local others2 = game:get_other_players(target)
56 | helper.remove(others2, self)
57 | for _, target1 in ipairs(others2) do
58 | local n = math.abs(#target.hand_cards - #target1.hand_cards)
59 | local cards = self:get_cards(nil, true, true)
60 | if #cards >= n then
61 | helper.insert(targets, target1)
62 | end
63 | end
64 | if next(targets) then
65 | t[target] = targets
66 | end
67 | end
68 | return t
69 | end
70 |
71 | LuSu.check_skill["缔盟"] = function (self)
72 | if self:has_flag("使用过缔盟") then
73 | return false
74 | end
75 | if not next(self.get_t["缔盟"](self)) then
76 | return false
77 | end
78 | return true
79 | end
80 |
81 | LuSu.skill["缔盟"] = function (self)
82 | self.flags["使用过缔盟"] = true
83 | local t = self.get_t["缔盟"](self)
84 | local targets = helper.get_keys(t)
85 | local target1 = query["选择一名玩家"](targets, "缔盟")
86 | local target2 = query["选择一名玩家"](t[target1], "缔盟")
87 | local n = math.abs(#target1.hand_cards - #target2.hand_cards)
88 | opt["弃置n张牌"](self, self, "缔盟", true, true, n)
89 | local tmp_hand_cards1 = target1.hand_cards
90 | target1.hand_cards = {}
91 | local tmp_hand_cards2 = target2.hand_cards
92 | target2.hand_cards = {}
93 | game.skill["失去手牌"](game, target1, target1, "交换")
94 | game.skill["失去手牌"](game, target2, target2, "交换")
95 | helper.insert(target1.hand_cards, tmp_hand_cards2)
96 | helper.insert(target2.hand_cards, tmp_hand_cards1)
97 | end
98 |
99 | return LuSu
--------------------------------------------------------------------------------
/hero/cao_ren.lua:
--------------------------------------------------------------------------------
1 | CaoRen = class(Player)
2 |
3 | function CaoRen:flip()
4 | if self.toward == macro.toward.up then
5 | self.toward = macro.toward.down
6 | helper.remove(self.skills, resmng[self.hero_id].skills)
7 | -- false表示背面翻回正面,获得武将技能,
8 | else
9 | self.toward = macro.toward.up
10 | helper.insert(self.skills, resmng[self.hero_id].skills)
11 | if self:has_skill("解围") then
12 | self.skill["解围-翻面"](self)
13 | end
14 | end
15 | end
16 |
17 | CaoRen.skill["无懈可击"] = function (self)
18 | self.skill["解围-无懈可击"](self)
19 | end
20 |
21 | CaoRen.skill["解围-无懈可击"] = function (self)
22 | local cards = self:get_equip_cards()
23 | local id = query["选择一张牌"](cards, "解围")
24 | self:take_off_equip(id)
25 | self:before_settle(id)
26 | self:after_settle(id)
27 | end
28 |
29 | local function get_cards_and_targets2(player)
30 | local t = {}
31 | local equip_cards = player:get_equip_cards()
32 | local judge_cards = player.judge_cards
33 | for _, id in ipairs(equip_cards) do
34 | local targets = {}
35 | for _, target in ipairs(game:get_other_players(player)) do
36 | if not target:has_equip(resmng[id].type) then
37 | helper.insert(targets, target)
38 | end
39 | end
40 | if #targets > 0 then
41 | t[id] = targets
42 | end
43 | end
44 | for _, id in ipairs(judge_cards) do
45 | local targets = {}
46 | for _, target in ipairs(game:get_other_players(player)) do
47 | local name = game:get_judge_card_name(id)
48 | -- 被转移目标判定区内不能有同名判定牌
49 | for _, id1 in ipairs(target.judge_cards) do
50 | if name == game:get_judge_card_name(id1) then
51 | goto continue
52 | end
53 | end
54 | -- 不能把乐不思蜀转给陆逊
55 | if name == "乐不思蜀" and target:has_skill("谦逊") then
56 | goto continue
57 | end
58 | -- 不能把黑色牌转给贾诩
59 | if target:has_skill("帷幕") and player:get_color(id) == macro.color.black then
60 | goto continue
61 | end
62 | helper.insert(targets, target)
63 | ::continue::
64 | end
65 | if #targets > 0 then
66 | t[id] = targets
67 | end
68 | end
69 | return t
70 | end
71 |
72 | local function get_targets1_and_cards_and_targets2()
73 | local t = {}
74 | for _, player in ipairs(game.players) do
75 | local t1 = get_cards_and_targets2(player)
76 | if next(t1) then
77 | t[player] = t1
78 | end
79 | end
80 | return t
81 | end
82 |
83 | CaoRen.get_t["解围-翻面"] = function (self)
84 | local t = {}
85 | for _, id in ipairs(self.hand_cards) do
86 | local t1 = get_targets1_and_cards_and_targets2()
87 | if next(t1) then
88 | t[id] = t1
89 | end
90 | end
91 | for _, id in ipairs(self:get_equip_cards()) do
92 | self:take_off_equip(id)
93 | local t1 = get_targets1_and_cards_and_targets2()
94 | if next(t1) then
95 | t[id] = t1
96 | end
97 | self:put_on_equip(id)
98 | end
99 | return t
100 | end
101 |
102 | CaoRen.skill["解围-翻面"] = function (self)
103 | local t = self.get_t["解围-翻面"](self)
104 | if not next(t) then
105 | return
106 | end
107 | if not query["询问发动技能"]("解围") then
108 | return
109 | end
110 | local can_discard_cards = helper.get_keys(t)
111 | local func = function (id) return helper.element(can_discard_cards, id) end
112 | local discard_id = opt["弃置一张牌"](self, self, "解围", true, true, false, func)
113 | local targets = helper.get_keys(t[discard_id])
114 | local target = query["选择一名玩家"](targets, "解围")
115 | local can_move_cards = helper.get_keys(t[discard_id][target])
116 | local move_card_id = query["选择一张牌"](can_move_cards, "解围")
117 | local target1 = query["选择一名玩家"](t[discard_id][target][move_card_id], "解围")
118 | if helper.element(target:get_equip_cards(), move_card_id) then
119 | target:take_off_equip(move_card_id)
120 | target.skill["失去装备"](target)
121 | target1:put_on_equip(move_card_id)
122 | else
123 | helper.remove(target.judge_cards, move_card_id)
124 | helper.put(target1.judge_cards, move_card_id)
125 | end
126 | end
127 |
128 | CaoRen.skill["回合结束阶段"] = function (self)
129 | if self:has_skill("据守") then
130 | self.skill["据守"](self)
131 | end
132 | end
133 |
134 | CaoRen.skill["据守"] = function (self)
135 | if not query["询问发动技能"]("据守") then
136 | return
137 | end
138 | helper.insert(self.hand_cards, deck:draw(4))
139 | self:flip()
140 | local id = query["选择一张牌"](self.hand_cards, "据守")
141 | helper.remove(self.hand_cards, id)
142 | if resmng[id].type ~= "basic" and resmng[id].type ~= "tactic" then
143 | self:put_on_equip(id)
144 | else
145 | helper.insert(deck.discard_pile, id)
146 | end
147 | end
148 |
149 | return CaoRen
--------------------------------------------------------------------------------
/hero/zhang_he.lua:
--------------------------------------------------------------------------------
1 | ZhangHe = class(Player)
2 |
3 | ZhangHe.skill["判定阶段开始前"] = function (self)
4 | if self:has_skill("巧变") then
5 | self.skill["巧变-判定阶段开始前"](self)
6 | end
7 | end
8 |
9 | ZhangHe.skill["巧变-判定阶段开始前"] = function (self)
10 | if not next(self.hand_cards) then
11 | return
12 | end
13 | if not query["询问发动技能"]("巧变") then
14 | return
15 | end
16 | opt["弃置一张牌"](self, self, "巧变", true)
17 | self.flags["跳过判定"] = true
18 | end
19 |
20 | ZhangHe.skill["摸牌阶段开始前"] = function (self)
21 | if self:has_skill("巧变") then
22 | self.skill["巧变-摸牌阶段开始前"](self)
23 | end
24 | end
25 |
26 | ZhangHe.skill["巧变-摸牌阶段开始前"] = function (self)
27 | if not next(self.hand_cards) then
28 | return
29 | end
30 | local targets = {}
31 | for _, player in ipairs(game:get_other_players(self)) do
32 | if #player.hand_cards > 0 then
33 | helper.insert(targets, player)
34 | end
35 | end
36 | if not next(targets) then
37 | return
38 | end
39 | if not query["询问发动技能"]("巧变") then
40 | return
41 | end
42 | opt["弃置一张牌"](self, self, "巧变", true)
43 | self.flags["跳过摸牌"] = true
44 | local target = query["选择一名玩家"](targets, "巧变")
45 | opt["获得一张牌"](self, target, "巧变", true)
46 | helper.remove(targets, target)
47 | if next(targets) then
48 | if not query["二选一"]("是否继续指定抽牌的目标") then
49 | return true
50 | end
51 | local target1 = query["选择一名玩家"](targets, "巧变")
52 | opt["获得一张牌"](self, target1, "巧变", true)
53 | end
54 | end
55 |
56 | ZhangHe.skill["出牌阶段开始前"] = function (self)
57 | if self:has_skill("巧变") then
58 | self.skill["巧变-出牌阶段开始前"](self)
59 | end
60 | end
61 |
62 | local function get_cards_and_targets(player)
63 | local t = {}
64 | local equip_cards = player:get_equip_cards()
65 | local judge_cards = player.judge_cards
66 | for _, id in ipairs(equip_cards) do
67 | local targets = {}
68 | for _, target in ipairs(game:get_other_players(player)) do
69 | if not target:has_equip(resmng[id].type) then
70 | helper.insert(targets, target)
71 | end
72 | end
73 | if #targets > 0 then
74 | t[id] = targets
75 | end
76 | end
77 | for _, id in ipairs(judge_cards) do
78 | local targets = {}
79 | for _, target in ipairs(game:get_other_players(player)) do
80 | local name = game:get_judge_card_name(id)
81 | -- 被转移目标判定区内不能有同名判定牌
82 | for _, id1 in ipairs(target.judge_cards) do
83 | if name == game:get_judge_card_name(id1) then
84 | goto continue
85 | end
86 | end
87 | -- 不能把乐不思蜀转给陆逊
88 | if name == "乐不思蜀" and target:has_skill("谦逊") then
89 | goto continue
90 | end
91 | -- 不能把黑色牌转给贾诩
92 | if target:has_skill("帷幕") and player:get_color(id) == macro.color.black then
93 | goto continue
94 | end
95 | helper.insert(targets, target)
96 | ::continue::
97 | end
98 | if #targets > 0 then
99 | t[id] = targets
100 | end
101 | end
102 | return t
103 | end
104 |
105 | ZhangHe.get_t["巧变-出牌阶段开始前"] = function ()
106 | local t = {}
107 | for _, player in ipairs(game.players) do
108 | local t1 = get_cards_and_targets(player)
109 | if next(t1) then
110 | t[player] = t1
111 | end
112 | end
113 | return t
114 | end
115 |
116 | ZhangHe.skill["巧变-出牌阶段开始前"] = function (self)
117 | if self:has_flag("跳过出牌") then
118 | return
119 | end
120 | if not next(self.hand_cards) then
121 | return
122 | end
123 | local t = self.get_t["巧变-出牌阶段开始前"](self)
124 | if not next(t) then
125 | return
126 | end
127 | if not query["询问发动技能"]("巧变") then
128 | return
129 | end
130 | opt["弃置一张牌"](self, self, "巧变", true)
131 | self.flags["跳过出牌"] = true
132 | local targets = helper.get_keys(t)
133 | local target = query["选择一名玩家"](targets, "巧变")
134 | local id = query["选择一张牌"](helper.get_keys(t[target]), "巧变")
135 | local target1 = query["选择一名玩家"](t[target][id], "巧变")
136 | if helper.element(target:get_equip_cards(), id) then
137 | target:take_off_equip(id)
138 | target.skill["失去装备"](target)
139 | target1:put_on_equip(id)
140 | else
141 | helper.remove(target.judge_cards, id)
142 | helper.put(target1.judge_cards, id)
143 | end
144 | end
145 |
146 | ZhangHe.skill["弃牌阶段开始前"] = function (self)
147 | if self:has_skill("巧变") then
148 | self.skill["巧变-弃牌阶段开始前"](self)
149 | end
150 | end
151 |
152 | ZhangHe.skill["巧变-弃牌阶段开始前"] = function (self)
153 | if not next(self.hand_cards) then
154 | return
155 | end
156 | if not query["询问发动技能"]("巧变") then
157 | return
158 | end
159 | opt["弃置一张牌"](self, self, "巧变", true)
160 | self.flags["跳过弃牌"] = true
161 | end
162 |
163 | return ZhangHe
--------------------------------------------------------------------------------
/helper.lua:
--------------------------------------------------------------------------------
1 | helper = {}
2 |
3 | -- 通用插入函数
4 | function helper.insert(t, v)
5 | if type(v) == "table" then
6 | if v.id then -- v是玩家table,直接插入
7 | table.insert(t, v)
8 | else -- v是其它table,向t中插入v包含的所有元素
9 | for _, v1 in ipairs(v) do
10 | table.insert(t, v1)
11 | end
12 | end
13 | -- v为其它,直接插入
14 | else
15 | table.insert(t, v)
16 | end
17 | end
18 |
19 | -- 通用移除函数
20 | function helper.remove(t, v)
21 | -- v为table,从t中移除v包含的所有元素
22 | if type(v) == "table" then
23 | if v.id then
24 | for i, v1 in ipairs(t) do
25 | if v == v1 then
26 | table.remove(t, i)
27 | return
28 | end
29 | end
30 | else
31 | for _, v1 in ipairs(v) do
32 | for i, v2 in ipairs(t) do
33 | if v2 == v1 then
34 | table.remove(t, i)
35 | break
36 | end
37 | end
38 | end
39 | end
40 | -- v为其它,直接移除
41 | else
42 | for i, v1 in ipairs(t) do
43 | if v == v1 then
44 | table.remove(t, i)
45 | return
46 | end
47 | end
48 | end
49 | end
50 |
51 | -- table t是否包含元素v
52 | function helper.element(t, v)
53 | for _, v1 in ipairs(t) do
54 | if v1 == v then
55 | return true
56 | end
57 | end
58 | end
59 |
60 | -- 清空table,用于清除玩家flags,因为flags中可能有键值对,所以不能用table.remove函数
61 | function helper.clear(t)
62 | for k, _ in pairs(t) do
63 | t[k] = nil
64 | end
65 | end
66 |
67 | -- 获取table中的所有key
68 | function helper.get_keys(t)
69 | local t1 = {}
70 | for k, _ in pairs(t) do
71 | table.insert(t1, k)
72 | end
73 | return t1
74 | end
75 |
76 | -- 进栈
77 | function helper.put(t, v)
78 | table.insert(t, v)
79 | end
80 |
81 | -- 出栈
82 | function helper.pop(t)
83 | table.remove(t)
84 | end
85 |
86 | -- 比较
87 | function helper.equal(a, b)
88 | if type(a) ~= type(b) then
89 | return false
90 | end
91 | if type(a) == "table" then
92 | if #a ~= #b then
93 | return false
94 | end
95 | for i = 1, #a, 1 do
96 | if a[i] ~= b[i] then
97 | return false
98 | end
99 | end
100 | else
101 | return a == b
102 | end
103 | return true
104 | end
105 |
106 | function get_suit_str(suit)
107 | if suit == macro.suit.spade then
108 | return "黑桃"
109 | elseif suit == macro.suit.heart then
110 | return "红桃"
111 | elseif suit == macro.suit.club then
112 | return "梅花"
113 | elseif suit == macro.suit.diamond then
114 | return "方块"
115 | end
116 | end
117 |
118 | -- 通用打印函数
119 | function text(str, ...)
120 | if str then
121 | print(string.format(str, ...))
122 | else
123 | print()
124 | end
125 | end
126 |
127 | function t2s(t)
128 | if not t then
129 | return ""
130 | end
131 | if type(t) == "number" then
132 | t = {t}
133 | end
134 | local s = ""
135 | for _, v in ipairs(t) do
136 | if s ~= "" then
137 | s = s .. " "
138 | end
139 | -- number表示牌或技能
140 | if resmng.check_card(v) then
141 | s = s .. resmng[v].id .. "-" .. resmng[v].name
142 | elseif resmng.check_skill(v) then
143 | s = s .. v .. "-" .. resmng[v]
144 | -- table表示玩家
145 | elseif type(v) == "table" then
146 | s = s .. tostring(v.id) .. "-" .. v.name
147 | end
148 | end
149 | return s
150 | end
151 |
152 | -- 打印对局信息
153 | function print_game_info()
154 | for _, player in ipairs(game.players) do
155 | print_player_info(player)
156 | end
157 | end
158 |
159 | -- 打印玩家信息
160 | function print_player_info(player)
161 | text()
162 | text("ID:%s", player.id)
163 | text("名字:%s", player.name)
164 | text("生命:%d", player.life)
165 | -- text("生命上限:%d", player.life_limit)
166 | -- text("技能:%s", t2s(player.skills))
167 | -- text("手牌:%s", t2s(player.hand_cards))
168 | -- text("武器:%s", t2s(player.arm))
169 | -- text("防具:%s", t2s(player.armor))
170 | -- text("+1马:%s", t2s(player.add_horse))
171 | -- text("-1马:%s", t2s(player.sub_horse))
172 | -- text("判定区:%s", t2s(player.judge_cards))
173 |
174 | if player.life == player.life_limit then
175 | text("生命上限:%d", player.life_limit)
176 | end
177 | if next(player.skills) then
178 | text("技能:%s", t2s(player.skills))
179 | end
180 | if next(player.hand_cards) then
181 | text("手牌:%s", t2s(player.hand_cards))
182 | end
183 | if player.arm then
184 | text("武器:%s", t2s(player.arm))
185 | end
186 | if player.armor then
187 | text("防具:%s", t2s(player.armor))
188 | end
189 | if player.add_horse then
190 | text("+1马:%s", t2s(player.add_horse))
191 | end
192 | if player.sub_horse then
193 | text("-1马:%s", t2s(player.sub_horse))
194 | end
195 | if next(player.judge_cards) then
196 | text("判定区:%s", t2s(player.judge_cards))
197 | end
198 | end
199 |
200 | return helper
--------------------------------------------------------------------------------
/query.lua:
--------------------------------------------------------------------------------
1 | query = {}
2 |
3 | -- query模块用于获取玩家输入返回给调用者,实现I/O层与逻辑层的分离。
4 |
5 | local str = {}
6 |
7 | query["出牌阶段"] = function (player)
8 | text("你的手牌为:%s", t2s(player.hand_cards))
9 | local can_use_cards = player:get_can_use_cards()
10 | text("你可用的手牌为:%s", t2s(can_use_cards))
11 | local can_use_skills = player:get_can_use_skills()
12 | text("你可用的技能为:%s", t2s(can_use_skills))
13 | while true do
14 | text("请输入您想使用的手牌id或想发动的技能id,输入0结束出牌阶段")
15 | local id = io.read("n")
16 | if helper.element(can_use_cards, id) or helper.element(can_use_skills, id) or id == 0 then
17 | return id
18 | else
19 | text("错误输入,请重新输入")
20 | end
21 | end
22 | end
23 |
24 | query["询问出牌"] = function (cards, skills, card_name, must_use)
25 | while true do
26 | if next(cards) then
27 | text("你可以打出的%s为:%s,请输入你想打出的%sid", card_name, t2s(cards), card_name)
28 | end
29 | if next(skills) then
30 | text("你此时可以发动的技能为:%s,请输入你想发动的技能id", t2s(skills))
31 | end
32 | if not must_use then
33 | text("输入0不出%s也不发动技能", card_name)
34 | end
35 | local id = io.read("n")
36 | if not must_use and id == 0 or helper.element(cards, id) or helper.element(skills, id) then
37 | return id
38 | else
39 | text("错误输入,请重新输入")
40 | end
41 | end
42 | end
43 |
44 | query["选择一张牌"] = function (cards, reason)
45 | while true do
46 | text("正在结算%s,", reason)
47 | text("你可以选择的牌为%s:", t2s(cards))
48 | local id = io.read("n")
49 | if helper.element(cards, id) then
50 | return id
51 | else
52 | text("错误输入,请重新输入")
53 | end
54 | end
55 | end
56 |
57 | query["选一张明牌或抽一张暗牌"] = function (hand_cards, other_cards, reason)
58 | while true do
59 | text("正在结算%s,", reason)
60 | if next(other_cards) then
61 | text("你可以选的牌为%s, 请输入你想选的牌id", t2s(other_cards))
62 | end
63 | if next(hand_cards) then
64 | text("输入0随机选一张手牌")
65 | end
66 | local id = io.read("n")
67 | if helper.element(other_cards, id) or next(hand_cards) and id == 0 then
68 | return id
69 | else
70 | text("错误输入,请重新输入")
71 | end
72 | end
73 | end
74 |
75 | query["选择一名玩家"] = function (targets, reason)
76 | while true do
77 | text("正在结算%s", reason)
78 | text("你可以选的目标有%s, 请输入你想选的目标id", t2s(targets))
79 | local target_ids = {}
80 | for _, target in ipairs(targets) do
81 | helper.insert(target_ids, target.id)
82 | end
83 | local id = io.read("n")
84 | if helper.element(target_ids, id) then
85 | return game:get_player(id)
86 | else
87 | text("错误输入,请重新输入")
88 | end
89 | end
90 | end
91 |
92 | query["询问发动技能"] = function (skill_name)
93 | while true do
94 | text("是否发动技能:%s,输入1发动,输入0不发动", skill_name)
95 | local id = io.read("n")
96 | if id == 1 then
97 | return true
98 | elseif id == 0 then
99 | return false
100 | else
101 | text("错误输入,请重新输入")
102 | end
103 | end
104 | end
105 |
106 | str["二选一"] = {}
107 | str["二选一"]["是否继续指定杀的目标"] = "你的杀还可以指定目标,输入1继续指定,输入0不指定"
108 | str["二选一"]["是否继续指定抽牌的目标"] = "你还可以抽其他玩家的手牌,输入1继续,输入0退出"
109 | str["二选一"]["雌雄双股剑"] = "输入1弃一张手牌,输入0让对手摸一张牌"
110 | str["二选一"]["享乐"] = "输入1弃置一张基本牌,输入0该杀无效"
111 | str["二选一"]["刚烈"] = "输入1弃置两张手牌,输入0受到一点伤害"
112 | str["二选一"]["狂骨"] = "输入1回复一点体力,输入0摸一张牌"
113 | str["二选一"]["制衡"] = "输入1继续选择制衡的牌,输入0不选择"
114 | str["二选一"]["天香"] = "输入1让目标受到一点伤害,摸损失的体力值的牌,输入0让目标失去一点体力,获得你弃置的牌"
115 | str["二选一"]["英魂"] = "输入1让目标摸n张弃1张,输入0让目标摸1张弃n张,n为你已损失的体力值"
116 | str["二选一"]["观星"] = "输入1把牌放回牌堆顶,输入0把牌放回牌堆底"
117 | str["二选一"]["志继"] = "输入1摸两张牌,输入0回复1点体力"
118 | str["二选一"]["强袭"] = "输入1失去1点体力,输入0弃置1张装备牌"
119 | str["二选一"]["挑衅"] = "输入1对姜维出杀,输入0被姜维弃置1张牌"
120 | str["二选一"]["仁德"] = "输入1继续发动仁德,输入0不发动"
121 |
122 | query["二选一"] = function (reason)
123 | while true do
124 | text(str["二选一"][reason])
125 | local id = io.read("n")
126 | if id == 1 then
127 | return true
128 | elseif id == 0 then
129 | return false
130 | else
131 | text("错误输入,请重新输入")
132 | end
133 | end
134 | end
135 |
136 | query["选择花色"] = function (suits)
137 | while true do
138 | text("你可以选择的花色为:")
139 | for i, suit in ipairs(suits) do
140 | text("%d-%s", i, get_suit_str(suit))
141 | end
142 | text("请输入你想选的花色id")
143 | local id = io.read("n")
144 | if id >= 1 and id <= #suits then
145 | return suits[id]
146 | else
147 | text("错误输入,请重新输入")
148 | end
149 | end
150 | end
151 |
152 | query["观星-调整牌序"] = function (cards)
153 | local cards1 = {}
154 | while next(cards) do
155 | text("你可以调整顺序的牌有:%s,输入你想放在第%d位的牌的id", t2s(cards), #cards1 + 1)
156 | local id = io.read("n")
157 | if helper.element(cards, id) then
158 | helper.remove(cards ,id)
159 | helper.insert(cards1 ,id)
160 | else
161 | text("错误输入,请重新输入")
162 | end
163 | text("已调整的牌按顺序排列为:%s", t2s(cards1))
164 | end
165 | return cards1
166 | end
167 |
168 | query["奇谋"] = function (life)
169 | text("请输入你想失去的体力点数,当前体力为:%d", life)
170 | return io.read("n")
171 | end
172 |
173 | return query
--------------------------------------------------------------------------------
/game.lua:
--------------------------------------------------------------------------------
1 | Game = class()
2 |
3 | Game.skill = {}
4 |
5 | function Game:init()
6 | self.players = {}
7 | self.whose_turn = nil -- 当前是谁的回合
8 | self.transfer_delay_tactics = {} -- 记录大乔-国色转化的乐不思蜀
9 | self.settling_card = {}
10 | self.finish = false
11 | self.settle_players = {} -- 回合顺序
12 |
13 | local hero_ids = {}
14 | for i = 1, 4, 1 do
15 | local hero_id = math.random(resmng.hero_finish_id - resmng.hero_start_id + 2 - i)
16 | for _, hero_id1 in ipairs(hero_ids) do
17 | if hero_id >= hero_id1 then
18 | hero_id = hero_id + 1
19 | end
20 | end
21 | helper.insert(hero_ids, hero_id)
22 | table.sort(hero_ids)
23 | hero_id = hero_id + resmng.hero_start_id - 1
24 | local hero_class = require("hero." .. resmng[hero_id].module_name)
25 | local player = hero_class.new(i, hero_id, i)
26 | helper.insert(self.players, player)
27 | helper.insert(player.hand_cards, deck:draw(4))
28 | end
29 | end
30 |
31 | function Game:get_player(id)
32 | for _, player in ipairs(self.players) do
33 | if player.id == id then
34 | return player
35 | end
36 | end
37 | end
38 |
39 | function Game:get_other_players(player)
40 | local players = {}
41 | for _, player1 in ipairs(self.players) do
42 | if player1 ~= player then
43 | helper.insert(players, player1)
44 | end
45 | end
46 | return players
47 | end
48 |
49 | function Game:compare_points(player1, player2)
50 | local id1 = query["选择一张牌"](player1.hand_cards, "拼点")
51 | helper.remove(player1.hand_cards, id1)
52 | self.skill["失去手牌"](self, player1, player1, "拼点")
53 | local id2 = query["选择一张牌"](player2.hand_cards, "拼点")
54 | helper.remove(player2.hand_cards, id2)
55 | self.skill["失去手牌"](self, player2, player2, "拼点")
56 | text("%s的点数为:%d", player1.name, resmng[id1].points)
57 | text("%s的点数为:%d", player2.name, resmng[id2].points)
58 | helper.insert(deck.discard_pile, {id1, id2})
59 | return resmng[id1].points > resmng[id2].points
60 | end
61 |
62 | function Game:judge(player, reason)
63 | local id = deck:draw(1)
64 | text("判定牌为%d-%s, 花色为%s, 点数为%d", id, resmng[id].name, get_suit_str(player:get_suit(id)), resmng[id].points)
65 | id = self.skill["改判"](self, player, id, player, reason)
66 | return id
67 | end
68 |
69 | Game.skill["改判"] = function (self, first_settle_player, id, judge_player, reason)
70 | local settle_players = self:get_settle_players(first_settle_player)
71 | for _, settle_player in ipairs(settle_players) do
72 | local id1 = settle_player.skill["改判"](settle_player, id, judge_player, reason)
73 | if id1 then
74 | return self.skill["改判"](self, settle_player, id1, judge_player, reason)
75 | end
76 | end
77 | return id
78 | end
79 |
80 | Game.skill["失去手牌"] = function (self, causer, responder, reason)
81 | local settle_players = self:get_settle_players(self.whose_turn)
82 | for _, player in ipairs(settle_players) do
83 | player.skill["失去手牌"](player, causer, responder, reason)
84 | end
85 | end
86 |
87 | Game.skill["造成伤害时"] = function (self, causer, responder, t)
88 | local settle_players = self:get_settle_players(self.whose_turn)
89 | for _, player in ipairs(settle_players) do
90 | player.skill["造成伤害时"](player, causer, responder, t)
91 | end
92 | end
93 |
94 | Game.skill["受到伤害时"] = function (self, causer, responder, t)
95 | local settle_players = self:get_settle_players(self.whose_turn)
96 | for _, player in ipairs(settle_players) do
97 | player.skill["受到伤害时"](player, causer, responder, t)
98 | end
99 | end
100 |
101 | Game.skill["造成伤害后"] = function (self, causer, responder, t)
102 | local settle_players = self:get_settle_players(self.whose_turn)
103 | for _, player in ipairs(settle_players) do
104 | player.skill["造成伤害后"](player, causer, responder, t)
105 | end
106 | end
107 |
108 | Game.skill["受到伤害后"] = function (self, causer, responder, t)
109 | local settle_players = self:get_settle_players(self.whose_turn)
110 | for _, player in ipairs(settle_players) do
111 | player.skill["受到伤害后"](player, causer, responder, t)
112 | end
113 | end
114 |
115 | function Game:main()
116 | while true do
117 | self.settle_players = self:get_settle_players(self.players[1])
118 | for _, player in ipairs(self.settle_players) do
119 | if not player:check_alive() then
120 | goto continue
121 | end
122 | if player:check_jump_turn() then
123 | goto continue
124 | end
125 | player:before_turn()
126 | player:turn()
127 | if self.finish then
128 | text("恭喜%s杀死所有敌人,赢得最终胜利!", self.players[1].name)
129 | return
130 | end
131 | player:after_turn()
132 | ::continue::
133 | end
134 | end
135 | end
136 |
137 | -- 判定牌可能由大乔-国色转换而来,所以要判断下
138 | function Game:get_judge_card_name(id)
139 | if self.transfer_delay_tactics[id] then
140 | return self.transfer_delay_tactics[id]
141 | else
142 | return resmng[id].name
143 | end
144 | end
145 |
146 | -- 获取一个将玩家按照结算顺序依次排列的列表,
147 | -- 比如有玩家1、2、3、4,输入的player参数为玩家3,
148 | -- 则结算列表为{玩家3,玩家4,玩家1,玩家2}
149 | function Game:get_settle_players(player)
150 | local settle_players = {}
151 | for i = player.order, #self.players, 1 do
152 | helper.insert(settle_players, self.players[i])
153 | end
154 | for i = 1, player.order - 1, 1 do
155 | helper.insert(settle_players, self.players[i])
156 | end
157 | return settle_players
158 | end
159 |
160 | -- 获取一个将玩家按照结算顺序依次排列的列表,
161 | -- 但列表中不包含player代表的玩家
162 | function Game:get_settle_players_except_self(player)
163 | local settle_players = {}
164 | for i = player.order + 1, #self.players, 1 do
165 | helper.insert(settle_players, self.players[i])
166 | end
167 | for i = 1, player.order - 1, 1 do
168 | helper.insert(settle_players, self.players[i])
169 | end
170 | return settle_players
171 | end
172 |
173 | return Game
--------------------------------------------------------------------------------
/opt.lua:
--------------------------------------------------------------------------------
1 | opt = {}
2 |
3 | opt["弃置一张牌"] = function (causer, responder, reason, use_hand_cards, use_equip_cards, use_judge_cards, func)
4 | local cards = {}
5 | local hand_cards = {}
6 | local equip_cards = responder:get_equip_cards()
7 | local judge_cards = responder.judge_cards
8 | if use_hand_cards then
9 | hand_cards = responder.hand_cards
10 | end
11 | if causer == responder then
12 | helper.insert(cards, hand_cards)
13 | end
14 | if use_equip_cards then
15 | helper.insert(cards, equip_cards)
16 | end
17 | if use_judge_cards then
18 | helper.insert(cards, judge_cards)
19 | end
20 | if func then
21 | local cards1 = {}
22 | for _, id in ipairs(cards) do
23 | if func(id) then
24 | helper.insert(cards1, id)
25 | end
26 | end
27 | cards = cards1
28 | end
29 | local id
30 | -- 可选的牌包括别人手牌
31 | if causer ~= responder and use_hand_cards then
32 | id = query["选一张明牌或抽一张暗牌"](hand_cards, cards, reason)
33 | -- 所有可选的牌为明牌,即不包括别人手牌
34 | else
35 | id = query["选择一张牌"](cards, reason)
36 | end
37 | -- 弃装备
38 | if helper.element(equip_cards, id) then
39 | responder:take_off_equip(id)
40 | responder.skill["失去装备"](responder)
41 | -- 弃自己手牌
42 | elseif causer == responder and helper.element(hand_cards, id) then
43 | helper.remove(hand_cards, id)
44 | game.skill["失去手牌"](game, causer, responder, "弃置")
45 | -- 弃别人手牌
46 | elseif causer ~= responder and id== 0 then
47 | local n = math.random(#hand_cards)
48 | id = hand_cards[n]
49 | helper.remove(hand_cards, id)
50 | game.skill["失去手牌"](game, causer, responder, "弃置")
51 | -- 弃判定区的牌
52 | elseif helper.element(judge_cards, id) then
53 | helper.remove(judge_cards, id)
54 | end
55 | helper.insert(deck.discard_pile, id)
56 | return id
57 | end
58 |
59 | opt["获得一张牌"] = function (causer, responder, reason, use_hand_cards, use_equip_cards, use_judge_cards)
60 | local cards = {}
61 | local hand_cards = {}
62 | local equip_cards = responder:get_equip_cards()
63 | local judge_cards = responder.judge_cards
64 | if use_hand_cards then
65 | hand_cards = responder.hand_cards
66 | end
67 | if use_equip_cards then
68 | helper.insert(cards, equip_cards)
69 | end
70 | if use_judge_cards then
71 | helper.insert(cards, judge_cards)
72 | end
73 | local id
74 | -- 可选的牌包括别人手牌
75 | if causer ~= responder and use_hand_cards then
76 | id = query["选一张明牌或抽一张暗牌"](hand_cards, cards, reason)
77 | -- 所有可选的牌为明牌,即不包括别人手牌
78 | else
79 | id = query["选择一张牌"](cards, reason)
80 | end
81 | -- 拿装备
82 | if helper.element(equip_cards, id) then
83 | responder:take_off_equip(id)
84 | responder.skill["失去装备"](responder)
85 | -- 拿别人手牌
86 | elseif id == 0 then
87 | local n = math.random(#hand_cards)
88 | id = hand_cards[n]
89 | helper.remove(hand_cards, id)
90 | game.skill["失去手牌"](game, causer, responder, "获得")
91 | -- 拿判定区的牌
92 | elseif helper.element(judge_cards, id) then
93 | helper.remove(judge_cards, id)
94 | end
95 | helper.insert(causer.hand_cards, id)
96 | end
97 |
98 | opt["弃置n张牌"] = function(causer, responder, reason, use_hand_cards, use_equip_cards, n, func)
99 | local ids = {}
100 | local discard_hand = nil
101 | if causer == responder then
102 | local cards = {}
103 | local equip_cards = responder:get_equip_cards()
104 | if use_hand_cards then
105 | helper.insert(cards, responder.hand_cards)
106 | end
107 | if use_equip_cards then
108 | helper.insert(cards, equip_cards)
109 | end
110 | if func then
111 | local cards1 = {}
112 | for _, id in ipairs(cards) do
113 | if func(id) then
114 | helper.insert(cards1, id)
115 | end
116 | end
117 | cards = cards1
118 | end
119 | for _ = 1, n, 1 do
120 | local id = query["选择一张牌"](cards, reason)
121 | helper.remove(cards, id)
122 | if helper.element(equip_cards, id) then
123 | responder:take_off_equip(id)
124 | else
125 | helper.remove(responder.hand_cards, id)
126 | discard_hand = true
127 | end
128 | helper.insert(ids, id)
129 | end
130 | if discard_hand then
131 | game.skill["失去手牌"](game, causer, responder, "弃置")
132 | end
133 | for _, id in ipairs(ids) do
134 | if helper.element(equip_cards, id) then
135 | responder.skill["失去装备"](responder)
136 | end
137 | end
138 | else
139 | local cards
140 | local hand_cards = {}
141 | local equip_cards = responder:get_equip_cards()
142 | if use_hand_cards then
143 | helper.insert(hand_cards, responder.hand_cards)
144 | end
145 | if use_equip_cards then
146 | helper.insert(cards, equip_cards)
147 | end
148 | if func then
149 | local hand_cards1 = {}
150 | for _, id in ipairs(hand_cards) do
151 | if func(id) then
152 | helper.insert(hand_cards1, id)
153 | end
154 | end
155 | hand_cards = hand_cards1
156 | local cards1 = {}
157 | for _, id in ipairs(cards) do
158 | if func(id) then
159 | helper.insert(cards1, id)
160 | end
161 | end
162 | cards = cards1
163 | end
164 | for _ = 1, n, 1 do
165 | local id = query["选一张明牌或抽一张暗牌"](hand_cards, cards, reason)
166 | if helper.element(cards, id) then
167 | responder:take_off_equip(id)
168 | helper.remove(cards, id)
169 | else
170 | local n1 = math.random(#hand_cards)
171 | id = hand_cards[n1]
172 | helper.remove(responder.hand_cards, id)
173 | helper.remove(hand_cards, id)
174 | discard_hand = true
175 | end
176 | helper.insert(ids, id)
177 | end
178 | if discard_hand then
179 | game.skill["失去手牌"](game, causer, responder, "弃置")
180 | end
181 | for _, id in ipairs(ids) do
182 | if helper.element(equip_cards, id) then
183 | responder.skill["失去装备"](responder)
184 | end
185 | end
186 | end
187 | helper.insert(deck.discard_pile, ids)
188 | return ids
189 | end
190 |
--------------------------------------------------------------------------------
/resmng.lua:
--------------------------------------------------------------------------------
1 | -- 配置文件
2 | resmng = {}
3 |
4 | resmng.card_start_id = 1
5 | resmng.card_finish_id= 108
6 | resmng.hero_start_id = 201
7 | resmng.hero_finish_id= 253
8 | resmng.skill_start_id = 301
9 | resmng.skill_finish_id= 396
10 |
11 | -- 牌的配置
12 | resmng[1] = {name = "杀", type = "basic", suit = 0, points = 7, id = 1}
13 | resmng[2] = {name = "杀", type = "basic", suit = 0, points = 8, id = 2}
14 | resmng[3] = {name = "杀", type = "basic", suit = 0, points = 8, id = 3}
15 | resmng[4] = {name = "杀", type = "basic", suit = 0, points = 9, id = 4}
16 | resmng[5] = {name = "杀", type = "basic", suit = 0, points = 9, id = 5}
17 | resmng[6] = {name = "杀", type = "basic", suit = 0, points = 10, id = 6}
18 | resmng[7] = {name = "杀", type = "basic", suit = 0, points = 10, id = 7}
19 | resmng[8] = {name = "杀", type = "basic", suit = 2, points = 2, id = 8}
20 | resmng[9] = {name = "杀", type = "basic", suit = 2, points = 3, id = 9}
21 | resmng[10] = {name = "杀", type = "basic", suit = 2, points = 4, id = 10}
22 | resmng[11] = {name = "杀", type = "basic", suit = 2, points = 5, id = 11}
23 | resmng[12] = {name = "杀", type = "basic", suit = 2, points = 6, id = 12}
24 | resmng[13] = {name = "杀", type = "basic", suit = 2, points = 7, id = 13}
25 | resmng[14] = {name = "杀", type = "basic", suit = 2, points = 8, id = 14}
26 | resmng[15] = {name = "杀", type = "basic", suit = 2, points = 8, id = 15}
27 | resmng[16] = {name = "杀", type = "basic", suit = 2, points = 9, id = 16}
28 | resmng[17] = {name = "杀", type = "basic", suit = 2, points = 9, id = 17}
29 | resmng[18] = {name = "杀", type = "basic", suit = 2, points = 10, id = 18}
30 | resmng[19] = {name = "杀", type = "basic", suit = 2, points = 10, id = 19}
31 | resmng[20] = {name = "杀", type = "basic", suit = 2, points = 11, id = 20}
32 | resmng[21] = {name = "杀", type = "basic", suit = 2, points = 11, id = 21}
33 | resmng[22] = {name = "杀", type = "basic", suit = 1, points = 10, id = 22}
34 | resmng[23] = {name = "杀", type = "basic", suit = 1, points = 10, id = 23}
35 | resmng[24] = {name = "杀", type = "basic", suit = 1, points = 11, id = 24}
36 | resmng[25] = {name = "杀", type = "basic", suit = 3, points = 6, id = 25}
37 | resmng[26] = {name = "杀", type = "basic", suit = 3, points = 7, id = 26}
38 | resmng[27] = {name = "杀", type = "basic", suit = 3, points = 8, id = 27}
39 | resmng[28] = {name = "杀", type = "basic", suit = 3, points = 9, id = 28}
40 | resmng[29] = {name = "杀", type = "basic", suit = 3, points = 10, id = 29}
41 | resmng[30] = {name = "杀", type = "basic", suit = 3, points = 13, id = 30}
42 | resmng[31] = {name = "闪", type = "basic", suit = 1, points = 2, id = 31}
43 | resmng[32] = {name = "闪", type = "basic", suit = 1, points = 2, id = 32}
44 | resmng[33] = {name = "闪", type = "basic", suit = 1, points = 13, id = 33}
45 | resmng[34] = {name = "闪", type = "basic", suit = 3, points = 2, id = 34}
46 | resmng[35] = {name = "闪", type = "basic", suit = 3, points = 2, id = 35}
47 | resmng[36] = {name = "闪", type = "basic", suit = 3, points = 3, id = 36}
48 | resmng[37] = {name = "闪", type = "basic", suit = 3, points = 4, id = 37}
49 | resmng[38] = {name = "闪", type = "basic", suit = 3, points = 5, id = 38}
50 | resmng[39] = {name = "闪", type = "basic", suit = 3, points = 6, id = 39}
51 | resmng[40] = {name = "闪", type = "basic", suit = 3, points = 7, id = 40}
52 | resmng[41] = {name = "闪", type = "basic", suit = 3, points = 8, id = 41}
53 | resmng[42] = {name = "闪", type = "basic", suit = 3, points = 9, id = 42}
54 | resmng[43] = {name = "闪", type = "basic", suit = 3, points = 10, id = 43}
55 | resmng[44] = {name = "闪", type = "basic", suit = 3, points = 11, id = 44}
56 | resmng[45] = {name = "闪", type = "basic", suit = 3, points = 11, id = 45}
57 | resmng[46] = {name = "桃", type = "basic", suit = 1, points = 3, id = 46}
58 | resmng[47] = {name = "桃", type = "basic", suit = 1, points = 4, id = 47}
59 | resmng[48] = {name = "桃", type = "basic", suit = 1, points = 6, id = 48}
60 | resmng[49] = {name = "桃", type = "basic", suit = 1, points = 7, id = 49}
61 | resmng[50] = {name = "桃", type = "basic", suit = 1, points = 8, id = 50}
62 | resmng[51] = {name = "桃", type = "basic", suit = 1, points = 9, id = 51}
63 | resmng[52] = {name = "桃", type = "basic", suit = 1, points = 12, id = 52}
64 | resmng[53] = {name = "桃", type = "basic", suit = 3, points = 12, id = 53}
65 | resmng[54] = {name = "南蛮入侵", type = "tactic", suit = 0, points = 7, id = 54}
66 | resmng[55] = {name = "南蛮入侵", type = "tactic", suit = 0, points = 13, id = 55}
67 | resmng[56] = {name = "南蛮入侵", type = "tactic", suit = 2, points = 7, id = 56}
68 | resmng[57] = {name = "万箭齐发", type = "tactic", suit = 1, points = 1, id = 57}
69 | resmng[58] = {name = "桃园结义", type = "tactic", suit = 1, points = 1, id = 58}
70 | resmng[59] = {name = "五谷丰登", type = "tactic", suit = 1, points = 3, id = 59}
71 | resmng[60] = {name = "五谷丰登", type = "tactic", suit = 1, points = 4, id = 60}
72 | resmng[61] = {name = "闪电", type = "tactic", suit = 0, points = 1, id = 61}
73 | resmng[62] = {name = "闪电", type = "tactic", suit = 1, points = 12, id = 62}
74 | resmng[63] = {name = "乐不思蜀", type = "tactic", suit = 0, points = 6, id = 63}
75 | resmng[64] = {name = "乐不思蜀", type = "tactic", suit = 1, points = 6, id = 64}
76 | resmng[65] = {name = "乐不思蜀", type = "tactic", suit = 2, points = 6, id = 65}
77 | resmng[66] = {name = "无懈可击", type = "tactic", suit = 0, points = 11, id = 66}
78 | resmng[67] = {name = "无懈可击", type = "tactic", suit = 2, points = 12, id = 67}
79 | resmng[68] = {name = "无懈可击", type = "tactic", suit = 2, points = 13, id = 68}
80 | resmng[69] = {name = "无懈可击", type = "tactic", suit = 3, points = 12, id = 69}
81 | resmng[70] = {name = "顺手牵羊", type = "tactic", suit = 0, points = 3, id = 70}
82 | resmng[71] = {name = "顺手牵羊", type = "tactic", suit = 0, points = 4, id = 71}
83 | resmng[72] = {name = "顺手牵羊", type = "tactic", suit = 0, points = 11, id = 72}
84 | resmng[73] = {name = "顺手牵羊", type = "tactic", suit = 3, points = 3, id = 73}
85 | resmng[74] = {name = "顺手牵羊", type = "tactic", suit = 3, points = 4, id = 74}
86 | resmng[75] = {name = "过河拆桥", type = "tactic", suit = 0, points = 3, id = 75}
87 | resmng[76] = {name = "过河拆桥", type = "tactic", suit = 0, points = 4, id = 76}
88 | resmng[77] = {name = "过河拆桥", type = "tactic", suit = 0, points = 12, id = 77}
89 | resmng[78] = {name = "过河拆桥", type = "tactic", suit = 1, points = 12, id = 78}
90 | resmng[79] = {name = "过河拆桥", type = "tactic", suit = 2, points = 3, id = 79}
91 | resmng[80] = {name = "过河拆桥", type = "tactic", suit = 2, points = 4, id = 80}
92 | resmng[81] = {name = "决斗", type = "tactic", suit = 0, points = 1, id = 81}
93 | resmng[82] = {name = "决斗", type = "tactic", suit = 2, points = 1, id = 82}
94 | resmng[83] = {name = "决斗", type = "tactic", suit = 3, points = 1, id = 83}
95 | resmng[84] = {name = "无中生有", type = "tactic", suit = 1, points = 7, id = 84}
96 | resmng[85] = {name = "无中生有", type = "tactic", suit = 1, points = 8, id = 85}
97 | resmng[86] = {name = "无中生有", type = "tactic", suit = 1, points = 9, id = 86}
98 | resmng[87] = {name = "无中生有", type = "tactic", suit = 1, points = 11, id = 87}
99 | resmng[88] = {name = "借刀杀人", type = "tactic", suit = 2, points = 12, id = 88}
100 | resmng[89] = {name = "借刀杀人", type = "tactic", suit = 2, points = 13, id = 89}
101 | resmng[90] = {name = "诸葛连弩", type = "arm", range = 1, skill = 386, suit = 2, points = 1, id = 90}
102 | resmng[91] = {name = "诸葛连弩", type = "arm", range = 1, skill = 386, suit = 3, points = 1, id = 91}
103 | resmng[92] = {name = "寒冰剑", type = "arm", range = 2, skill = 387, suit = 0, points = 2, id = 92}
104 | resmng[93] = {name = "青釭剑", type = "arm", range = 2, skill = 388, suit = 0, points = 6, id = 93}
105 | resmng[94] = {name = "雌雄双股剑", type = "arm", range = 2, skill = 389, suit = 0, points = 2, id = 94}
106 | resmng[95] = {name = "贯石斧", type = "arm", range = 3, skill = 390, suit = 3, points = 5, id = 95}
107 | resmng[96] = {name = "青龙偃月刀", type = "arm", range = 3, skill = 391, suit = 0, points = 5, id = 96}
108 | resmng[97] = {name = "丈八蛇矛", type = "arm", range = 3, skill = 392, suit = 0, points = 12, id = 97}
109 | resmng[98] = {name = "方天画戟", type = "arm", range = 4, skill = 393, suit = 3, points = 12, id = 98}
110 | resmng[99] = {name = "麒麟弓", type = "arm", range = 5, skill = 394, suit = 1, points = 5, id = 99}
111 | resmng[100] = {name = "八卦阵", type = "armor", skill = 395, suit = 0, points = 2, id = 100}
112 | resmng[101] = {name = "八卦阵", type = "armor", skill = 395, suit = 2, points = 2, id = 101}
113 | resmng[102] = {name = "仁王盾", type = "armor", skill = 396, suit = 2, points = 2, id = 102}
114 | resmng[103] = {name = "的卢", type = "add_horse", suit = 2, points = 5, id = 103}
115 | resmng[104] = {name = "绝影", type = "add_horse", suit = 0, points = 5, id = 104}
116 | resmng[105] = {name = "爪黄飞电", type = "add_horse", suit = 1, points = 13, id = 105}
117 | resmng[106] = {name = "赤兔", type = "sub_horse", suit = 1, points = 5, id = 106}
118 | resmng[107] = {name = "紫骍", type = "sub_horse", suit = 3, points = 13, id = 107}
119 | resmng[108] = {name = "大宛", type = "sub_horse", suit = 0, points = 13, id = 108}
120 |
121 | -- 武将配置
122 | resmng[201] = {name = "黄月英", module_name = "huang_yue_ying", life = 3, sex = "woman", skills = {301, 302}}
123 | resmng[202] = {name = "关羽", module_name = "guan_yu", life = 4, sex = "man", skills = {303}}
124 | resmng[203] = {name = "刘备", module_name = "liu_bei", life = 4, sex = "man", skills = {304}}
125 | resmng[204] = {name = "张飞", module_name = "zhang_fei", life = 4, sex = "man", skills = {305}}
126 | resmng[205] = {name = "诸葛亮", module_name = "zhu_ge_liang", life = 3, sex = "man", skills = {306, 307}}
127 | resmng[206] = {name = "赵云", module_name = "zhao_yun", life = 4, sex = "man", skills = {308}}
128 | resmng[207] = {name = "马超", module_name = "ma_chao", life = 4, sex = "man", skills = {309, 310}}
129 | resmng[208] = {name = "甄姬", module_name = "zhen_ji", life = 3, sex = "woman", skills = {311, 312}}
130 | resmng[209] = {name = "司马懿", module_name = "si_ma_yi", life = 3, sex = "man", skills = {313, 314}}
131 | resmng[210] = {name = "夏侯惇", module_name = "xia_hou_dun", life = 4, sex = "man", skills = {315}}
132 | resmng[211] = {name = "张辽", module_name = "zhang_liao", life = 4, sex = "man", skills = {316}}
133 | resmng[212] = {name = "曹操", module_name = "cao_cao", life = 4, sex = "man", skills = {317}}
134 | resmng[213] = {name = "许褚", module_name = "xv_chu", life = 4, sex = "man", skills = {318}}
135 | resmng[214] = {name = "郭嘉", module_name = "guo_jia", life = 3, sex = "man", skills = {319, 320}}
136 | resmng[215] = {name = "大乔", module_name = "da_qiao", life = 3, sex = "woman", skills = {321, 322}}
137 | resmng[216] = {name = "孙尚香", module_name = "sun_shang_xiang", life = 3, sex = "woman", skills = {323, 324}}
138 | resmng[217] = {name = "吕蒙", module_name = "lv_meng", life = 4, sex = "man", skills = {325}}
139 | resmng[218] = {name = "周瑜", module_name = "zhou_yu", life = 3, sex = "man", skills = {326, 327}}
140 | resmng[219] = {name = "孙权", module_name = "sun_quan", life = 4, sex = "man", skills = {328}}
141 | resmng[220] = {name = "甘宁", module_name = "gan_ning", life = 4, sex = "man", skills = {329}}
142 | resmng[221] = {name = "陆逊", module_name = "lu_xvn", life = 3, sex = "man", skills = {330, 331}}
143 | resmng[222] = {name = "黄盖", module_name = "huang_gai", life = 4, sex = "man", skills = {332}}
144 | resmng[223] = {name = "貂蝉", module_name = "diao_chan", life = 3, sex = "woman", skills = {333, 334}}
145 | resmng[224] = {name = "华佗", module_name = "hua_tuo", life = 3, sex = "man", skills = {335, 336}}
146 | resmng[225] = {name = "吕布", module_name = "lv_bu", life = 4, sex = "man", skills = {337}}
147 | resmng[226] = {name = "魏延", module_name = "wei_yan", life = 4, sex = "man", skills = {338, 339}}
148 | resmng[227] = {name = "黄忠", module_name = "huang_zhong", life = 4, sex = "man", skills = {340}}
149 | resmng[228] = {name = "夏侯渊", module_name = "xia_hou_yuan", life = 4, sex = "man", skills = {341}}
150 | resmng[229] = {name = "曹仁", module_name = "cao_ren", life = 4, sex = "man", skills = {342, 343}}
151 | resmng[230] = {name = "小乔", module_name = "xiao_qiao", life = 3, sex = "woman", skills = {344, 345}}
152 | resmng[231] = {name = "周泰", module_name = "zhou_tai", life = 4, sex = "man", skills = {346, 347}}
153 | resmng[232] = {name = "张角", module_name = "zhang_jiao", life = 3, sex = "man", skills = {348, 349}}
154 | resmng[233] = {name = "卧龙诸葛", module_name = "wo_long_zhu_ge", life = 3, sex = "man", skills = {350, 351}}
155 | resmng[234] = {name = "庞统", module_name = "pang_tong", life = 3, sex = "man", skills = {352}}
156 | resmng[235] = {name = "典韦", module_name = "dian_wei", life = 4, sex = "man", skills = {353}}
157 | resmng[236] = {name = "荀彧", module_name = "xvn_yu", life = 3, sex = "man", skills = {354, 355}}
158 | resmng[237] = {name = "太史慈", module_name = "tai_shi_ci", life = 4, sex = "man", skills = {356}}
159 | resmng[238] = {name = "庞德", module_name = "pang_de", life = 4, sex = "man", skills = {309, 357}}
160 | resmng[239] = {name = "袁绍", module_name = "yuan_shao", life = 4, sex = "man", skills = {358}}
161 | resmng[240] = {name = "颜良文丑", module_name = "yan_liang_wen_chou", life = 4, sex = "man", skills = {359}}
162 | resmng[241] = {name = "祝融", module_name = "zhu_rong", life = 4, sex = "woman", skills = {360, 361}}
163 | resmng[242] = {name = "孟获", module_name = "meng_huo", life = 4, sex = "man", skills = {362, 363}}
164 | resmng[243] = {name = "曹丕", module_name = "cao_pi", life = 3, sex = "man", skills = {364, 365}}
165 | resmng[244] = {name = "孙坚", module_name = "sun_jian", life = 4, sex = "man", skills = {366}}
166 | resmng[245] = {name = "鲁肃", module_name = "lu_su", life = 3, sex = "man", skills = {367, 368}}
167 | resmng[246] = {name = "贾诩", module_name = "jia_xv", life = 3, sex = "man", skills = {369, 370, 371}}
168 | resmng[247] = {name = "刘禅", module_name = "liu_shan", life = 3, sex = "man", skills = {372, 373}}
169 | resmng[248] = {name = "姜维", module_name = "jiang_wei", life = 4, sex = "man", skills = {374, 375}}
170 | resmng[249] = {name = "张郃", module_name = "zhang_he", life = 4, sex = "man", skills = {376}}
171 | resmng[250] = {name = "邓艾", module_name = "deng_ai", life = 4, sex = "man", skills = {377, 378}}
172 | resmng[251] = {name = "孙策", module_name = "sun_ce", life = 4, sex = "man", skills = {380, 381}}
173 | resmng[252] = {name = "张昭张纮", module_name = "zhang_zhao_zhang_hong", life = 3, sex = "man", skills = {382, 383}}
174 | resmng[253] = {name = "蔡文姬", module_name = "cai_wen_ji", life = 3, sex = "woman", skills = {384, 385}}
175 |
176 | -- 技能配置
177 | resmng[301] = "集智"
178 | resmng[302] = "奇才"
179 | resmng[303] = "武圣"
180 | resmng[304] = "仁德"
181 | resmng[305] = "咆哮"
182 | resmng[306] = "观星"
183 | resmng[307] = "空城"
184 | resmng[308] = "龙胆"
185 | resmng[309] = "马术"
186 | resmng[310] = "铁骑"
187 | resmng[311] = "倾国"
188 | resmng[312] = "洛神"
189 | resmng[313] = "反馈"
190 | resmng[314] = "鬼才"
191 | resmng[315] = "刚烈"
192 | resmng[316] = "突袭"
193 | resmng[317] = "奸雄"
194 | resmng[318] = "裸衣"
195 | resmng[319] = "天妒"
196 | resmng[320] = "遗计"
197 | resmng[321] = "国色"
198 | resmng[322] = "流离"
199 | resmng[323] = "结姻"
200 | resmng[324] = "枭姬"
201 | resmng[325] = "克己"
202 | resmng[326] = "英姿"
203 | resmng[327] = "反间"
204 | resmng[328] = "制衡"
205 | resmng[329] = "奇袭"
206 | resmng[330] = "谦逊"
207 | resmng[331] = "连营"
208 | resmng[332] = "苦肉"
209 | resmng[333] = "离间"
210 | resmng[334] = "闭月"
211 | resmng[335] = "急救"
212 | resmng[336] = "青囊"
213 | resmng[337] = "无双"
214 | resmng[338] = "狂骨"
215 | resmng[339] = "奇谋"
216 | resmng[340] = "烈弓"
217 | resmng[341] = "神速"
218 | resmng[342] = "据守"
219 | resmng[343] = "解围"
220 | resmng[344] = "天香"
221 | resmng[345] = "红颜"
222 | resmng[346] = "不屈"
223 | resmng[347] = "奋激"
224 | resmng[348] = "雷击"
225 | resmng[349] = "鬼道"
226 | resmng[350] = "八阵"
227 | resmng[351] = "看破"
228 | resmng[352] = "涅槃"
229 | resmng[353] = "强袭"
230 | resmng[354] = "驱虎"
231 | resmng[355] = "节命"
232 | resmng[356] = "天义"
233 | resmng[357] = "鞬出"
234 | resmng[358] = "乱击"
235 | resmng[359] = "双雄"
236 | resmng[360] = "巨象"
237 | resmng[361] = "烈刃"
238 | resmng[362] = "祸首"
239 | resmng[363] = "再起"
240 | resmng[364] = "行殇"
241 | resmng[365] = "放逐"
242 | resmng[366] = "英魂"
243 | resmng[367] = "好施"
244 | resmng[368] = "缔盟"
245 | resmng[369] = "完杀"
246 | resmng[370] = "乱武"
247 | resmng[371] = "帷幕"
248 | resmng[372] = "享乐"
249 | resmng[373] = "放权"
250 | resmng[374] = "挑衅"
251 | resmng[375] = "志继"
252 | resmng[376] = "巧变"
253 | resmng[377] = "屯田"
254 | resmng[378] = "凿险"
255 | resmng[379] = "急袭"
256 | resmng[380] = "激昂"
257 | resmng[381] = "魂姿"
258 | resmng[382] = "直谏"
259 | resmng[383] = "固政"
260 | resmng[384] = "悲歌"
261 | resmng[385] = "断肠"
262 | resmng[386] = "诸葛连弩"
263 | resmng[387] = "寒冰剑"
264 | resmng[388] = "青釭剑"
265 | resmng[389] = "雌雄双股剑"
266 | resmng[390] = "贯石斧"
267 | resmng[391] = "青龙偃月刀"
268 | resmng[392] = "丈八蛇矛"
269 | resmng[393] = "方天画戟"
270 | resmng[394] = "麒麟弓"
271 | resmng[395] = "八卦阵"
272 | resmng[396] = "仁王盾"
273 |
274 | function resmng.check_card(id)
275 | if resmng[id] and id >= resmng.card_start_id and id <= resmng.card_finish_id then
276 | return true
277 | end
278 | end
279 |
280 | function resmng.check_skill(id)
281 | if resmng[id] and id >= resmng.skill_start_id and id <= resmng.skill_finish_id then
282 | return true
283 | end
284 | end
285 |
286 | function resmng.get_skill_id(skill_name)
287 | for id = resmng.skill_start_id, resmng.skill_finish_id, 1 do
288 | if resmng[id] == skill_name then
289 | return id
290 | end
291 | end
292 | end
--------------------------------------------------------------------------------
/test.lua:
--------------------------------------------------------------------------------
1 | require("class")
2 | require("deck")
3 | require("game")
4 | require("helper")
5 | require("macro")
6 | require("opt")
7 | require("player")
8 | require("query")
9 | require("resmng")
10 |
11 | function new_test_hero(hero_id)
12 | local hero_class = require("hero." .. resmng[hero_id].module_name)
13 | local player = hero_class.new(#game.players + 1, hero_id, #game.players + 1)
14 | helper.insert(game.players, player)
15 | return player
16 | end
17 |
18 | function new_player_no_skill()
19 | local player = Player.new(#game.players + 1, 220, #game.players + 1)
20 | helper.clear(player.skills)
21 | helper.insert(game.players, player)
22 | helper.insert(player.hand_cards, deck:draw(4))
23 | return player
24 | end
25 |
26 | deck = Deck:new()
27 | game = Game:new()
28 |
29 | deck:init()
30 | game:init()
31 |
32 | -- game模块测试
33 | -- game.whose_turn = game.players[2]
34 | -- local player2 = game:get_player(2)
35 | -- print(player2.id, player2.name)
36 | -- local other_players = game:get_other_players(player2)
37 | -- for _, player in ipairs(other_players) do
38 | -- print(player.id, player.name)
39 | -- end
40 | -- local player1 = game:get_player(1)
41 | -- helper.insert(player1.hand_cards, 13)
42 | -- helper.insert(player2.hand_cards, 13)
43 | -- for _ = 1, 3, 1 do
44 | -- print_player_info(player1)
45 | -- print_player_info(player2)
46 | -- print(game:compare_points(player1, player2))
47 | -- print(deck.discard_pile[#deck.discard_pile], deck.discard_pile[#deck.discard_pile - 1])
48 | -- print_player_info(player1)
49 | -- print_player_info(player2)
50 | -- end
51 | -- print(game:get_judge_card_name(1))
52 | -- game.transfer_delay_tactics[1] = "乐不思蜀"
53 | -- print(game:get_judge_card_name(1))
54 | -- local settle_players = game:get_settle_players(player2)
55 | -- for _, player in ipairs(settle_players) do
56 | -- print(player.id, player.name)
57 | -- end
58 | -- local settle_players = game:get_settle_players_except_self(player2)
59 | -- for _, player in ipairs(settle_players) do
60 | -- print(player.id, player.name)
61 | -- end
62 |
63 | -- player模块测试
64 | -- local player1 = game.players[1]
65 | -- local player2 = game.players[2]
66 | -- local player3 = game.players[3]
67 | -- local player4 = game.players[4]
68 | -- helper.clear(player1.hand_cards)
69 | -- helper.clear(player2.hand_cards)
70 | -- helper.clear(player3.hand_cards)
71 | -- helper.clear(player4.hand_cards)
72 | -- game.whose_turn = player1
73 | -- player1.life = -11
74 | -- helper.insert(player1.judge_cards, 61)
75 | -- table.insert(deck.card_pile, 1, 1)
76 | -- helper.insert(player1.hand_cards, {75})
77 | -- helper.insert(player2.hand_cards, {46})
78 | -- helper.insert(player3.hand_cards, {66, 66, 66})
79 | -- helper.insert(player4.hand_cards, {66, 66})
80 | -- player1:play()
81 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
82 |
83 | -- -- 黄月英测试
84 | -- local player1 = new_test_hero(201)
85 | -- game.whose_turn = player1
86 | -- helper.insert(player1.hand_cards, {70, 63, 66})
87 | -- local player2 = new_player_no_skill()
88 | -- helper.insert(player2, 57)
89 | -- -- player1.flags["跳过判定"] = true
90 | -- -- player1.flags["跳过摸牌"] = true
91 | -- -- player1.flags["跳过弃牌"] = true
92 | -- -- player1:before_turn()
93 | -- -- player1:turn()
94 | -- -- player1:after_turn()
95 | -- player2.flags["跳过判定"] = true
96 | -- player2.flags["跳过摸牌"] = true
97 | -- player2.flags["跳过弃牌"] = true
98 | -- player2:before_turn()
99 | -- player2:turn()
100 | -- player2:after_turn()
101 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
102 |
103 | -- 关羽测试
104 | -- local player1 = new_test_hero(202)
105 | -- game.whose_turn = player1
106 | -- helper.insert(player1.hand_cards, {1, 45, 45, 45, 45, 45, 91})
107 | -- local player2 = new_player_no_skill()
108 | -- helper.insert(player2.hand_cards, {54, 81, 1, 1})
109 | -- player2.life = 10
110 | -- player1.flags["跳过判定"] = true
111 | -- player1.flags["跳过摸牌"] = true
112 | -- player1.flags["跳过弃牌"] = true
113 | -- player1:before_turn()
114 | -- player1:turn()
115 | -- player1:after_turn()
116 | -- player2:before_turn()
117 | -- player2:turn()
118 | -- player2:after_turn()
119 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
120 |
121 | -- 刘备测试
122 | -- local player1 = new_test_hero(203)
123 | -- player1.life = 3
124 | -- game.whose_turn = player1
125 | -- helper.insert(player1.hand_cards, {1, 45, 45, 45, 45, 45, 91, 23})
126 | -- local player2 = new_player_no_skill()
127 | -- player1.flags["跳过判定"] = true
128 | -- player1.flags["跳过摸牌"] = true
129 | -- player1.flags["跳过弃牌"] = true
130 | -- player1:before_turn()
131 | -- player1:turn()
132 | -- player1:after_turn()
133 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
134 |
135 | -- 张飞测试
136 | -- local player1 = new_test_hero(204)
137 | -- game.whose_turn = player1
138 | -- helper.insert(player1.hand_cards, {1, 1, 1, 1})
139 | -- local player2 = new_player_no_skill()
140 | -- player1.flags["跳过判定"] = true
141 | -- player1.flags["跳过摸牌"] = true
142 | -- player1.flags["跳过弃牌"] = true
143 | -- player1:before_turn()
144 | -- player1:turn()
145 | -- player1:after_turn()
146 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
147 |
148 | -- 诸葛亮测试
149 | -- local player1 = new_test_hero(205)
150 | -- player1.life = 3
151 | -- game.whose_turn = player1
152 | -- local player2 = new_player_no_skill()
153 | -- helper.insert(player2.hand_cards, {1, 81})
154 | -- local player3 = new_player_no_skill()
155 | -- local player4 = new_player_no_skill()
156 | -- -- player2.flags["跳过判定"] = true
157 | -- -- player2.flags["跳过摸牌"] = true
158 | -- -- player2.flags["跳过弃牌"] = true
159 | -- -- player2:before_turn()
160 | -- -- player2:turn()
161 | -- -- player2:after_turn()
162 | -- -- helper.insert(player1.hand_cards, 3)
163 | -- -- player2.flags["跳过判定"] = true
164 | -- -- player2.flags["跳过摸牌"] = true
165 | -- -- player2.flags["跳过弃牌"] = true
166 | -- -- player2:before_turn()
167 | -- -- player2:turn()
168 | -- -- player2:after_turn()
169 | -- player1.flags["跳过判定"] = true
170 | -- player1.flags["跳过弃牌"] = true
171 | -- player1:before_turn()
172 | -- player1:turn()
173 | -- player1:after_turn()
174 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
175 | -- text("牌堆底:%s", t2s({ deck.card_pile[#deck.card_pile - 3], deck.card_pile[#deck.card_pile - 2], deck.card_pile[#deck.card_pile - 1], deck.card_pile[#deck.card_pile]}))
176 |
177 | -- 赵云测试
178 | -- local player1 = new_test_hero(206)
179 | -- game.whose_turn = player1
180 | -- helper.insert(player1.hand_cards, {1, 45, 45, 45, 45, 45})
181 | -- local player2 = new_player_no_skill()
182 | -- helper.insert(player2.hand_cards, {54, 81, 1, 57})
183 | -- player1.flags["跳过判定"] = true
184 | -- player1.flags["跳过摸牌"] = true
185 | -- player1.flags["跳过弃牌"] = true
186 | -- player1:before_turn()
187 | -- player1:turn()
188 | -- player1:after_turn()
189 | -- player2:before_turn()
190 | -- player2:turn()
191 | -- player2:after_turn()
192 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
193 |
194 | -- -- 马超测试
195 | -- local player1 = new_test_hero(207)
196 | -- game.whose_turn = player1
197 | -- helper.insert(player1.hand_cards, {1, 1, 91, 70})
198 | -- local player2 = new_player_no_skill()
199 | -- helper.insert(player2.hand_cards, {45, 45})
200 | -- player2:put_on_equip(105)
201 | -- table.insert(deck.card_pile, 1, 47)
202 | -- table.insert(deck.card_pile, 2, 54)
203 | -- player1.flags["跳过判定"] = true
204 | -- player1.flags["跳过摸牌"] = true
205 | -- player1.flags["跳过弃牌"] = true
206 | -- player1:before_turn()
207 | -- player1:turn()
208 | -- player1:after_turn()
209 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
210 |
211 | -- -- 甄姬测试
212 | -- local player1 = new_test_hero(208)
213 | -- helper.insert(player1.hand_cards, {})
214 | -- local player2 = new_player_no_skill()
215 | -- helper.insert(player2.hand_cards, {1, 57})
216 | -- table.insert(deck.card_pile, 1, 1)
217 | -- table.insert(deck.card_pile, 2, 1)
218 | -- table.insert(deck.card_pile, 3, 56)
219 | -- table.insert(deck.card_pile, 4, 48)
220 | -- player1.flags["跳过判定"] = true
221 | -- player1.flags["跳过摸牌"] = true
222 | -- player1.flags["跳过弃牌"] = true
223 | -- player1:before_turn()
224 | -- player1:turn()
225 | -- player1:after_turn()
226 | -- player2.flags["跳过判定"] = true
227 | -- player2.flags["跳过摸牌"] = true
228 | -- player2.flags["跳过弃牌"] = true
229 | -- player2:before_turn()
230 | -- player2:turn()
231 | -- player2:after_turn()
232 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
233 |
234 | -- -- 司马懿测试
235 | -- local player1 = new_test_hero(209)
236 | -- -- helper.insert(player1.hand_cards, {1, 57, 43, 88})
237 | -- local player2 = new_player_no_skill()
238 | -- helper.insert(player2.hand_cards, {1, 57})
239 | -- player2:put_on_equip(108)
240 | -- helper.put(player2.judge_cards, 61)
241 | -- table.insert(deck.card_pile, 1, 77)
242 | -- player2.flags["跳过弃牌"] = true
243 | -- player2:before_turn()
244 | -- player2:turn()
245 | -- player2:after_turn()
246 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
247 |
248 | -- 夏侯惇测试
249 | -- local player1 = new_test_hero(210)
250 | -- local player2 = new_player_no_skill()
251 | -- helper.insert(player2.hand_cards, {57, 57, 57})
252 | -- table.insert(deck.card_pile, 1, 1)
253 | -- table.insert(deck.card_pile, 2, 1)
254 | -- table.insert(deck.card_pile, 3, 1)
255 | -- player2.flags["跳过判定"] = true
256 | -- player2.flags["跳过摸牌"] = true
257 | -- player2.flags["跳过弃牌"] = true
258 | -- player2:before_turn()
259 | -- player2:turn()
260 | -- player2:after_turn()
261 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
262 |
263 | -- 张辽测试
264 | -- local player1 = new_test_hero(211)
265 | -- local player2 = new_player_no_skill()
266 | -- local player3 = new_player_no_skill()
267 | -- player1.flags["跳过判定"] = true
268 | -- player1.flags["跳过弃牌"] = true
269 | -- player1:before_turn()
270 | -- player1:turn()
271 | -- player1:after_turn()
272 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
273 |
274 | -- -- 曹操测试
275 | -- local player1 = new_test_hero(212)
276 | -- local player2 = new_test_hero(212)
277 | -- local player3 = new_player_no_skill()
278 | -- helper.insert(player3.hand_cards, {57, 57, 57})
279 | -- player3.flags["跳过判定"] = true
280 | -- player3.flags["跳过弃牌"] = true
281 | -- player3:before_turn()
282 | -- player3:turn()
283 | -- player3:after_turn()
284 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
285 |
286 | -- -- 许褚测试
287 | -- local player1 = new_test_hero(213)
288 | -- local player2 = new_player_no_skill()
289 | -- helper.insert(player1.hand_cards, {1, 81, 81})
290 | -- player1.flags["跳过判定"] = true
291 | -- player1.flags["跳过弃牌"] = true
292 | -- player1:before_turn()
293 | -- player1:turn()
294 | -- player1:after_turn()
295 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
296 |
297 | -- -- 郭嘉测试
298 | -- local player1 = new_test_hero(214)
299 | -- helper.put(player1.judge_cards, 63)
300 | -- local player2 = new_player_no_skill()
301 | -- helper.insert(player2.hand_cards, {1, 81, 81})
302 | -- player1:judge()
303 | -- player2.flags["跳过判定"] = true
304 | -- player2.flags["跳过摸牌"] = true
305 | -- player2.flags["跳过弃牌"] = true
306 | -- player2:before_turn()
307 | -- player2:turn()
308 | -- player2:after_turn()
309 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
310 |
311 | -- -- 大乔测试
312 | -- local player1 = new_test_hero(215)
313 | -- helper.insert(player1.hand_cards, {107, 102, 2})
314 | -- local player2 = new_player_no_skill()
315 | -- local player3 = new_player_no_skill()
316 | -- helper.insert(player2.hand_cards, {1, 81, 81})
317 | -- table.insert(deck.card_pile, 1, 105)
318 | -- player1.flags["跳过判定"] = true
319 | -- player1.flags["跳过摸牌"] = true
320 | -- player1.flags["跳过弃牌"] = true
321 | -- player1:before_turn()
322 | -- player1:turn()
323 | -- player1:after_turn()
324 | -- -- player2.flags["跳过判定"] = true
325 | -- player2.flags["跳过摸牌"] = true
326 | -- player2.flags["跳过弃牌"] = true
327 | -- player2:before_turn()
328 | -- player2:turn()
329 | -- player2:after_turn()
330 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
331 |
332 | -- -- 孙尚香测试
333 | -- local player1 = new_test_hero(216)
334 | -- helper.insert(player1.hand_cards, {95, 100, 105, 106, 1})
335 | -- local player2 = new_player_no_skill()
336 | -- player2.life = 2
337 | -- helper.insert(player2.hand_cards, {73, 73, 79})
338 | -- table.insert(deck.card_pile, 1, 105)
339 | -- player1.flags["跳过判定"] = true
340 | -- player1.flags["跳过摸牌"] = true
341 | -- player1.flags["跳过弃牌"] = true
342 | -- player1:before_turn()
343 | -- player1:turn()
344 | -- player1:after_turn()
345 | -- player2.flags["跳过判定"] = true
346 | -- player2.flags["跳过摸牌"] = true
347 | -- player2.flags["跳过弃牌"] = true
348 | -- player2:before_turn()
349 | -- player2:turn()
350 | -- player2:after_turn()
351 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
352 |
353 | -- -- 吕蒙测试
354 | -- local player1 = new_test_hero(217)
355 | -- helper.insert(player1.hand_cards, {95, 100, 100, 81, 100, 105, 106, 1, 1, 1})
356 | -- local player2 = new_player_no_skill()
357 | -- helper.insert(player2.hand_cards, {81, 1})
358 | -- player2.flags["跳过判定"] = true
359 | -- player2.flags["跳过摸牌"] = true
360 | -- player2.flags["跳过弃牌"] = true
361 | -- player2:before_turn()
362 | -- player2:turn()
363 | -- player2:after_turn()
364 | -- player1:before_turn()
365 | -- player1:turn()
366 | -- player1:after_turn()
367 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
368 |
369 | -- -- 周瑜测试
370 | -- local player1 = new_test_hero(218)
371 | -- helper.insert(player1.hand_cards, {1, 1, 1, 1, 1, 1})
372 | -- local player2 = new_player_no_skill()
373 | -- player1.flags["跳过判定"] = true
374 | -- player1.flags["跳过弃牌"] = true
375 | -- player1:before_turn()
376 | -- player1:turn()
377 | -- player1:after_turn()
378 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
379 |
380 | -- -- 孙权测试
381 | -- local player1 = new_test_hero(219)
382 | -- local player2 = new_player_no_skill()
383 | -- player1.flags["跳过判定"] = true
384 | -- player1.flags["跳过摸牌"] = true
385 | -- player1.flags["跳过弃牌"] = true
386 | -- player1:before_turn()
387 | -- player1:turn()
388 | -- player1:after_turn()
389 | -- player1.armor = 100
390 | -- player1.flags["跳过判定"] = true
391 | -- player1.flags["跳过弃牌"] = true
392 | -- player1:before_turn()
393 | -- player1:turn()
394 | -- player1:after_turn()
395 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
396 |
397 | -- -- 甘宁、陆逊测试
398 | -- local player1 = new_test_hero(220)
399 | -- local player2 = new_test_hero(221)
400 | -- local player3 = new_player_no_skill()
401 | -- helper.clear(player2.hand_cards)
402 | -- helper.insert(player2.hand_cards, 17)
403 | -- helper.insert(player1.hand_cards, {1, 1, 1, 1, 98, 99, 74})
404 | -- player1.flags["跳过判定"] = true
405 | -- player1.flags["跳过弃牌"] = true
406 | -- player1:before_turn()
407 | -- player1:turn()
408 | -- player1:after_turn()
409 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
410 |
411 | -- -- 黄盖、华佗测试
412 | -- local player1 = new_test_hero(222)
413 | -- player1.life = 1
414 | -- local player2 = new_test_hero(224)
415 | -- helper.insert(player2.hand_cards, {88, 105})
416 | -- print(game.finish)
417 | -- player1.flags["跳过判定"] = true
418 | -- player1.flags["跳过摸牌"] = true
419 | -- player1.flags["跳过弃牌"] = true
420 | -- player1:before_turn()
421 | -- player1:turn()
422 | -- player1:after_turn()
423 | -- print(game.finish)
424 | -- player2.flags["跳过判定"] = true
425 | -- player2.flags["跳过摸牌"] = true
426 | -- player2.flags["跳过弃牌"] = true
427 | -- player2:before_turn()
428 | -- player2:turn()
429 | -- player2:after_turn()
430 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
431 |
432 | -- -- 吕布、貂蝉测试
433 | -- local player1 = new_test_hero(223)
434 | -- local player2 = new_test_hero(225)
435 | -- local player3 = new_player_no_skill()
436 | -- local player4 = new_player_no_skill()
437 | -- helper.insert(player1.hand_cards, {99, 45, 74})
438 | -- player1:put_on_equip(91)
439 | -- helper.insert(player2.hand_cards, {1, 1, 69, 1, 81})
440 | -- helper.insert(player3.hand_cards, {1, 1, 1, 1, 1, 1})
441 | -- helper.insert(player4.hand_cards, {1, 1, 1, 1, 1, 1, 31, 31, 31})
442 | -- -- player2.flags["跳过判定"] = true
443 | -- -- player2.flags["跳过摸牌"] = true
444 | -- -- player2.flags["跳过弃牌"] = true
445 | -- -- player2:before_turn()
446 | -- -- player2:turn()
447 | -- -- player2:after_turn()
448 | -- player1.flags["跳过判定"] = true
449 | -- player1.flags["跳过摸牌"] = true
450 | -- player1.flags["跳过弃牌"] = true
451 | -- player1:before_turn()
452 | -- player1:turn()
453 | -- player1:after_turn()
454 | -- player1.flags["跳过判定"] = true
455 | -- player1.flags["跳过摸牌"] = true
456 | -- player1.flags["跳过弃牌"] = true
457 | -- player1:before_turn()
458 | -- player1:turn()
459 | -- player1:after_turn()
460 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
461 |
462 | -- -- 魏延测试
463 | -- local player1 = new_tsest_hero(226)
464 | -- player1.life = 1
465 | -- player1:put_on_equip(98)
466 | -- helper.insert(player1.hand_cards, {1, 1, 1, 1, 1, 1, 46, 46, 46})
467 | -- local player2 = new_player_no_skill()
468 | -- helper.clear(player2.hand_cards)
469 | -- player2:put_on_equip(105)
470 | -- local player3 = new_player_no_skill()
471 | -- helper.clear(player3.hand_cards)
472 | -- player3:put_on_equip(105)
473 | -- local player4 = new_player_no_skill()
474 | -- helper.clear(player4.hand_cards)
475 | -- player4:put_on_equip(105)
476 | -- local player5 = new_player_no_skill()
477 | -- helper.clear(player5.hand_cards)
478 | -- player5:put_on_equip(105)
479 | -- player1.flags["跳过判定"] = true
480 | -- player1.flags["跳过摸牌"] = true
481 | -- player1.flags["跳过弃牌"] = true
482 | -- player1:before_turn()
483 | -- player1:turn()
484 | -- player1:after_turn()
485 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
486 |
487 | -- -- 黄忠测试
488 | -- local player1 = new_test_hero(227)
489 | -- player1.life = 3
490 | -- player1:put_on_equip(90)
491 | -- helper.insert(player1.hand_cards, {1, 1, 8, 8, 8, 8, 8, 9, 8})
492 | -- local player2 = new_player_no_skill()
493 | -- helper.insert(player2.hand_cards, 33)
494 | -- player2:put_on_equip(105)
495 | -- local player3 = new_player_no_skill()
496 | -- helper.insert(player3.hand_cards, 33)
497 | -- player3:put_on_equip(105)
498 | -- local player4 = new_player_no_skill()
499 | -- helper.insert(player4.hand_cards, 33)
500 | -- player4:put_on_equip(105)
501 | -- local player5 = new_player_no_skill()
502 | -- helper.insert(player5.hand_cards, 33)
503 | -- player5:put_on_equip(105)
504 | -- player1.flags["跳过判定"] = true
505 | -- player1.flags["跳过摸牌"] = true
506 | -- player1.flags["跳过弃牌"] = true
507 | -- player1:before_turn()
508 | -- player1:turn()
509 | -- player1:after_turn()
510 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
511 |
512 | -- -- 贾诩测试
513 | -- local player1 = new_test_hero(246)
514 | -- helper.insert(player1.hand_cards, {61, 62, 1})
515 | -- local player3 = new_player_no_skill()
516 | -- helper.insert(player3.hand_cards, 46)
517 | -- helper.put(player3.judge_cards, 62)
518 | -- table.insert(deck.card_pile, 1, 46)
519 | -- player1.flags["跳过判定"] = true
520 | -- player1.flags["跳过摸牌"] = true
521 | -- player1.flags["跳过弃牌"] = true
522 | -- player1:before_turn()
523 | -- player1:turn()
524 | -- player1:after_turn()
525 | -- player3.flags["跳过摸牌"] = true
526 | -- player3.flags["跳过弃牌"] = true
527 | -- player3:before_turn()
528 | -- player3:turn()
529 | -- player3:after_turn()
530 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
531 |
532 | -- -- 贾诩乱武测试
533 | -- local player1 = new_test_hero(246)
534 | -- player1:put_on_equip(105)
535 | -- local player2 = new_test_hero(227)
536 | -- helper.insert(player2.hand_cards, {30})
537 | -- local player3 = new_player_no_skill()
538 | -- helper.clear(player3.hand_cards)
539 | -- player3:put_on_equip(105)
540 | -- local player4 = new_test_hero(205)
541 | -- helper.clear(player4.hand_cards)
542 | -- local player5 = new_test_hero(215)
543 | -- helper.insert(player5.hand_cards, {1})
544 | -- player5:put_on_equip(105)
545 | -- local player6 = new_player_no_skill()
546 | -- helper.insert(player6.hand_cards, {1})
547 | -- player6:put_on_equip(105)
548 | -- player6:put_on_equip(96)
549 | -- player1.flags["跳过判定"] = true
550 | -- player1.flags["跳过摸牌"] = true
551 | -- player1.flags["跳过弃牌"] = true
552 | -- player1:before_turn()
553 | -- player1:turn()
554 | -- player1:after_turn()
555 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
556 |
557 | -- -- 夏侯渊测试
558 | -- local player1 = new_test_hero(228)
559 | -- helper.insert(player1.hand_cards, {1, 1, 1, 1, 1, 1, 1, 1})
560 | -- player1:put_on_equip(105)
561 | -- helper.put(player1.hand_cards, 61)
562 | -- local player2 = new_player_no_skill()
563 | -- player2.life = 6
564 | -- helper.insert(player2.hand_cards, {1})
565 | -- player2:put_on_equip(105)
566 | -- player1:before_turn()
567 | -- player1:turn()
568 | -- player1:check_jump_turn()
569 | -- player1:after_turn()
570 | -- player1:before_turn()
571 | -- player1:turn()
572 | -- player1:after_turn()
573 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
574 |
575 | -- -- 曹仁测试
576 | -- local player1 = new_test_hero(229)
577 | -- helper.insert(player1.hand_cards, {105})
578 | -- player1:put_on_equip(106)
579 | -- player1:put_on_equip(95)
580 | -- helper.put(player1.judge_cards, 63)
581 | -- local player2 = new_player_no_skill()
582 | -- helper.insert(player2.hand_cards, {75})
583 | -- player2:put_on_equip(107)
584 | -- player1.flags["跳过判定"] = true
585 | -- player1.flags["跳过摸牌"] = true
586 | -- player1.flags["跳过弃牌"] = true
587 | -- player1:before_turn()
588 | -- player1:turn()
589 | -- player1:after_turn()
590 | -- player2.flags["跳过判定"] = true
591 | -- player2.flags["跳过摸牌"] = true
592 | -- player2.flags["跳过弃牌"] = true
593 | -- player2:before_turn()
594 | -- player2:turn()
595 | -- player2:after_turn()
596 | -- player1:check_jump_turn()
597 | -- player2.flags["跳过判定"] = true
598 | -- player2.flags["跳过摸牌"] = true
599 | -- player2.flags["跳过弃牌"] = true
600 | -- player2:before_turn()
601 | -- player2:turn()
602 | -- player2:after_turn()
603 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
604 |
605 | -- -- 张郃测试
606 | -- local player1 = new_test_hero(249)
607 | -- helper.insert(player1.hand_cards, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1})
608 | -- player1:put_on_equip(106)
609 | -- player1:put_on_equip(95)
610 | -- helper.put(player1.judge_cards, 63)
611 | -- local player2 = new_player_no_skill()
612 | -- helper.insert(player2.hand_cards, {1})
613 | -- player2:put_on_equip(105)
614 | -- local player3 = new_player_no_skill()
615 | -- player1:before_turn()
616 | -- player1:turn()
617 | -- player1:after_turn()
618 | -- player1:before_turn()
619 | -- player1:turn()
620 | -- player1:after_turn()
621 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
622 |
623 | -- -- 小乔测试
624 | -- local player1 = new_test_hero(230)
625 | -- helper.insert(player1.hand_cards, {1, 1, 22})
626 | -- helper.put(player1.judge_cards, 63)
627 | -- local player2 = new_player_no_skill()
628 | -- player2:put_on_equip(102)
629 | -- local player3 = new_player_no_skill()
630 | -- table.insert(deck.card_pile, 1, 1)
631 | -- -- player1:before_turn()
632 | -- -- player1:turn()
633 | -- -- player1:after_turn()
634 | -- player2:before_turn()
635 | -- player2:turn()
636 | -- player2:after_turn()
637 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
638 |
639 | -- -- 周泰测试
640 | -- local player1 = new_test_hero(231)
641 | -- player1.life = 4
642 | -- helper.insert(player1.hand_cards, {1, 2, 3, 4, 5, 6, 7, 8, 9, 48, 70})
643 | -- local player2 = new_player_no_skill()
644 | -- player2:put_on_equip(90)
645 | -- helper.insert(player2.hand_cards, {1, 1, 1, 1, 1, 1, 1, 1, 48, 70, 75})
646 | -- table.insert(deck.card_pile, 1, 97)
647 | -- table.insert(deck.card_pile, 2, 99)
648 | -- table.insert(deck.card_pile, 3, 97)
649 | -- player2.flags["跳过判定"] = true
650 | -- player2.flags["跳过摸牌"] = true
651 | -- player2.flags["跳过弃牌"] = true
652 | -- player2:before_turn()
653 | -- player2:turn()
654 | -- player2:after_turn()
655 | -- player1:before_turn()
656 | -- player1:turn()
657 | -- player1:after_turn()
658 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
659 |
660 | -- -- 卧龙诸葛测试
661 | -- local player1 = new_test_hero(233)
662 | -- -- player1:put_on_equip(102)
663 | -- helper.insert(player1.hand_cards, {1, 22})
664 | -- local player2 = new_player_no_skill()
665 | -- player2:put_on_equip(90)
666 | -- helper.insert(player2.hand_cards, {1, 1, 22, 22, 54})
667 | -- table.insert(deck.card_pile, 1, 1)
668 | -- player2.flags["跳过判定"] = true
669 | -- player2.flags["跳过摸牌"] = true
670 | -- player2.flags["跳过弃牌"] = true
671 | -- player2:before_turn()
672 | -- player2:turn()
673 | -- player2:after_turn()
674 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
675 |
676 | -- -- 庞统测试
677 | -- local player1 = new_test_hero(234)
678 | -- player1.life = -2
679 | -- player1:put_on_equip(90)
680 | -- helper.put(player1.judge_cards, 61)
681 | -- helper.insert(player1.hand_cards, {1, 50})
682 | -- local player2 = new_player_no_skill()
683 | -- player2:put_on_equip(90)
684 | -- helper.insert(player2.hand_cards, {1, 1, 22, 22, 54})
685 | -- player2.flags["跳过判定"] = true
686 | -- player2.flags["跳过摸牌"] = true
687 | -- player2.flags["跳过弃牌"] = true
688 | -- player2:before_turn()
689 | -- player2:turn()
690 | -- player2:after_turn()
691 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
692 |
693 | -- -- 典韦测试
694 | -- local player1 = new_test_hero(235)
695 | -- player1.life = 2
696 | -- player1:put_on_equip(90)
697 | -- helper.insert(player1.hand_cards, {1, 90})
698 | -- local player2 = new_player_no_skill()
699 | -- player2.life = 3
700 | -- local player3 = new_player_no_skill()
701 | -- player3.life = 1
702 | -- player1.flags["跳过判定"] = true
703 | -- player1.flags["跳过摸牌"] = true
704 | -- player1.flags["跳过弃牌"] = true
705 | -- player1:before_turn()
706 | -- player1:turn()
707 | -- player1:after_turn()
708 | -- player1.flags["跳过判定"] = true
709 | -- player1.flags["跳过摸牌"] = true
710 | -- player1.flags["跳过弃牌"] = true
711 | -- player1:before_turn()
712 | -- player1:turn()
713 | -- player1:after_turn()
714 | -- player2:before_turn()
715 | -- player2:turn()
716 | -- player2:after_turn()
717 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
718 |
719 | -- -- 荀彧测试
720 | -- local player1 = new_test_hero(236)
721 | -- helper.insert(player1.hand_cards, {68, 72})
722 | -- player1:put_on_equip(105)
723 | -- local player2 = new_player_no_skill()
724 | -- helper.clear(player2.hand_cards)
725 | -- helper.insert(player2.hand_cards, {66})
726 | -- -- player2:put_on_equip(105)
727 | -- local player3 = new_player_no_skill()
728 | -- -- helper.clear(player3.hand_cards)
729 | -- -- helper.insert(player3.hand_cards, {1, 108})
730 | -- player3:put_on_equip(105)
731 | -- player1.flags["跳过判定"] = true
732 | -- player1.flags["跳过摸牌"] = true
733 | -- player1.flags["跳过弃牌"] = true
734 | -- player1:before_turn()
735 | -- player1:turn()
736 | -- player1:after_turn()
737 | -- player1:take_off_equip(105)
738 | -- player2:take_off_equip(105)
739 | -- player3:take_off_equip(105)
740 | -- player1.flags["跳过判定"] = true
741 | -- player1.flags["跳过摸牌"] = true
742 | -- player1.flags["跳过弃牌"] = true
743 | -- player1:before_turn()
744 | -- player1:turn()
745 | -- player1:after_turn()
746 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
747 |
748 | -- -- 太史慈测试
749 | -- local player1 = new_test_hero(237)
750 | -- helper.insert(player1.hand_cards, {1, 1, 98, 108})
751 | -- player1:put_on_equip(90)
752 | -- local player2 = new_player_no_skill()
753 | -- local player3 = new_player_no_skill()
754 | -- local player4 = new_test_hero(215)
755 | -- helper.insert(player4.hand_cards, {1, 1, 1})
756 | -- player1.flags["跳过判定"] = true
757 | -- player1.flags["跳过摸牌"] = true
758 | -- player1.flags["跳过弃牌"] = true
759 | -- player1:before_turn()
760 | -- player1:turn()
761 | -- player1:after_turn()
762 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
763 |
764 | -- -- 庞德测试
765 | -- local player1 = new_test_hero(238)
766 | -- helper.insert(player1.hand_cards, {1})
767 | -- -- player1:put_on_equip(98)
768 | -- local player2 = new_player_no_skill()
769 | -- player2:put_on_equip(105)
770 | -- helper.insert(player2.hand_cards, 32)
771 | -- local player3 = new_player_no_skill()
772 | -- helper.clear(player3.hand_cards)
773 | -- helper.insert(player3.hand_cards, 2)
774 | -- local player4 = new_test_hero(212)
775 | -- helper.insert(player4.hand_cards, {32, 32})
776 | -- player4:put_on_equip(105)
777 | -- player1.flags["跳过判定"] = true
778 | -- player1.flags["跳过摸牌"] = true
779 | -- player1.flags["跳过弃牌"] = true
780 | -- player1:before_turn()
781 | -- player1:turn()
782 | -- player1:after_turn()
783 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
784 |
785 | -- -- 袁绍测试
786 | -- local player1 = new_test_hero(239)
787 | -- helper.insert(player1.hand_cards, {1, 61, 1, 1, 49, 50, 65, 73, 73, 82, 82})
788 | -- local player2 = new_player_no_skill()
789 | -- helper.insert(player2.hand_cards, 69)
790 | -- local player3 = new_player_no_skill()
791 | -- player1.flags["跳过判定"] = true
792 | -- player1.flags["跳过摸牌"] = true
793 | -- player1.flags["跳过弃牌"] = true
794 | -- player1:before_turn()
795 | -- player1:turn()
796 | -- player1:after_turn()
797 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
798 |
799 | -- -- 颜良文丑测试
800 | -- local player1 = new_test_hero(240)
801 | -- helper.insert(player1.hand_cards, {1, 8, 35, 46, 1, 1, 1, 1})
802 | -- local player2 = new_test_hero(209)
803 | -- helper.insert(player2.hand_cards, {69, 1})
804 | -- local player3 = new_test_hero(225)
805 | -- helper.insert(player3.hand_cards, {1, 1})
806 | -- local player4 = new_player_no_skill()
807 | -- table.insert(deck.card_pile, 1, 97)
808 | -- player1.flags["跳过弃牌"] = true
809 | -- player1:before_turn()
810 | -- player1:turn()
811 | -- player1:after_turn()
812 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
813 |
814 | -- -- 祝融测试
815 | -- local player1 = new_player_no_skill()
816 | -- player1.life = 2
817 | -- player1:put_on_equip(90)
818 | -- helper.insert(player1.hand_cards, {54, 54})
819 | -- local player2 = new_test_hero(212)
820 | -- helper.insert(player2.hand_cards, {1})
821 | -- local player3 = new_test_hero(241)
822 | -- helper.insert(player3.hand_cards, {1, 1, 1, 1, 1, 1, 105, 90})
823 | -- -- player1.flags["跳过判定"] = true
824 | -- -- player1.flags["跳过弃牌"] = true
825 | -- -- player1:before_turn()
826 | -- -- player1:turn()
827 | -- -- player1:after_turn()
828 | -- -- player2.flags["跳过判定"] = true
829 | -- -- player2.flags["跳过摸牌"] = true
830 | -- -- player2.flags["跳过弃牌"] = true
831 | -- -- player2:before_turn()
832 | -- -- player2:turn()
833 | -- -- player2:after_turn()
834 | -- player3.flags["跳过判定"] = true
835 | -- player3.flags["跳过摸牌"] = true
836 | -- player3.flags["跳过弃牌"] = true
837 | -- player3:before_turn()
838 | -- player3:turn()
839 | -- player3:after_turn()
840 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
841 |
842 | -- -- 孟获测试
843 | -- local player1 = new_test_hero(242)
844 | -- player1:put_on_equip(90)
845 | -- local player2 = new_player_no_skill()
846 | -- helper.insert(player2.hand_cards, {54, 1, 83})
847 | -- local player3 = new_test_hero(210)
848 | -- table.insert(deck.card_pile, 1, 1)
849 | -- player2.flags["跳过判定"] = true
850 | -- player2.flags["跳过摸牌"] = true
851 | -- player2.flags["跳过弃牌"] = true
852 | -- player2:before_turn()
853 | -- player2:turn()
854 | -- player2:after_turn()
855 | -- table.insert(deck.card_pile, 1, 97)
856 | -- table.insert(deck.card_pile, 2, 57)
857 | -- table.insert(deck.card_pile, 3, 17)
858 | -- table.insert(deck.card_pile, 4, 17)
859 | -- player1.flags["跳过判定"] = true
860 | -- player1.flags["跳过弃牌"] = true
861 | -- player1:before_turn()
862 | -- player1:turn()
863 | -- player1:after_turn()
864 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
865 |
866 | -- -- 曹丕、蔡文姬测试
867 | -- local player1 = new_test_hero(243)
868 | -- helper.insert(player1.hand_cards, 75)
869 | -- local player2 = new_test_hero(253)
870 | -- helper.insert(player2.hand_cards, {1, 1, 1, 1})
871 | -- local player3 = new_test_hero(221)
872 | -- helper.insert(player3.hand_cards, {1})
873 | -- player3:put_on_equip(90)
874 | -- -- table.insert(deck.card_pile, 1, 1)
875 | -- -- table.insert(deck.card_pile, 1, 22)
876 | -- -- table.insert(deck.card_pile, 1, 8)
877 | -- table.insert(deck.card_pile, 1, 34)
878 | -- player3.flags["跳过判定"] = true
879 | -- player3.flags["跳过摸牌"] = true
880 | -- player3.flags["跳过弃牌"] = true
881 | -- player3:before_turn()
882 | -- player3:turn()
883 | -- player3:after_turn()
884 | -- player1.flags["跳过判定"] = true
885 | -- player1.flags["跳过摸牌"] = true
886 | -- player1.flags["跳过弃牌"] = true
887 | -- player1:before_turn()
888 | -- player1:turn()
889 | -- player1:after_turn()
890 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
891 |
892 | -- -- 孙坚测试
893 | -- local player1 = new_test_hero(244)
894 | -- player1.life = 1
895 | -- local player2 = new_player_no_skill()
896 | -- local player3 = new_player_no_skill()
897 | -- helper.clear(player3.hand_cards)
898 | -- player1.flags["跳过判定"] = true
899 | -- player1.flags["跳过摸牌"] = true
900 | -- player1.flags["跳过弃牌"] = true
901 | -- player1:before_turn()
902 | -- player1:turn()
903 | -- player1:after_turn()
904 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
905 |
906 | -- -- 鲁肃测试
907 | -- local player1 = new_test_hero(245)
908 | -- helper.insert(player1.hand_cards, {1, 2, 11})
909 | -- player1:put_on_equip(90)
910 | -- local player2 = new_player_no_skill()
911 | -- helper.clear(player2.hand_cards)
912 | -- helper.insert(player2.hand_cards, {3, 4})
913 | -- local player3 = new_player_no_skill()
914 | -- helper.clear(player3.hand_cards)
915 | -- helper.insert(player3.hand_cards, {5, 6, 7, 8})
916 | -- local player4 = new_test_hero(221)
917 | -- helper.clear(player4.hand_cards)
918 | -- helper.insert(player4.hand_cards, {9, 10})
919 | -- player1.flags["跳过判定"] = true
920 | -- player1.flags["跳过弃牌"] = true
921 | -- player1:before_turn()
922 | -- player1:turn()
923 | -- player1:after_turn()
924 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
925 |
926 | -- -- 刘禅测试
927 | -- local player1 = new_test_hero(247)
928 | -- helper.insert(player1.hand_cards, {2})
929 | -- player1:put_on_equip(90)
930 | -- local player2 = new_player_no_skill()
931 | -- helper.clear(player2.hand_cards)
932 | -- helper.insert(player2.hand_cards, {1, 2})
933 | -- local player3 = new_player_no_skill()
934 | -- helper.clear(player3.hand_cards)
935 | -- helper.insert(player3.hand_cards, {5, 6, 7, 8})
936 | -- local player4 = new_test_hero(221)
937 | -- helper.clear(player4.hand_cards)
938 | -- helper.insert(player4.hand_cards, {9, 10})
939 | -- -- player2.flags["跳过判定"] = true
940 | -- -- player2.flags["跳过摸牌"] = true
941 | -- -- player2.flags["跳过弃牌"] = true
942 | -- -- player2:before_turn()
943 | -- -- player2:turn()
944 | -- -- player2:after_turn()
945 | -- game:main()
946 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
947 |
948 | -- -- 姜维测试
949 | -- local player1 = new_test_hero(248)
950 | -- player1:put_on_equip(105)
951 | -- local player2 = new_player_no_skill()
952 | -- helper.insert(player2.hand_cards, 32)
953 | -- player2:put_on_equip(108)
954 | -- local player3 = new_player_no_skill()
955 | -- player3:put_on_equip(96)
956 | -- local player4 = new_player_no_skill()
957 | -- helper.insert(player4.hand_cards, {32, 32})
958 | -- player4:put_on_equip(105)
959 | -- player1.flags["跳过判定"] = true
960 | -- -- player1.flags["跳过摸牌"] = true
961 | -- player1.flags["跳过弃牌"] = true
962 | -- player1:before_turn()
963 | -- player1:turn()
964 | -- player1:after_turn()
965 | -- player1.flags["跳过判定"] = true
966 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
967 |
968 | -- -- 邓艾测试
969 | -- local player1 = new_test_hero(250)
970 | -- player1:put_on_equip(105)
971 | -- helper.insert(player1.hand_cards, {1, 1, 69})
972 | -- local player2 = new_player_no_skill()
973 | -- helper.insert(player2.hand_cards, {75, 75, 75, 1, 1})
974 | -- player2:put_on_equip(105)
975 | -- local player3 = new_player_no_skill()
976 | -- player3:put_on_equip(105)
977 | -- local player4 = new_player_no_skill()
978 | -- helper.insert(player4.hand_cards, {32, 32})
979 | -- player4:put_on_equip(105)
980 | -- player2.flags["跳过判定"] = true
981 | -- player2.flags["跳过摸牌"] = true
982 | -- player2.flags["跳过弃牌"] = true
983 | -- player2:before_turn()
984 | -- player2:turn()
985 | -- player2:after_turn()
986 | -- player1.flags["跳过判定"] = true
987 | -- player1.flags["跳过摸牌"] = true
988 | -- player1.flags["跳过弃牌"] = true
989 | -- player1:before_turn()
990 | -- player1:turn()
991 | -- player1:after_turn()
992 | -- player1.flags["跳过判定"] = true
993 | -- player1.flags["跳过摸牌"] = true
994 | -- player1.flags["跳过弃牌"] = true
995 | -- player1:before_turn()
996 | -- player1:turn()
997 | -- player1:after_turn()
998 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
999 |
1000 | -- -- 孙策测试
1001 | -- local player1 = new_test_hero(251)
1002 | -- player1.life = 1
1003 | -- helper.insert(player1.hand_cards, {1, 1, 1, 1, 22, 82, 83})
1004 | -- player1:put_on_equip(90)
1005 | -- local player2 = new_player_no_skill()
1006 | -- player2:put_on_equip(90)
1007 | -- helper.clear(player2.hand_cards)
1008 | -- helper.insert(player2.hand_cards, {1, 1, 1, 1, 22, 82, 83})
1009 | -- local player3 = new_player_no_skill()
1010 | -- helper.clear(player3.hand_cards)
1011 | -- local player4 = new_test_hero(221)
1012 | -- helper.clear(player4.hand_cards)
1013 | -- player1.flags["跳过判定"] = true
1014 | -- -- player1.flags["跳过摸牌"] = true
1015 | -- player1.flags["跳过弃牌"] = true
1016 | -- player1:before_turn()
1017 | -- player1:turn()
1018 | -- player1:after_turn()
1019 | -- player2.flags["跳过判定"] = true
1020 | -- player2.flags["跳过摸牌"] = true
1021 | -- player2.flags["跳过弃牌"] = true
1022 | -- player2:before_turn()
1023 | -- player2:turn()
1024 | -- player2:after_turn()
1025 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
1026 |
1027 | -- -- 张昭张纮测试
1028 | -- local player1 = new_test_hero(252)
1029 | -- helper.insert(player1.hand_cards, {100, 103, 104})
1030 | -- local player2 = new_player_no_skill()
1031 | -- player2.life = 1
1032 | -- player2:put_on_equip(90)
1033 | -- helper.clear(player2.hand_cards)
1034 | -- helper.insert(player2.hand_cards, {1, 1, 1, 1, 96})
1035 | -- local player3 = new_player_no_skill()
1036 | -- player3:put_on_equip(105)
1037 | -- helper.clear(player3.hand_cards)
1038 | -- player2.flags["跳过判定"] = true
1039 | -- player2.flags["跳过摸牌"] = true
1040 | -- -- player2.flags["跳过弃牌"] = true
1041 | -- player2:before_turn()
1042 | -- player2:turn()
1043 | -- player2:after_turn()
1044 | -- player1.flags["跳过判定"] = true
1045 | -- player1.flags["跳过摸牌"] = true
1046 | -- player1.flags["跳过弃牌"] = true
1047 | -- player1:before_turn()
1048 | -- player1:turn()
1049 | -- player1:after_turn()
1050 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
1051 |
1052 | -- -- 张角雷击测试
1053 | -- local player1 = new_test_hero(232)
1054 | -- helper.insert(player1.hand_cards, {31, 31, 31, 31, 1, 1, 1, 1})
1055 | -- player1:put_on_equip(100)
1056 | -- local player2 = new_player_no_skill()
1057 | -- player2.life = 1
1058 | -- helper.insert(player2.hand_cards, 1)
1059 | -- local player3 = new_player_no_skill()
1060 | -- player3.life = 1
1061 | -- helper.insert(player3.hand_cards, 57)
1062 | -- player1.flags["跳过判定"] = true
1063 | -- player1.flags["跳过摸牌"] = true
1064 | -- player1.flags["跳过弃牌"] = true
1065 | -- player2.flags["跳过判定"] = true
1066 | -- player2.flags["跳过摸牌"] = true
1067 | -- player2.flags["跳过弃牌"] = true
1068 | -- player3.flags["跳过判定"] = true
1069 | -- player3.flags["跳过摸牌"] = true
1070 | -- player3.flags["跳过弃牌"] = true
1071 | -- for i = 1, 100, 1 do
1072 | -- table.insert(deck.card_pile, 1, 31)
1073 | -- end
1074 | -- game:main()
1075 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
1076 |
1077 | -- -- 大乔流离测试
1078 | -- local player1 = new_test_hero(215)
1079 | -- helper.insert(player1.hand_cards, {1, 1, 1, 1})
1080 | -- local player2 = new_test_hero(207)
1081 | -- helper.clear(player2.hand_cards)
1082 | -- player2:put_on_equip(98)
1083 | -- helper.insert(player2.hand_cards, 1)
1084 | -- local player3 = new_player_no_skill()
1085 | -- helper.clear(player3.hand_cards)
1086 | -- player3:put_on_equip(98)
1087 | -- helper.insert(player3.hand_cards, 1)
1088 | -- local player4 = new_player_no_skill()
1089 | -- helper.clear(player4.hand_cards)
1090 | -- player2.flags["跳过判定"] = true
1091 | -- player2.flags["跳过摸牌"] = true
1092 | -- player2.flags["跳过弃牌"] = true
1093 | -- player2:before_turn()
1094 | -- player2:turn()
1095 | -- player2:after_turn()
1096 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
1097 |
1098 | -- -- 寒冰剑测试
1099 | -- local player1 = new_test_hero(215)
1100 | -- helper.insert(player1.hand_cards, 1)
1101 | -- player1:put_on_equip(92)
1102 | -- -- local player2 = new_player_no_skill()
1103 | -- local player2 = new_test_hero(221)
1104 | -- helper.clear(player2.hand_cards)
1105 | -- helper.insert(player2.hand_cards, {1})
1106 | -- -- player2:put_on_equip(90)
1107 | -- player1.flags["跳过判定"] = true
1108 | -- player1.flags["跳过摸牌"] = true
1109 | -- player1.flags["跳过弃牌"] = true
1110 | -- player1:before_turn()
1111 | -- player1:turn()
1112 | -- player1:after_turn()
1113 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
1114 |
1115 | -- -- 青釭剑、仁王盾、八卦阵测试
1116 | -- local player1 = new_player_no_skill()
1117 | -- helper.clear(player1.hand_cards)
1118 | -- helper.insert(player1.hand_cards, {1, 8, 22, 25})
1119 | -- player1:put_on_equip(93)
1120 | -- -- player1:put_on_equip(90)
1121 | -- local player2 = new_test_hero(233)
1122 | -- helper.insert(player2.hand_cards, 34)
1123 | -- -- player2:put_on_equip(100)
1124 | -- -- player2:put_on_equip(102)
1125 | -- -- local player3 = new_player_no_skill()
1126 | -- -- helper.clear(player3.hand_cards)
1127 | -- -- helper.insert(player3.hand_cards, 34)
1128 | -- -- -- player3:put_on_equip(100)
1129 | -- -- player3:put_on_equip(102)
1130 | -- player1.flags["跳过判定"] = true
1131 | -- player1.flags["跳过摸牌"] = true
1132 | -- player1.flags["跳过弃牌"] = true
1133 | -- player1:before_turn()
1134 | -- player1:turn()
1135 | -- player1:after_turn()
1136 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
1137 |
1138 | -- -- 雌雄双股剑测试
1139 | -- local player1 = new_player_no_skill()
1140 | -- helper.clear(player1.hand_cards)
1141 | -- helper.insert(player1.hand_cards, 1)
1142 | -- player1:put_on_equip(94)
1143 | -- local player2 = new_test_hero(208)
1144 | -- helper.clear(player2.hand_cards)
1145 | -- helper.insert(player2.hand_cards, {1})
1146 | -- player2:put_on_equip(94)
1147 | -- local player3 = new_player_no_skill()
1148 | -- helper.clear(player3.hand_cards)
1149 | -- local player4 = new_test_hero(223)
1150 | -- helper.clear(player4.hand_cards)
1151 | -- player1.flags["跳过判定"] = true
1152 | -- player1.flags["跳过摸牌"] = true
1153 | -- player1.flags["跳过弃牌"] = true
1154 | -- player1:before_turn()
1155 | -- player1:turn()
1156 | -- player1:after_turn()
1157 | -- player2.flags["跳过判定"] = true
1158 | -- player2.flags["跳过摸牌"] = true
1159 | -- player2.flags["跳过弃牌"] = true
1160 | -- player2:before_turn()
1161 | -- player2:turn()
1162 | -- player2:after_turn()
1163 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
1164 |
1165 | -- -- 贯石斧测试
1166 | -- local player1 = new_test_hero(216)
1167 | -- helper.clear(player1.hand_cards)
1168 | -- helper.insert(player1.hand_cards, {1, 1, 2})
1169 | -- player1:put_on_equip(95)
1170 | -- player1:put_on_equip(105)
1171 | -- local player2 = new_player_no_skill()
1172 | -- helper.clear(player2.hand_cards)
1173 | -- helper.insert(player2.hand_cards, 34)
1174 | -- -- player2:put_on_equip(94)
1175 | -- -- local player3 = new_player_no_skill()
1176 | -- -- helper.clear(player3.hand_cards)
1177 | -- -- local player4 = new_test_hero(223)
1178 | -- -- helper.clear(player4.hand_cards)
1179 | -- player1.flags["跳过判定"] = true
1180 | -- player1.flags["跳过摸牌"] = true
1181 | -- player1.flags["跳过弃牌"] = true
1182 | -- player1:before_turn()
1183 | -- player1:turn()
1184 | -- player1:after_turn()
1185 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
1186 |
1187 | -- -- 青龙偃月刀测试
1188 | -- local player1 = new_test_hero(237)
1189 | -- helper.clear(player1.hand_cards)
1190 | -- helper.insert(player1.hand_cards, {1, 1, 1, 1, 89})
1191 | -- player1:put_on_equip(96)
1192 | -- local player2 = new_player_no_skill()
1193 | -- helper.clear(player2.hand_cards)
1194 | -- helper.insert(player2.hand_cards, {34, 1})
1195 | -- player2:put_on_equip(94)
1196 | -- local player3 = new_player_no_skill()
1197 | -- helper.clear(player3.hand_cards)
1198 | -- helper.insert(player3.hand_cards, {34})
1199 | -- local player4 = new_test_hero(215)
1200 | -- helper.clear(player4.hand_cards)
1201 | -- helper.insert(player4.hand_cards, {2})
1202 | -- player1.flags["跳过判定"] = true
1203 | -- player1.flags["跳过摸牌"] = true
1204 | -- player1.flags["跳过弃牌"] = true
1205 | -- player1:before_turn()
1206 | -- player1:turn()
1207 | -- player1:after_turn()
1208 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
1209 |
1210 | -- -- 丈八蛇矛测试
1211 | -- local player1 = new_test_hero(221)
1212 | -- helper.clear(player1.hand_cards)
1213 | -- helper.insert(player1.hand_cards, {34, 89})
1214 | -- player1:put_on_equip(97)
1215 | -- local player2 = new_player_no_skill()
1216 | -- helper.clear(player2.hand_cards)
1217 | -- helper.insert(player2.hand_cards, {34})
1218 | -- player2:put_on_equip(102)
1219 | -- player1.flags["跳过判定"] = true
1220 | -- player1.flags["跳过摸牌"] = true
1221 | -- player1.flags["跳过弃牌"] = true
1222 | -- player1:before_turn()
1223 | -- player1:turn()
1224 | -- player1:after_turn()
1225 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
1226 |
1227 | -- -- 麒麟弓测试
1228 | -- local player1 = new_player_no_skill()
1229 | -- helper.clear(player1.hand_cards)
1230 | -- helper.insert(player1.hand_cards, {1, 1, 2})
1231 | -- player1:put_on_equip(99)
1232 | -- local player2 = new_player_no_skill()
1233 | -- helper.clear(player2.hand_cards)
1234 | -- -- helper.insert(player2.hand_cards, 34)
1235 | -- player2:put_on_equip(105)
1236 | -- player2:put_on_equip(108)
1237 | -- -- player2:put_on_equip(94)
1238 | -- -- local player3 = new_player_no_skill()
1239 | -- -- helper.clear(player3.hand_cards)
1240 | -- -- local player4 = new_test_hero(223)
1241 | -- -- helper.clear(player4.hand_cards)
1242 | -- player1.flags["跳过判定"] = true
1243 | -- player1.flags["跳过摸牌"] = true
1244 | -- player1.flags["跳过弃牌"] = true
1245 | -- player1:before_turn()
1246 | -- player1:turn()
1247 | -- player1:after_turn()
1248 | -- text("弃牌堆:%s", t2s(deck.discard_pile))
1249 |
--------------------------------------------------------------------------------