virtual bool isEnabledAtPlay(const Player *player) const{ if (player->hasUsed("TaichenFightCard")) return false; Duel *duel = new Duel(Card::NoSuit, 0); duel->deleteLater(); if (player->isCardLimited(duel, Card::MethodUse)) return false; return true; }
void LijianCard::use(Room *room, ServerPlayer *, QList<ServerPlayer *> &targets) const{ ServerPlayer *to = targets.at(0); ServerPlayer *from = targets.at(1); Duel *duel = new Duel(Card::NoSuit, 0); duel->setCancelable(duel_cancelable); duel->setSkillName(QString("_%1").arg(getSkillName())); if (!from->isCardLimited(duel, Card::MethodUse) && !from->isProhibited(to, duel)) room->useCard(CardUseStruct(duel, from, to)); else delete duel; }
void TaichenFightCard::use(Room *room, ServerPlayer *source, QList<ServerPlayer *> &) const{ room->loseHp(source); if (source->isAlive()) { Duel *duel = new Duel(Card::NoSuit, 0); duel->setSkillName("_taichenfight"); duel->setCancelable(false); room->addPlayerMark(source, "WushuangTarget"); room->useCard(CardUseStruct(duel, source, room->getLord())); room->removePlayerMark(source, "WushuangTarget"); } }
bool LijianCard::targetFilter(const QList<const Player *> &targets, const Player *to_select, const Player *Self) const{ if (!to_select->isMale()) return false; Duel *duel = new Duel(Card::NoSuit, 0); duel->deleteLater(); if (targets.isEmpty() && Self->isProhibited(to_select, duel)) return false; if (targets.length() == 1 && to_select->isCardLimited(duel, Card::MethodUse)) return false; return targets.length() < 2 && to_select != Self; }
void LijianCard::use(Room *room, ServerPlayer *source, const QList<ServerPlayer *> &targets) const{ room->throwCard(this); ServerPlayer *to = targets.at(0); ServerPlayer *from = targets.at(1); Duel *duel = new Duel(Card::NoSuit, 0); duel->setCancelable(false); CardEffectStruct effect; effect.card = duel; effect.from = from; effect.to = to; room->cardEffect(effect); }
void TaichenFightCard::use(Room *room, ServerPlayer *source, const QList<ServerPlayer *> &targets) const{ room->loseHp(source); if(source->isAlive()){ Duel *duel = new Duel(Card::NoSuit, 0); duel->setCancelable(false); CardEffectStruct effect; effect.card = duel; effect.from = source; effect.to = room->getLord(); room->acquireSkill(source, "wushuang", false); room->cardEffect(effect); source->loseSkill("wushuang"); } }
int AIInterface::Search(Duel* pos, int depth, int player) { //Duel* lastpos if (depth == 0) { return Evaluate(pos, player); } int value = 0; vector<Message> moves = getValidMoves(pos); for (int i = 0; i < min(10, int(moves.size())); i++) { //Duel* d = new Duel(*pos); Duel* d = new Duel; ActiveDuel = d; d->isSimulation = true; d->RandomGen.SetRandomSeed(pos->RandomGen.GetRandomSeed()); d->setDecks(pos->decknames[0], pos->decknames[1]); d->startDuel(); d->dispatchAllMessages(); cout << "AI: move size: " << pos->MoveHistory.size() << endl; for (vector<Message>::iterator i = pos->MoveHistory.begin(); i != pos->MoveHistory.end(); i++) { //cout << "AI sim move: " << (*i).getType() << endl; d->handleInterfaceInput(*i); d->dispatchAllMessages(); } if (d->hands[0].cards.size() != pos->hands[0].cards.size()) { cout << "AI: ERROR check not valid NON-ROOT " << d->hands[0].cards.size() << " " << pos->hands[0].cards.size() << endl; cout << d->MoveHistory.size() << " " << pos->MoveHistory.size() << endl; } for (int i = 0; i < depth; i++) { vector<Message> m = getValidMoves(d); if (m.size() == 0) { cout << "AI: out of moves" << endl; break; } Message mov = m.at(rand() % m.size()); d->handleInterfaceInput(mov); d->dispatchAllMessages(); cout << "AI: move made: " << mov.getType() << endl; } value += Evaluate(d, player); if (d!=NULL) delete d; } return value; }
void TaichenFightCard::use(Room *room, ServerPlayer *source, QList<ServerPlayer *> &) const { room->loseHp(source); if (source->isAlive()) { Duel *duel = new Duel(Card::NoSuit, 0); duel->setSkillName("_taichenfight"); duel->setCancelable(false); QStringList wushuang_tag; wushuang_tag << room->getLord()->objectName(); source->tag["Wushuang_" + duel->toString()] = wushuang_tag; try { room->useCard(CardUseStruct(duel, source, room->getLord())); } catch (TriggerEvent triggerEvent) { if (triggerEvent == StageChange || triggerEvent == TurnBroken) source->tag.remove("Wushuang_" + duel->toString()); throw triggerEvent; } source->tag.remove("Wushuang_" + duel->toString()); } }