void onDamaged(ServerPlayer *xiahou, const DamageStruct &damage) const { ServerPlayer *from = damage.from; Room *room = xiahou->getRoom(); QVariant data = QVariant::fromValue(damage); if (room->askForSkillInvoke(xiahou, "neoganglie", data)) { room->broadcastSkillInvoke("ganglie"); JudgeStruct judge; judge.pattern = ".|heart"; judge.good = false; judge.reason = objectName(); judge.who = xiahou; room->judge(judge); if (!from || from->isDead()) return; if (judge.isGood()) { QStringList choicelist; choicelist << "damage"; if (from->getHandcardNum() > 1) choicelist << "throw"; QString choice = room->askForChoice(xiahou, objectName(), choicelist.join("+")); if (choice == "damage") room->damage(DamageStruct(objectName(), xiahou, from)); else room->askForDiscard(from, objectName(), 2, 2); } } }
void onDamaged(ServerPlayer *target, const DamageStruct &damage) const { Room *room = target->getRoom(); for (int i = 1; i <= damage.damage; i++) { ServerPlayer *current = room->getCurrent(); if (!current || current->isDead() || current->getPhase() == Player::NotActive) break; if (room->askForSkillInvoke(target, objectName(), QVariant::fromValue(current))) { room->broadcastSkillInvoke(objectName()); room->addPlayerMark(current, "@hengjiang"); } } }
virtual void onDamaged(ServerPlayer *xiahou, const DamageStruct &damage) const{ ServerPlayer *from = damage.from; Room *room = xiahou->getRoom(); JudgeStruct judge; judge.pattern = ".|heart"; judge.good = false; judge.reason = objectName(); judge.who = xiahou; room->judge(judge); if (!from || from->isDead()) return; if (judge.isGood()) { if (from->getHandcardNum() < 2 || !room->askForDiscard(from, objectName(), 2, 2, true)) room->damage(DamageStruct(objectName(), xiahou, from)); } }
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); } }