Agent skill

appendix

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/appendix

SKILL.md

附录B:共享手牌技能示例

1. 技能描述

  • 锁定技,拥有此技能的角色共享手牌,且手牌互相可见。当你处于弃牌阶段时,你无法弃置“共享”牌。

2. 技能代码

  • 屎山代码警告
  • 仅经过浅测,仅供参考!
javascript
"共享": {
    init(player, skill) {
        lib.translate["共享"] = "共享"
        lib.translate["共享_info"] = "锁定技,拥有此技能的角色共享手牌,且手牌互相可见。当你处于弃牌阶段时,你无法弃置“共享”牌。"
        _status.gongxiang = _status.gongxiang || {
            cards: [],
            players: []
        };
        ui.gongxiang = ui.gongxiang || ui.create.div("#gongxiang");
        for (let card of player.getCards("h")) {
            if (_status.gongxiang.cards.some(g =>
                g.name === card.name && g.suit === card.suit && g.number === card.number)) continue;
            _status.gongxiang.cards.push(card)
        }
        _status.gongxiang.players.push(get.translation(player.name))
        get.event().trigger("gongxiang_update")
    },
    mark: true,
    direct: true,
    charlotte: true,
    intro: {
        content () {
            return "当前共享手牌的角色:</br>" + _status.gongxiang.players
        }
    },
    mod: {
        ignoredHandcard (card, player) {
            return card.hasGaintag('共享')
        },
        cardDiscardable(card, player, name) {
            if (name == "phaseDiscard") return !card.hasGaintag('共享')
            return true
        },
    },
    ai: {
        viewHandcard: true,
        skillTagFilter(player, tag, arg) {
            if (arg == player) return false
            if (arg.hasSkill("共享_update")) return true
            return false
        }
    },
    group: ["共享_lose", "共享_gain", "共享_update"],
    subSkill: {
        lose: {
            charlotte: true,
            direct: true,
            trigger: {
                player: ['useCardBefore', 'respondBefore', "loseBegin", "addToExpansionBegin"]
            },
            filter (event, player) {
                if (!event.cards || !event.cards.length) return false;
                return event.cards.some(card =>
                    _status.gongxiang.cards.some(g =>
                        g.name === card.name &&
                        g.suit === card.suit &&
                        g.number === card.number
                    )
                );
            },
            content() {
                const sharedCards = trigger.cards.filter(card =>
                    _status.gongxiang.cards.some(g =>
                        g.name === card.name &&
                        g.suit === card.suit &&
                        g.number === card.number
                    )
                );
                game.players.forEach(p => {
                    const playerCards = p.getCards("h").filter(card =>
                        sharedCards.some(c =>
                            c.name === card.name &&
                            c.suit === card.suit &&
                            c.number === card.number
                        )
                    );
                    if (playerCards.some(c => _status.gongxiang.cards.includes(c))) {
                        var cards = []
                        player.lose(trigger.cards, ui.gongxiang)
                        if (trigger.cards.length === 1) {
                            cards = playerCards;
                        } else {
                            const newCards = trigger.cards.filter(card =>
                                !sharedCards.some(c =>
                                    c.name === card.name &&
                                    c.suit === card.suit &&
                                    c.number === card.number
                                )
                            );
                            cards = newCards.concat(
                                playerCards.filter(card => _status.gongxiang.cards.includes(card)
                                )
                            );
                        }
                        if (event.triggername == "useCardBegin") {
                            trigger.cancel()
                            player.useCard(cards, trigger.targets)
                        }
                        if (event.triggername == "addToExpansionBegin") {
                            trigger.cards = cards
                        }
                        p.discard(cards)
                    } else {
                        p.lose(playerCards, ui.gongxiang)
                    }
                })
                _status.gongxiang.cards = _status.gongxiang.cards.filter(g =>
                    !sharedCards.some(card =>
                        g.name === card.name &&
                        g.suit === card.suit &&
                        g.number === card.number
                    )
                );
            }
        },
        gain: {
            trigger: {
                player: ["gainAfter"],
            },
            charlotte: true,
            direct: true,
            filter(event, player) {
                return player.getCards("h").some(card => !card.hasGaintag('共享'))
            },
            content: async (event, trigger, player) => {
                let cards = player.getCards("h").filter(card => !card.hasGaintag('共享'))
                for (let card of cards) {
                    if (!_status.gongxiang.cards.some(g =>
                        card.name == g.name && card.suit == g.suit && card.number == g.number)) {
                        _status.gongxiang.cards.push(card);
                    }
                }
                event.trigger("gongxiang_update")
            }
        },
        update: {
            trigger: {
                global: ["gongxiang_update"],
            },
            charlotte: true,
            direct: true,
            filter(event, player) {
                var cards = player.getCards('h')
                let less = _status.gongxiang.cards.some(g =>
                    !cards.some(card =>
                        card.name === g.name && card.suit === g.suit && card.number === g.number
                    )
                );
                return less
            },
            content: async (event, trigger, player) => {
                var cards = player.getCards('h')
                let less = _status.gongxiang.cards.filter(g =>
                    !cards.some(card =>
                        card.name === g.name && card.suit === g.suit && card.number === g.number
                    )
                );
                cards = []
                for (let card of less) {
                    cards.push(game.createCard(card))
                }
                if (less) {
                    player.gain(cards, "bySelf").gaintag.add("共享")
                }
            }
        }
    }
},

Didn't find tool you were looking for?

Be as detailed as possible for better results