diff --git a/QSanguosha b/QSanguosha deleted file mode 160000 index 9f0a507e6b..0000000000 --- a/QSanguosha +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9f0a507e6bff591b958502513eddf933fec3aa59 diff --git a/QSanguosha.pro b/QSanguosha.pro index 914473f5af..cce9f2704f 100644 --- a/QSanguosha.pro +++ b/QSanguosha.pro @@ -87,7 +87,7 @@ SOURCES += src/main.cpp \ src/util/detector.cpp \ src/util/nativesocket.cpp \ src/util/recorder.cpp \ - swig/sanguosha_wrap.cxx + swig/sanguosha_wrap.cxx \ HEADERS += src/client/aux-skills.h \ src/client/client.h \ diff --git a/audio/death/LESxiahoujuan.ogg b/audio/death/LESxiahoujuan.ogg deleted file mode 100644 index 2481f01b65..0000000000 Binary files a/audio/death/LESxiahoujuan.ogg and /dev/null differ diff --git a/audio/skill/LesbianLianli.ogg b/audio/skill/LesbianLianli.ogg deleted file mode 100644 index a8c3fdfea4..0000000000 Binary files a/audio/skill/LesbianLianli.ogg and /dev/null differ diff --git a/image/generals/big/LESxiahoujuan.png b/image/generals/big/LESxiahoujuan.png deleted file mode 100644 index 32410f8591..0000000000 Binary files a/image/generals/big/LESxiahoujuan.png and /dev/null differ diff --git a/image/generals/big/guandu-zhangliao.png b/image/generals/big/guandu-zhangliao.png deleted file mode 100644 index c2e1bd2108..0000000000 Binary files a/image/generals/big/guandu-zhangliao.png and /dev/null differ diff --git a/image/generals/card/LESxiahoujuan.jpg b/image/generals/card/LESxiahoujuan.jpg deleted file mode 100644 index 16469ae3c7..0000000000 Binary files a/image/generals/card/LESxiahoujuan.jpg and /dev/null differ diff --git a/image/generals/card/guandu-zhangliao.jpg b/image/generals/card/guandu-zhangliao.jpg deleted file mode 100644 index cdf239f1da..0000000000 Binary files a/image/generals/card/guandu-zhangliao.jpg and /dev/null differ diff --git a/image/generals/small/LESxiahoujuan.png b/image/generals/small/LESxiahoujuan.png deleted file mode 100644 index eea77a2ac1..0000000000 Binary files a/image/generals/small/LESxiahoujuan.png and /dev/null differ diff --git a/image/generals/small/guandu-zhangliao.png b/image/generals/small/guandu-zhangliao.png deleted file mode 100644 index 0ed8803b87..0000000000 Binary files a/image/generals/small/guandu-zhangliao.png and /dev/null differ diff --git a/image/generals/tiny/LESxiahoujuan.png b/image/generals/tiny/LESxiahoujuan.png deleted file mode 100644 index 7830df14fc..0000000000 Binary files a/image/generals/tiny/LESxiahoujuan.png and /dev/null differ diff --git a/image/generals/tiny/guandu-zhangliao.png b/image/generals/tiny/guandu-zhangliao.png deleted file mode 100644 index 46e8de26cc..0000000000 Binary files a/image/generals/tiny/guandu-zhangliao.png and /dev/null differ diff --git a/lang/zh_CN/GuanduScenario.lua b/lang/zh_CN/GuanduScenario.lua index 21aaaa278c..1bc4c7d955 100644 --- a/lang/zh_CN/GuanduScenario.lua +++ b/lang/zh_CN/GuanduScenario.lua @@ -2,26 +2,10 @@ return { ["guandu"] = "官渡之战", - - ["guandu-zhangliao"] = "张辽(官渡)", - ["smalltuxi"] = "小突袭", + ["smalltuxi"] = "小突袭", + ["zhanshuangxiong"] = "斩颜良诛文丑", + ["greatyiji"] = "遗计定辽东", [":smalltuxi"] = "摸牌阶段,你可以放弃摸牌,从一名其他角色手里抽一张牌", - - ["zhanshuangxiong"] = "斩颜良诛文丑", [":zhanshuangxiong"] = "每回合可选择与颜良文丑拼点一次,落败的一方将损失一点体力", - - ["greatyiji"] = "遗计定辽东", [":greatyiji"] = "每回合的出牌阶段之前强制自损一血,同时遗计可摸三张牌,直到自己阵亡为止", - - ["#Guandu_ZhanShuangxiong"] = "颜良正在麾盖下,见关公冲来,方欲问时,关公赤兔马快,早已跑到面前;\ - 颜良措手不及,被云长手起一刀,刺于马下。关公马快,赶上文丑,脑后一刀,将文丑斩下马来。— 三国演义第25回\ - 剧情【斩颜良诛文丑】被触发", - ["#Guandu_Caojunqueliang"] = "攸曰:“公今军粮尚有几何?”……攸大声曰:“休瞒我!粮已尽矣!” — 三国演义第30回\ - 剧情【曹军缺粮】被触发,曹操、郭嘉、张辽、关羽每回合摸牌阶段将少摸一张牌,张辽只能突袭一个人的一张牌。", - ["#Guandu_BurnWuchao"] = "操教军士将束草周围举火,众将校鼓噪直入。……二将抵敌不住,皆被曹军所杀,粮草尽行烧绝。— 三国演义第30回\ - 袁绍受到曹军的火焰伤害,剧情【火烧乌巢】被触发\n\ - 曹军不再受缺粮的制约,从牌堆顶取出四张黑色的装备或基本牌分别横放在袁绍、颜良文丑、甄姬、刘备面前,视同兵粮寸断。", - ["#Guandu_Yijidingliaodong"] = "操遂出郭嘉书以示之。书略曰:“ 今闻袁熙、袁尚往投辽东,明公切不可加兵。\ - 公孙康久畏袁氏吞并,二袁往投必疑。若以兵击之,必并力迎敌,急不可下;若缓之,公孙康、袁氏必自相图,其势然也。”众皆踊跃称善。— 三国演义第33回\ - 斩颜良诛文丑和火烧乌巢的剧情都已经发生,剧情【遗计定辽东】被触发,郭嘉在每回合的出牌阶段之前须强制自损一血,同时遗计可摸三张牌", } diff --git a/lang/zh_CN/HongyanScenario.lua b/lang/zh_CN/HongyanScenario.lua index e5815a8bb7..99729694d1 100644 --- a/lang/zh_CN/HongyanScenario.lua +++ b/lang/zh_CN/HongyanScenario.lua @@ -3,23 +3,4 @@ return { ["hongyan_lesbian"] = "红颜百合赛", ["lesbianlijian"] = "百合离间", ["lesbianjieyin"] = "百合结姻", - - ["LESxiahoujuan"] = "夏侯涓(百合)", - ["LesbianLianli"] = "百合连理", - [":LesbianLianli"] = "回合开始阶段,你可以选择一名女性角色,你和其进入连理状态直到你的下回合开始:该角色可以帮你出闪,你可以帮其出杀。", - - ["$LesbianLianli"] = "连理并蒂,比翼不疑", - ["~LESxiahoujuan"] = "行与子逝兮,归于其室", - - ["LesbianLianli-slash"] = "连理(杀)", - ["LesbianLianli-jink"] = "连理(闪)", - ["@LesbianLianli-slash"] = "请提供一张杀给你的连理对象", - ["@LesbianLianli-jink"] = "请提供一张闪给你的连理对象", - - ["@@LesbianLianli-card"] = "请选择一名要连理的对象", - ["#LesbianLianliConnection"] = "%from 与 %to 结为连理", - ["@tied"] = "连理", - - ["cv:LESxiahoujuan"] = "妙妙", - ["designer:LESxiahoujuan"] = "宇文天启,艾艾艾", } \ No newline at end of file diff --git a/lua/ai/fire-ai.lua b/lua/ai/fire-ai.lua index 9685117896..6190ec3bb2 100644 --- a/lua/ai/fire-ai.lua +++ b/lua/ai/fire-ai.lua @@ -43,6 +43,47 @@ function pangtong_ai:activate_dummy(use) super.activate(self, use) end +--luanji +local yuanshao_ai = SmartAI:newSubclass "yuanshao" +function yuanshao_ai:activate(use) + + local first_found, second_found = false, false + local first_card, second_card + if self.player:getHandcardNum() >= 2 then + local cards = self.player:getHandcards() + local same_suit=false + cards = sgs.QList2Table(cards) + for _, fcard in ipairs(cards) do + if not (fcard:inherits("Peach") or fcard:inherits("ExNihilo")) then + first_card = fcard + first_found = true + for _, scard in ipairs(cards) do + if first_card ~= scard and scard:getSuitString() == first_card:getSuitString() and not (scard:inherits("Peach") or scard:inherits("ExNihilo")) then + second_card = scard + second_found = true + break + end + end + if second_card then break end + end + end + end + + if first_found and second_found then + + local luanji_card = {} + local first_suit, first_number, first_id = first_card:getSuitString(), first_card:getNumberString(), first_card:getId() + local second_suit, second_number, second_id = second_card:getSuitString(), second_card:getNumberString(), second_card:getId() + local card_str = ("archery_attack:luanji[%s:%s]=%d+%d"):format(first_suit, first_number, first_id, second_id) + local archeryattack = sgs.Card_Parse(card_str) + assert(archeryattack) + self:useTrickCard(archeryattack, use) + return + end + + super.activate(self, use) +end + local xunyu_ai = SmartAI:newSubclass "xunyu" function xunyu_ai:activate(use) diff --git a/lua/ai/fire-skill-ai.lua b/lua/ai/fire-skill-ai.lua index b8623d6cf8..2a7c2b352e 100644 --- a/lua/ai/fire-skill-ai.lua +++ b/lua/ai/fire-skill-ai.lua @@ -171,43 +171,4 @@ sgs.ai_skill_use_func["TianyiCard"]=function(card,use,self) break end end -end - - ---luanji -local luanji_skill={} -luanji_skill.name="luanji" -table.insert(sgs.ai_skills,luanji_skill) -luanji_skill.getTurnUseCard=function(self) - local first_found, second_found = false, false - local first_card, second_card - if self.player:getHandcardNum() >= 2 then - local cards = self.player:getHandcards() - local same_suit=false - cards = sgs.QList2Table(cards) - for _, fcard in ipairs(cards) do - if not (fcard:inherits("Peach") or fcard:inherits("ExNihilo")) then - first_card = fcard - first_found = true - for _, scard in ipairs(cards) do - if first_card ~= scard and scard:getSuitString() == first_card:getSuitString() and not (scard:inherits("Peach") or scard:inherits("ExNihilo")) then - second_card = scard - second_found = true - break - end - end - if second_card then break end - end - end - end - - if first_found and second_found then - local luanji_card = {} - local first_suit, first_number, first_id = first_card:getSuitString(), first_card:getNumberString(), first_card:getId() - local second_suit, second_number, second_id = second_card:getSuitString(), second_card:getNumberString(), second_card:getId() - local card_str = ("archery_attack:luanji[%s:%s]=%d+%d"):format(first_suit, first_number, first_id, second_id) - local archeryattack = sgs.Card_Parse(card_str) - assert(archeryattack) - return archeryattack - end end \ No newline at end of file diff --git a/scenarios/hongyan_lesbian.html b/scenarios/hongyan_lesbian.html index f9eecc2313..a268c48ddc 100644 --- a/scenarios/hongyan_lesbian.html +++ b/scenarios/hongyan_lesbian.html @@ -550,14 +550,14 @@

