コード例 #1
0
void NeoFanjianCard::onEffect(const CardEffectStruct &effect) const{
    ServerPlayer *zhouyu = effect.from;
    ServerPlayer *target = effect.to;
    Room *room = zhouyu->getRoom();

    room->broadcastSkillInvoke("fanjian");
    const Card *card = Sanguosha->getCard(getSubcards().first());
    int card_id = card->getEffectiveId();
    Card::Suit suit = room->askForSuit(target, "neofanjian");

    LogMessage log;
    log.type = "#ChooseSuit";
    log.from = target;
    log.arg = Card::Suit2String(suit);
    room->sendLog(log);

    room->getThread()->delay();
    target->obtainCard(this);
    room->showCard(target, card_id);

    if(card->getSuit() != suit){
        DamageStruct damage;
        damage.card = NULL;
        damage.from = zhouyu;
        damage.to = target;

        room->damage(damage);
    }
}
コード例 #2
0
ファイル: standard.cpp プロジェクト: skypu/QSanguosha
void EquipCard::use(Room *room, ServerPlayer *source, const QList<ServerPlayer *> &targets) const{
    const EquipCard *equipped = NULL;
    ServerPlayer *target = targets.value(0, source);
    
    switch(location()){
    case WeaponLocation: equipped = target->getWeapon(); break;
    case ArmorLocation: equipped = target->getArmor(); break;
    case DefensiveHorseLocation: equipped = target->getDefensiveHorse(); break;
    case OffensiveHorseLocation: equipped = target->getOffensiveHorse(); break;
    }

    if(equipped)
        room->throwCard(equipped, source);
    int tmpId = -1;
    if(getId() > -1)
        tmpId = getId();
    else if(!getSubcards().empty())
       tmpId = this->getSubcards().first();
    if(this->objectName() == "gale-shell" || room->getCardOwner(tmpId)->objectName() == target->objectName()){
        LogMessage log;
        log.from = target;
        log.type = "$Install";
        log.card_str = QString::number(tmpId);
        room->sendLog(log);
        room->moveCardTo(this, target, Player::Equip, true);
    }
}
コード例 #3
0
ファイル: 3d_zhimeng.cpp プロジェクト: duangege815/QSanguosha
void DaojuCard::onUse(Room *room, const CardUseStruct &card_use) const{
    CardStar ju = Sanguosha->getCard(card_use.from->getPile("gui").first());

    const Card *first = Sanguosha->getCard(getSubcards().first());
    const Card *second = Sanguosha->getCard(getSubcards().last());
    Card::Suit suit = Card::NoSuit;
    if(first->isBlack() && second->isBlack())
        suit = Card::Spade;
    else if(first->isRed() && second->isRed())
        suit = Card::Heart;
    Card *new_card = Sanguosha->cloneCard(ju->objectName(), suit, (first->getNumber() + second->getNumber()) / 2);
    new_card->setSkillName("daoju");
    new_card->addSubcard(first);
    new_card->addSubcard(second);

    CardUseStruct use;
    use.card = new_card;
    use.from = card_use.from;
    use.to = card_use.to;
    room->useCard(use);
}
コード例 #4
0
ファイル: 3d_zhimeng.cpp プロジェクト: duangege815/QSanguosha
void XunguiCard::use(Room *room, ServerPlayer *player, const QList<ServerPlayer *> &) const{
    if(!player->getPile("gui").isEmpty()){
        room->playSkillEffect(skill_name, 2);
        room->throwCard(player->getPile("gui").first());
        if(player->isWounded()){
            RecoverStruct rev;
            room->recover(player, rev);
        }
    }
    else
        room->playSkillEffect(skill_name, 1);
    player->addToPile("gui", getSubcards().first());
}
コード例 #5
0
bool Slash::targetFilter(const QList<const Player *> &targets, const Player *to_select, const Player *Self) const{
    int slash_targets = 1;
    if(Self->hasWeapon("halberd") && Self->isLastHandCard(this)){
        slash_targets = 3;
    }
    bool distance_limit = true;
    int rangefix = 0;
    if(isVirtualCard() && getSubcards().length() > 0){
        foreach(int card_id, getSubcards()){
            if(Self->getWeapon())
                if(card_id == Self->getWeapon()->getId())
                    if(Self->getWeapon()->getRange() > 1)
                        rangefix = qMax((Self->getWeapon()->getRange()), rangefix);
            if(Self->getOffensiveHorse())
                if(card_id == Self->getOffensiveHorse()->getId())
                    rangefix = qMax(rangefix, 1);
        }
    }
コード例 #6
0
void QiaobianCard::use(Room *room, ServerPlayer *zhanghe, const QList<ServerPlayer *> &targets) const{
    if(zhanghe->getPhase() == Player::Discard){
        room->setTag("QiaobianCost", QVariant::fromValue(getSubcards().first()));
        room->playSkillEffect("qiaobian", 4);
    }

    if(zhanghe->getPhase() == Player::Judge)
        room->playSkillEffect("qiaobian", 1);

    if(targets.isEmpty())
        return;

    if(zhanghe->getPhase() == Player::Draw){
        room->playSkillEffect("qiaobian", 2);
        QList<ServerPlayer *> players = targets;
        qSort(players.begin(), players.end(), Card::CompareByActionOrder);
        foreach(ServerPlayer *target, players){
            room->cardEffect(this, zhanghe, target);
        }
コード例 #7
0
bool Slash::targetFilter(const QList<const Player *> &targets, const Player *to_select, const Player *Self) const{
    int slash_targets = 1;
    if(Self->hasWeapon("halberd") && Self->isLastHandCard(this)){
        slash_targets = 3;
    }

    bool distance_limit = true;

    if(Self->hasFlag("tianyi_success")){
        distance_limit = false;
        slash_targets ++;
    }

    if(Self->hasSkill("lihuo") && inherits("FireSlash"))
        slash_targets ++;

    if(Self->hasSkill("tieji_p") && Self->getWeapon() && Self->getWeapon()->getRange() >= 3){
        slash_targets ++ ;
    }

    if(Self->hasSkill("shenji") && Self->getWeapon() == NULL)
        slash_targets = 3;

    if(targets.length() >= slash_targets)
        return false;

    if(inherits("WushenSlash")){
        distance_limit = false;
    }

    if(getSkillName() == "wusheng" && Self->isSkillEnhance("wusheng", 1)){
        int card_id = getSubcards().first() ;
        if(Sanguosha->getCard(card_id)->getSuit() == Card::Heart)
            distance_limit = false ;
    }

    return Self->canSlash(to_select, distance_limit);
}
コード例 #8
0
ファイル: 3d_zhimeng.cpp プロジェクト: duangege815/QSanguosha
void DujiCard::use(Room *, ServerPlayer *player, const QList<ServerPlayer *> &) const{
    player->playSkillEffect(skill_name, 1);
    player->addToPile("du", getSubcards().first());
}