bool trigger(TriggerEvent triggerEvent, Room *room, ServerPlayer *zhangjiao, QVariant &data) const { if (triggerEvent == CardResponded && TriggerSkill::triggerable(zhangjiao)) { const Card *card_star = data.value<CardResponseStruct>().m_card; if (card_star->isKindOf("Jink")) { ServerPlayer *target = room->askForPlayerChosen(zhangjiao, room->getAlivePlayers(), objectName(), "leiji-invoke", true, true); if (target) { room->broadcastSkillInvoke(objectName()); JudgeStruct judge; judge.pattern = ".|black"; judge.good = false; judge.negative = true; judge.reason = objectName(); judge.who = target; room->judge(judge); if (judge.isBad()) room->damage(DamageStruct(objectName(), zhangjiao, target, 1, DamageStruct::Thunder)); } } } else if (triggerEvent == DamageCaused && zhangjiao->isAlive() && zhangjiao->isWounded()) { DamageStruct damage = data.value<DamageStruct>(); if (damage.reason == objectName() && !damage.chain) room->recover(zhangjiao, RecoverStruct(zhangjiao)); } return false; }
virtual bool trigger(TriggerEvent triggerEvent, Room *room, ServerPlayer *player, QVariant &data) const{ if (triggerEvent == DamageInflicted && ArmorSkill::triggerable(player)) { DamageStruct damage = data.value<DamageStruct>(); if (damage.damage > 1) { room->setEmotion(player, "armor/silver_lion"); LogMessage log; log.type = "#SilverLion"; log.from = player; log.arg = QString::number(damage.damage); log.arg2 = objectName(); room->sendLog(log); damage.damage = 1; data = QVariant::fromValue(damage); } } else if (player->hasFlag("SilverLionRecover")) { CardsMoveOneTimeStruct move = data.value<CardsMoveOneTimeStruct>(); if (move.from != player || !move.from_places.contains(Player::PlaceEquip)) return false; for (int i = 0; i < move.card_ids.size(); ++i) { if (move.from_places[i] != Player::PlaceEquip) continue; const Card *card = Sanguosha->getEngineCard(move.card_ids[i]); if (card->objectName() == objectName()) { player->setFlags("-SilverLionRecover"); if (player->isWounded()) { room->setEmotion(player, "armor/silver_lion"); room->recover(player, RecoverStruct(NULL, card)); } return false; } } } return false; }
void onSkillDetached(Room *room, ServerPlayer *player) const { if (player->isWounded() && room->askForSkillInvoke(player, "guixiu_rec", "recover")) { room->broadcastSkillInvoke("guixiu", 2); room->notifySkillInvoked(player, "guixiu"); room->recover(player, RecoverStruct(player)); } }
void Analeptic::onEffect(const CardEffectStruct &effect) const{ Room *room = effect.to->getRoom(); room->setEmotion(effect.to, "analeptic"); if (effect.to->hasFlag("Global_Dying") && Sanguosha->getCurrentCardUseReason() != CardUseStruct::CARD_USE_REASON_PLAY) room->recover(effect.to, RecoverStruct(effect.from, this)); else room->addPlayerMark(effect.to, "drank"); }
bool trigger(TriggerEvent, Room *room, ServerPlayer *player, QVariant &data) const { DamageStruct damage = data.value<DamageStruct>(); if (damage.to->isLord()) { int x = damage.damage; room->recover(damage.to, RecoverStruct(damage.from, NULL, x * 2)); player->drawCards(x, objectName()); } return false; }
virtual bool onPhaseChange(ServerPlayer *ganfuren) const{ Room *room = ganfuren->getRoom(); if (ganfuren->getPhase() != Player::Start || ganfuren->isKongcheng()) return false; if (room->askForSkillInvoke(ganfuren, objectName())) { // As the cost, if one of her handcards cannot be throwed, the skill is unable to invoke foreach (const Card *card, ganfuren->getHandcards()) { if (ganfuren->isJilei(card)) return false; } //================================== int handcard_num = ganfuren->getHandcardNum(); room->broadcastSkillInvoke(objectName()); ganfuren->throwAllHandCards(); if (handcard_num >= ganfuren->getHp()) room->recover(ganfuren, RecoverStruct(ganfuren)); }
virtual bool trigger(TriggerEvent, Room *room, ServerPlayer *player, QVariant &data) const{ RecoverStruct recover_struct = data.value<RecoverStruct>(); int recover = recover_struct.recover; for (int i = 0; i < recover; i++) { ServerPlayer *target = room->askForPlayerChosen(player, room->getOtherPlayers(player), objectName(), "shushen-invoke", true, true); if (target) { room->broadcastSkillInvoke(objectName(), target->getGeneralName().contains("liubei") ? 2 : 1); if (target->isWounded() && room->askForChoice(player, objectName(), "recover+draw", QVariant::fromValue(target)) == "recover") room->recover(target, RecoverStruct(player)); else target->drawCards(2, objectName()); } else { break; } } return false; }
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); } }