红颜模式

初始分配
游戏开始时,场上随机分配8位女性武将作为你的武将:
-甄姬,夏侯涓,黄月英,祝融,大乔,吴国太,孙尚香,小乔,貂蝉,蔡昭姬,蔡文姬
+甄姬,夏侯涓,黄月英,祝融,大乔,陆逊,孙尚香,小乔,貂蝉,蔡昭姬
技能新增
-
百合结姻(孙尚香):出牌阶段,你可以弃两张手牌并指定一名受伤的女性角色:你和目标角色各回复1点体力。每回合限用一次。
-百合离间(貂蝉):出牌阶段,你可以弃一张牌并选择两名女性角色(可以指定自己)。若如此做,视为其中一名女性角色对另一名女性角色使用一张【决斗】。额外的,此【决斗】不能被【无懈可击】响应。每回合限用一次。
-百合连理(夏侯涓): 回合开始阶段,你可以选择一名女性角色,你和其进入连理状态直到你的下回合开始:该角色可以帮你出闪,你可以帮其出杀。
+
百合结姻:出牌阶段,你可以弃两张手牌并指定一名受伤的女性角色:你和目标角色各回复1点体力。每回合限用一次。
+百合离间:出牌阶段,你可以弃一张牌并选择两名女性角色(可以指定自己)。若如此做,视为其中一名女性角色对另一名女性角色使用一张【决斗】。额外的,此【决斗】不能被【无懈可击】响应。每回合限用一次。
+百合连理: 回合开始阶段,你可以选择一名女性角色,你和其进入连理状态直到你的下回合开始:该角色可以帮你出闪,你可以帮其出杀。
diff --git a/src/dialog/halldialog.cpp b/src/dialog/halldialog.cpp index 1a3cdd324e..993a5300d9 100644 --- a/src/dialog/halldialog.cpp +++ b/src/dialog/halldialog.cpp @@ -174,5 +174,5 @@ void Client::roomError(const QString &errorStr){ } QString msg = map.value(errorStr, tr("Unknown room error: %1").arg(errorStr)); - QMessageBox::warning(NULL, tr("Warning"), msg); + QMessageBox::warning(HallDialogInstance, tr("Warning"), msg); } diff --git a/src/scenario/guandu-scenario.cpp b/src/scenario/guandu-scenario.cpp index 2c9cb42306..fa0f0af8fe 100644 --- a/src/scenario/guandu-scenario.cpp +++ b/src/scenario/guandu-scenario.cpp @@ -27,11 +27,6 @@ void ZhanShuangxiongCard::use(Room *room, ServerPlayer *source, const QListdamage(damage); room->setTag("ZhanShuangxiong", true); - - LogMessage log; - log.type = "#Guandu_ZhanShuangxiong"; - log.from = source; - source->getRoom()->sendLog(log); } class GreatYiji: public MasochismSkill{ @@ -64,11 +59,6 @@ class DamageBeforePlay: public PhaseChangeSkill{ DamageStruct damage; damage.to = target; target->getRoom()->damage(damage); - - LogMessage log; - log.type = "#Guandu_Yijidingliaodong"; - log.from = target; - target->getRoom()->sendLog(log); } return false; @@ -134,15 +124,15 @@ class SmallTuxi:public PhaseChangeSkill{ } virtual bool triggerable(const ServerPlayer *target) const{ - return target->getGeneralName() == "guandu-zhangliao" + return target->getGeneralName() == "zhangliao" && ! target->getRoom()->getTag("BurnWuchao").toBool(); } - virtual bool onPhaseChange(ServerPlayer *Guandu_zhangliao) const{ - if(Guandu_zhangliao->getPhase() == Player::Draw){ - Room *room = Guandu_zhangliao->getRoom(); + virtual bool onPhaseChange(ServerPlayer *zhangliao) const{ + if(zhangliao->getPhase() == Player::Draw){ + Room *room = zhangliao->getRoom(); bool can_invoke = false; - QList other_players = room->getOtherPlayers(Guandu_zhangliao); + QList other_players = room->getOtherPlayers(zhangliao); foreach(ServerPlayer *player, other_players){ if(!player->isKongcheng()){ can_invoke = true; @@ -150,8 +140,8 @@ class SmallTuxi:public PhaseChangeSkill{ } } - if(!can_invoke || !room->askForUseCard(Guandu_zhangliao, "@@smalltuxi", "@tuxi-card")) - Guandu_zhangliao->drawCards(1, false); + if(!can_invoke || !room->askForUseCard(zhangliao, "@@smalltuxi", "@tuxi-card")) + zhangliao->drawCards(1, false); return true; } @@ -189,11 +179,9 @@ class GuanduRule: public ScenarioRule{ room->installEquip(guanyu, "chitu"); room->acquireSkill(guanyu, "zhanshuangxiong"); - //ServerPlayer *zhangliao = room->findPlayer("zhangliao"); - //room->acquireSkill(zhangliao, "smalltuxi"); - ServerPlayer *zhenji = room->findPlayer("zhenji"); - room->setPlayerProperty(zhenji, "kingdom", "qun"); + ServerPlayer *zhangliao = room->findPlayer("zhangliao"); + room->acquireSkill(zhangliao, "smalltuxi"); } break; @@ -205,22 +193,9 @@ class GuanduRule: public ScenarioRule{ if(!burned){ QString name = player->getGeneralName(); if(name == "caocao" || name == "guojia" || name == "guanyu"){ - - LogMessage log; - log.type = "#Guandu_Caojunqueliang"; - log.from = player; - player->getRoom()->sendLog(log); - player->drawCards(1, false); return true; } - else if(name == "guandu-zhangliao"){ - LogMessage log; - log.type = "#Guandu_Caojunqueliang"; - log.from = player; - player->getRoom()->sendLog(log); - return false; - } } } @@ -233,16 +208,10 @@ class GuanduRule: public ScenarioRule{ return false; DamageStruct damage = data.value(); - ServerPlayer *Guandu_zhangliao = room->findPlayer("guandu-zhangliao"); if(player->getGeneralName() == "yuanshao" && damage.nature == DamageStruct::Fire && damage.from->getRoleEnum() == Player::Rebel){ room->setTag("BurnWuchao", true); - LogMessage log; - log.type = "#Guandu_BurnWuchao"; - log.from = player; - player->getRoom()->sendLog(log); - QStringList tos; tos << "yuanshao" << "shuangxiong" << "zhenji" << "liubei"; @@ -258,7 +227,6 @@ class GuanduRule: public ScenarioRule{ room->moveCardTo(Sanguosha->getCard(card_id), to, Player::Judging, true); } - room->setPlayerProperty(Guandu_zhangliao, "general", "zhangliao"); } break; @@ -294,18 +262,16 @@ GuanduScenario::GuanduScenario() { lord = "yuanshao"; loyalists << "shuangxiong" << "zhenji"; - rebels << "caocao" << "guandu-zhangliao" << "guojia"; + rebels << "caocao" << "zhangliao" << "guojia"; renegades << "liubei" << "guanyu"; rule = new GuanduRule(this); - skills << new ZhanShuangxiong + skills << new SmallTuxi + << new ZhanShuangxiong << new GreatYiji << new DamageBeforePlay; - General *Guandu_zhangliao = new General(this, "guandu-zhangliao", "wei", 4, true, true); - Guandu_zhangliao->addSkill(new SmallTuxi); - addMetaObject(); addMetaObject(); } @@ -317,10 +283,6 @@ AI::Relation GuanduScenario::relationTo(const ServerPlayer *a, const ServerPlaye return AI::GetRelation(a, b); } -void GuanduScenario::getRoles(char *roles) const{ - strcpy(roles, "ZCCFFFNN"); -} - void GuanduScenario::onTagSet(Room *room, const QString &key) const{ bool zhanshuangxiong = room->getTag("ZhanShuangxiong").toBool(); bool burnwuchao = room->getTag("BurnWuchao").toBool(); diff --git a/src/scenario/guandu-scenario.h b/src/scenario/guandu-scenario.h index 7e8773b3c2..67c661120c 100644 --- a/src/scenario/guandu-scenario.h +++ b/src/scenario/guandu-scenario.h @@ -32,7 +32,6 @@ class GuanduScenario : public Scenario{ GuanduScenario(); virtual AI::Relation relationTo(const ServerPlayer *a, const ServerPlayer *b) const; - virtual void getRoles(char *roles) const; virtual void onTagSet(Room *room, const QString &key) const; }; diff --git a/src/scenario/hongyan-scenario.cpp b/src/scenario/hongyan-scenario.cpp index 2e101f214e..5f01899ab1 100644 --- a/src/scenario/hongyan-scenario.cpp +++ b/src/scenario/hongyan-scenario.cpp @@ -4,9 +4,6 @@ #include "clientplayer.h" #include "client.h" #include "carditem.h" -#include "skill.h" -#include "carditem.h" -#include "standard.h" LesbianJieyinCard::LesbianJieyinCard() :JieyinCard() @@ -89,274 +86,6 @@ class LesbianLijian: public OneCardViewAsSkill{ } }; - -//LESBIAN LIANLI RELATED - -LesbianLianliCard::LesbianLianliCard(){ - -} - -bool LesbianLianliCard::targetFilter(const QList &targets, const Player *to_select, const Player *Self) const{ - return targets.isEmpty() && to_select->getGeneral()->isFemale(); -} - -void LesbianLianliCard::onEffect(const CardEffectStruct &effect) const{ - Room *room = effect.from->getRoom(); - - LogMessage log; - log.type = "#LesbianLianliConnection"; - log.from = effect.from; - log.to << effect.to; - room->sendLog(log); - - if(effect.from->getMark("@tied") == 0) - effect.from->gainMark("@tied"); - - if(effect.to->getMark("@tied") == 0){ - QList players = room->getOtherPlayers(effect.from); - foreach(ServerPlayer *player, players){ - if(player->getMark("@tied") > 0){ - player->loseMark("@tied"); - break; - } - } - - effect.to->gainMark("@tied"); - } -} - -class LesbianLianliStart: public GameStartSkill{ -public: - LesbianLianliStart():GameStartSkill("#LesbianLianli-start") { - - } - - virtual void onGameStart(ServerPlayer *player) const{ - Room *room = player->getRoom(); - - QList players = room->getOtherPlayers(player); - foreach(ServerPlayer *player, players){ - if(player->getGeneral()->isFemale()) - room->attachSkillToPlayer(player, "LesbianLianli-slash"); - } - } -}; - -LesbianLianliSlashCard::LesbianLianliSlashCard(){ - -} - -bool LesbianLianliSlashCard::targetFilter(const QList &targets, const Player *to_select, const Player *Self) const{ - return targets.isEmpty() && Self->canSlash(to_select); -} - -void LesbianLianliSlashCard::onEffect(const CardEffectStruct &effect) const{ - ServerPlayer *zhangfei = effect.from; - Room *room = zhangfei->getRoom(); - - ServerPlayer *xiahoujuan = room->findPlayerBySkillName("LesbianLianli"); - if(xiahoujuan){ - const Card *slash = room->askForCard(xiahoujuan, "slash", "@LesbianLianli-slash"); - if(slash){ - zhangfei->invoke("increaseSlashCount"); - room->cardEffect(slash, zhangfei, effect.to); - return; - } - } -} - -class LesbianLianliSlashViewAsSkill:public ZeroCardViewAsSkill{ -public: - LesbianLianliSlashViewAsSkill():ZeroCardViewAsSkill("LesbianLianli-slash"){ - - } - - virtual bool isEnabledAtPlay(const Player *player) const{ - return player->getMark("@tied") > 0 && Slash::IsAvailable(player); - } - - virtual const Card *viewAs() const{ - return new LesbianLianliSlashCard; - } -}; - -class LesbianLianliSlash: public TriggerSkill{ -public: - LesbianLianliSlash():TriggerSkill("#LesbianLianli-slash"){ - events << CardAsked; - } - - virtual bool triggerable(const ServerPlayer *target) const{ - return target->getMark("@tied") > 0 && !target->hasSkill("LesbianLianli"); - } - - virtual bool trigger(TriggerEvent event, ServerPlayer *player, QVariant &data) const{ - QString pattern = data.toString(); - if(pattern != "slash") - return false; - - Room *room = player->getRoom(); - if(!player->askForSkillInvoke("LesbianLianli-slash", data)) - return false; - - ServerPlayer *xiahoujuan = room->findPlayerBySkillName("LesbianLianli"); - if(xiahoujuan){ - const Card *slash = room->askForCard(xiahoujuan, "slash", "@LesbianLianli-slash"); - if(slash){ - room->provide(slash); - return true; - } - } - - return false; - } -}; - -class LesbianLianliJink: public TriggerSkill{ -public: - LesbianLianliJink():TriggerSkill("#LesbianLianli-jink"){ - events << CardAsked; - } - - virtual bool triggerable(const ServerPlayer *target) const{ - return TriggerSkill::triggerable(target) && target->getMark("@tied") > 0; - } - - virtual bool trigger(TriggerEvent event, ServerPlayer *xiahoujuan, QVariant &data) const{ - QString pattern = data.toString(); - if(pattern != "jink") - return false; - - if(!xiahoujuan->askForSkillInvoke("LesbianLianli-jink", data)) - return false; - - Room *room = xiahoujuan->getRoom(); - QList players = room->getOtherPlayers(xiahoujuan); - foreach(ServerPlayer *player, players){ - if(player->getMark("@tied") > 0){ - ServerPlayer *zhangfei = player; - - const Card *jink = room->askForCard(zhangfei, "jink", "@LesbianLianli-jink"); - if(jink){ - room->provide(jink); - return true; - } - - break; - } - } - - return false; - } -}; - -class LesbianLianliViewAsSkill: public ZeroCardViewAsSkill{ -public: - LesbianLianliViewAsSkill():ZeroCardViewAsSkill(""){ - - } - - virtual bool isEnabledAtPlay(const Player *player) const{ - return false; - } - - virtual bool isEnabledAtResponse(const Player *player, const QString &pattern) const{ - return pattern == "@LesbianLianli"; - } - - virtual const Card *viewAs() const{ - return new LesbianLianliCard; - } -}; - -class LesbianLianli: public PhaseChangeSkill{ -public: - LesbianLianli():PhaseChangeSkill("LesbianLianli"){ - view_as_skill = new LesbianLianliViewAsSkill; - } - - virtual bool onPhaseChange(ServerPlayer *target) const{ - if(target->getPhase() == Player::Start){ - Room *room = target->getRoom(); - bool used = room->askForUseCard(target, "@LesbianLianli", "@@LesbianLianli-card"); - if(used){ - if(target->getKingdom() != "shu") - room->setPlayerProperty(target, "kingdom", "shu"); - }else{ - if(target->getKingdom() != "wei") - room->setPlayerProperty(target, "kingdom", "wei"); - - QList players = room->getAllPlayers(); - foreach(ServerPlayer *player, players){ - if(player->getMark("@tied") > 0) - player->loseMark("@tied"); - } - } - } - - return false; - } -}; - -class Tongxin: public MasochismSkill{ -public: - Tongxin():MasochismSkill("tongxin"){ - } - - virtual bool triggerable(const ServerPlayer *target) const{ - return target->getMark("@tied") > 0; - } - - virtual void onDamaged(ServerPlayer *target, const DamageStruct &damage) const{ - Room *room = target->getRoom(); - ServerPlayer *xiahoujuan = room->findPlayerBySkillName(objectName()); - - if(xiahoujuan && xiahoujuan->askForSkillInvoke(objectName(), QVariant::fromValue(damage))){ - room->playSkillEffect(objectName()); - - ServerPlayer *zhangfei = NULL; - if(target == xiahoujuan){ - QList players = room->getOtherPlayers(xiahoujuan); - foreach(ServerPlayer *player, players){ - if(player->getMark("@tied") > 0){ - zhangfei = player; - break; - } - } - }else - zhangfei = target; - - xiahoujuan->drawCards(damage.damage); - - if(zhangfei) - zhangfei->drawCards(damage.damage); - } - } -}; - -class LesbianLianliClear: public TriggerSkill{ -public: - LesbianLianliClear():TriggerSkill("#LesbianLianli-clear"){ - events << Death; - } - - virtual bool triggerable(const ServerPlayer *target) const{ - return target->hasSkill(objectName()); - } - - virtual bool trigger(TriggerEvent , ServerPlayer *player, QVariant &) const{ - Room *room = player->getRoom(); - QList players = room->getAllPlayers(); - foreach(ServerPlayer *player, players){ - if(player->getMark("@tied") > 0) - player->loseMark("@tied"); - } - - return false; - } -}; -//END LESBIAN LIANLI RELATED - class HongyanRule: public ScenarioRule{ public: HongyanRule(Scenario *scenario) @@ -371,6 +100,7 @@ class HongyanRule: public ScenarioRule{ room->acquireSkill(player, "lesbianjieyin"); else if(player->hasSkill("lijian")) room->acquireSkill(player, "lesbianlijian"); + return false; } }; @@ -379,36 +109,18 @@ HongyanScenario::HongyanScenario() :Scenario("hongyan_lesbian") { females << "zhenji" << "huangyueying" << "zhurong" - << "daqiao" << "caiwenji" << "xiaoqiao" - << "diaochan" << "caizhaoji" << "sunshangxiang" - << "wuguotai" << "LESxiahoujuan"; + << "daqiao" << "luxun" << "xiaoqiao" + << "diaochan" << "caizhaoji" << "sunshangxiang"; - standard_roles << "lord" << "loyalist" << "loyalist" << "loyalist" - << "rebel" << "rebel" << "rebel" << "rebel" << "renegade" << "renegade"; + standard_roles << "lord" << "loyalist" << "loyalist" + << "rebel" << "rebel" << "rebel" << "rebel" << "renegade"; rule = new HongyanRule(this); - related_skills.insertMulti("LesbianLianli", "#LesbianLianli-start"); - related_skills.insertMulti("LesbianLianli", "#LesbianLianli-slash"); - related_skills.insertMulti("LesbianLianli", "#LesbianLianli-jink"); - related_skills.insertMulti("LesbianLianli", "#LesbianLianli-clear"); - - skills << new LesbianJieyin << new LesbianLijian << new LesbianLianliSlashViewAsSkill; - - General *LESxiahoujuan = new General(this, "LESxiahoujuan", "shu", 3, false, true); - LESxiahoujuan->addSkill(new LesbianLianliStart); - LESxiahoujuan->addSkill(new LesbianLianli); - LESxiahoujuan->addSkill(new LesbianLianliSlash); - LESxiahoujuan->addSkill(new LesbianLianliJink); - LESxiahoujuan->addSkill(new LesbianLianliClear); - LESxiahoujuan->addSkill("tongxin"); - LESxiahoujuan->addSkill("liqian"); - LESxiahoujuan->addSkill("qiaocai"); + skills << new LesbianJieyin << new LesbianLijian; addMetaObject(); addMetaObject(); - addMetaObject(); - addMetaObject(); } bool HongyanScenario::exposeRoles() const{ @@ -418,22 +130,22 @@ bool HongyanScenario::exposeRoles() const{ void HongyanScenario::assign(QStringList &generals, QStringList &roles) const{ generals = females; qShuffle(generals); - generals.removeLast();//generals.removeLast();generals.removeLast(); + generals.removeLast(); roles = standard_roles; qShuffle(roles); } int HongyanScenario::getPlayerCount() const{ - return 10; + return 8; } void HongyanScenario::getRoles(char *roles) const{ - strcpy(roles, "ZCCCFFFFNN"); + strcpy(roles, "ZCCFFFN"); } void HongyanScenario::onTagSet(Room *room, const QString &key) const{ // dummy } -ADD_SCENARIO(Hongyan); +ADD_SCENARIO(Hongyan) diff --git a/src/scenario/hongyan-scenario.h b/src/scenario/hongyan-scenario.h index 4a0416b602..a68c743b0b 100644 --- a/src/scenario/hongyan-scenario.h +++ b/src/scenario/hongyan-scenario.h @@ -21,26 +21,6 @@ class LesbianLijianCard: public LijianCard{ virtual bool targetFilter(const QList &targets, const Player *to_select, const Player *Self) const; }; -class LesbianLianliCard: public SkillCard{ - Q_OBJECT - -public: - Q_INVOKABLE LesbianLianliCard(); - - virtual void onEffect(const CardEffectStruct &effect) const; - virtual bool targetFilter(const QList &targets, const Player *to_select, const Player *Self) const; -}; - -class LesbianLianliSlashCard: public SkillCard{ - Q_OBJECT - -public: - Q_INVOKABLE LesbianLianliSlashCard(); - - virtual bool targetFilter(const QList &targets, const Player *to_select, const Player *Self) const; - virtual void onEffect(const CardEffectStruct &effect) const; -}; - class HongyanScenario : public Scenario{ Q_OBJECT diff --git a/src/ui/clientlogbox.cpp b/src/ui/clientlogbox.cpp index f8377e4d75..442d3dd37e 100644 --- a/src/ui/clientlogbox.cpp +++ b/src/ui/clientlogbox.cpp @@ -62,6 +62,8 @@ void ClientLogBox::appendLog( } const Card *card = Card::Parse(card_str); + if(card == NULL) + return; QString card_name = card->getLogName(); if(card->isVirtualCard()){