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()){