virtual void onDamaged(ServerPlayer *xiahou, const DamageStruct &damage) const{ ServerPlayer *from = damage.from; Room *room = xiahou->getRoom(); QVariant source = QVariant::fromValue(from); if(from && from->isAlive() && room->askForSkillInvoke(xiahou, "ganglie", source)){ room->playSkillEffect(objectName()); JudgeStruct judge; judge.pattern = QRegExp("(.*):(club):(.*)"); judge.good = false; judge.reason = objectName(); judge.who = xiahou; room->judge(judge); if(judge.isGood()){ if(!room->askForDiscard(from, objectName(), 2, true)){ DamageStruct damage; damage.from = xiahou; damage.to = from; room->setEmotion(xiahou, "good"); room->damage(damage); } }else room->setEmotion(xiahou, "bad"); } }
virtual bool trigger(TriggerEvent , ServerPlayer *player, QVariant &data) const{ if(player->isNude()) return false; Room *room = player->getRoom(); ServerPlayer *caopi = room->findPlayerBySkillName(objectName()); if(caopi && caopi->isAlive() && room->askForSkillInvoke(caopi, objectName(), data)){ if(player->isCaoCao()){ room->playSkillEffect(objectName(), 3); }else if(player->getGeneral()->isMale()) room->playSkillEffect(objectName(), 1); else room->playSkillEffect(objectName(), 2); caopi->obtainCard(player->getWeapon()); caopi->obtainCard(player->getArmor()); caopi->obtainCard(player->getDefensiveHorse()); caopi->obtainCard(player->getOffensiveHorse()); DummyCard *all_cards = player->wholeHandCards(); if(all_cards){ room->moveCardTo(all_cards, caopi, Player::Hand, false); delete all_cards; } } return false; }
void FanjianCard::onEffect(const CardEffectStruct &effect) const{ ServerPlayer *zhouyu = effect.from; ServerPlayer *target = effect.to; Room *room = zhouyu->getRoom(); int card_id = zhouyu->getRandomHandCardId(); const Card *card = Sanguosha->getCard(card_id); Card::Suit suit = room->askForSuit(target); LogMessage log; log.type = "#ChooseSuit"; log.from = target; log.arg = Card::Suit2String(suit); room->sendLog(log); room->showCard(zhouyu, card_id); room->getThread()->delay(); if(card->getSuit() != suit){ DamageStruct damage; damage.card = NULL; damage.from = zhouyu; damage.to = target; room->damage(damage); } if(target->isAlive()){ target->obtainCard(card); } }
virtual bool trigger(TriggerEvent event, ServerPlayer *player, QVariant &data) const{ if(player->isNude()) return false; Room *room = player->getRoom(); ServerPlayer *caopi = NULL; QList<ServerPlayer *> players = room->getOtherPlayers(player); foreach(ServerPlayer *p, players){ if(p->hasSkill(objectName())){ caopi = p; break; } } if(caopi && caopi->isAlive() && room->askForSkillInvoke(caopi, objectName())){ caopi->obtainCard(player->getWeapon()); caopi->obtainCard(player->getArmor()); caopi->obtainCard(player->getDefensiveHorse()); caopi->obtainCard(player->getOffensiveHorse()); DummyCard *all_cards = player->wholeHandCards(); if(all_cards){ room->moveCardTo(all_cards, caopi, Player::Hand, false); delete all_cards; } } return false; }
void Shit::onMove(const CardMoveStruct &move) const{ ServerPlayer *from = move.from; if(from && move.from_place == Player::Hand && from->getRoom()->getCurrent() == move.from && move.to_place == Player::DiscardedPile && from->isAlive()){ DamageStruct damage; damage.from = damage.to = from; damage.card = this; damage.damage = 1; damage.nature = DamageStruct::Normal; from->getRoom()->damage(damage); } }
virtual bool trigger(TriggerEvent event, ServerPlayer *diaochan, QVariant &data) const{ Room *room = diaochan->getRoom(); if(event == PhaseChange && diaochan->getPhase() == Player::Discard){ ServerPlayer *target = room->getTag("LihunTarget").value<PlayerStar>(); if(!target || target->isDead()) return false; int hp = target->isAlive() ? target->getHp() : 0; if(diaochan->getCards("he").length() <= hp){ foreach(const Card *card, diaochan->getCards("he")){ room->moveCardTo(card, target, Player::Hand, room->getCardPlace(card->getEffectiveId()) == Player::Hand ? false : true); } }
virtual void onDamaged(ServerPlayer *huaxiong, const DamageStruct &damage) const{ ServerPlayer *from = damage.from; Room *room = huaxiong->getRoom(); if(from && from->isAlive() && damage.card && damage.card->isKindOf("Slash") && damage.card->isRed()){ room->playSkillEffect(objectName()); LogMessage log; log.from = huaxiong; log.arg = objectName(); log.type = "#TriggerSkill"; room->sendLog(log); if(from->isWounded()) room->recover(from, RecoverStruct(), true); else from->drawCards(1); } }
virtual bool trigger(TriggerEvent, Room *room, ServerPlayer *player, QVariant &) const{ if (player->getPhase() != Player::Finish) return false; ServerPlayer *yuejin = room->findPlayerBySkillName(objectName()); if (!yuejin || yuejin == player) return false; if (yuejin->canDiscard(yuejin, "h") && room->askForCard(yuejin, ".Basic", "@xiaoguo", QVariant(), objectName())) { room->broadcastSkillInvoke(objectName(), 1); if (!room->askForCard(player, ".Equip", "@xiaoguo-discard", QVariant())) { room->broadcastSkillInvoke(objectName(), 2); room->damage(DamageStruct("xiaoguo", yuejin, player)); } else { room->broadcastSkillInvoke(objectName(), 3); if (yuejin->isAlive()) yuejin->drawCards(1, objectName()); } } return false; }
void Shit::onMove(const CardMoveStruct &move) const{ ServerPlayer *from = (ServerPlayer*)move.from; if(from && move.from_place == Player::PlaceHand && from->getRoom()->getCurrent() == move.from && (move.to_place == Player::DiscardPile || move.to_place == Player::PlaceSpecial) && move.to == NULL && from->isAlive()){ LogMessage log; log.card_str = getEffectIdString(); log.from = from; Room *room = from->getRoom(); if(getSuit() == Spade){ log.type = "$ShitLostHp"; room->sendLog(log); room->loseHp(from); return; } DamageStruct damage; damage.from = damage.to = from; damage.card = this; switch(getSuit()){ case Club: damage.nature = DamageStruct::Thunder; break; case Heart: damage.nature = DamageStruct::Fire; break; default: damage.nature = DamageStruct::Normal; } log.type = "$ShitDamage"; room->sendLog(log); room->damage(damage); } }
void Shit::onMove(const CardMoveStruct &move) const{ ServerPlayer *from = move.from; if(from && move.from_place == Player::Hand && from->getRoom()->getCurrent() == move.from && (move.to_place == Player::DiscardedPile || move.to_place == Player::Special) && move.to == NULL && from->isAlive()){ DamageStruct damage; damage.from = damage.to = from; damage.card = this; switch(getSuit()){ case Club: damage.nature = DamageStruct::Thunder; break; case Heart: damage.nature = DamageStruct::Fire; break; default: damage.nature = DamageStruct::Normal; } from->getRoom()->damage(damage); } }
virtual void onDamaged(ServerPlayer *xiahou, const DamageStruct &damage) const{ ServerPlayer *from = damage.from; Room *room = xiahou->getRoom(); QVariant source = QVariant::fromValue(from); if(from && from->isAlive() && room->askForSkillInvoke(xiahou, "neoganglie", source)){ room->broadcastSkillInvoke("ganglie"); JudgeStruct judge; judge.pattern = QRegExp("(.*):(heart):(.*)"); judge.good = false; judge.reason = objectName(); judge.who = xiahou; room->judge(judge); if(judge.isGood()){ QStringList choicelist; choicelist << "damage"; if (from->getHandcardNum() > 1) choicelist << "throw"; QString choice; if (choicelist.length() == 1) choice = choicelist.first(); else choice = room->askForChoice(xiahou, "neoganglie", choicelist.join("+")); if(choice == "damage"){ DamageStruct damage; damage.from = xiahou; damage.to = from; room->setEmotion(xiahou, "good"); room->damage(damage); } else room->askForDiscard(from, objectName(), 2, 2); }else room->setEmotion(xiahou, "bad"); } }