Skip to content

Latest commit

 

History

History
456 lines (453 loc) · 15.6 KB

ChapterK.md

File metadata and controls

456 lines (453 loc) · 15.6 KB

代码速查手册(K区)

#技能索引 看破慷忾克构克己空城苦肉苦肉-旧狂暴狂风狂斧狂骨狂骨-1v1溃围

返回目录 ##看破 相关武将:火·诸葛亮
描述:你可以将一张黑色手牌当【无懈可击】使用。
引用:LuaKanpo
状态:1217验证通过

	LuaKanpo = sgs.CreateOneCardViewAsSkill{
		name = "LuaKanpo",
		filter_pattern = ".|black|.|hand",
		response_pattern = "nullification",
		view_as = function(self, first)
			local ncard = sgs.Sanguosha:cloneCard("nullification", first:getSuit(), first:getNumber())
			ncard:addSubcard(first)
			ncard:setSkillName(self:objectName())
			return ncard
		end,
		enabled_at_nullification = function(self, player)
			for _, card in sgs.qlist(player:getHandcards()) do
				if card:isBlack() then return true end
			end
			return false
		end
	}

返回索引 ##慷忾 相关武将:SP·曹昂
描述:每当一名距离1以内的角色成为【杀】的目标后,你可以摸一张牌,然后正面朝上交给该角色一张牌:若该牌为装备牌,该角色可以使用之。
引用:LuaKangkai
状态:1217验证通过

	LuaKangkai = sgs.CreateTriggerSkill{
		name = "LuaKangkai" ,
		events = {sgs.TargetConfirmed} ,
		on_trigger = function(self, event, player, data)
			local room = player:getRoom()
			local use = data:toCardUse()
			if use.card:isKindOf("Slash") then
				for _,to in sgs.qlist(use.to) do
					if not player:isAlive() then break end
					if player:distanceTo(to) <= 1 and player:hasSkill(self:objectName()) then
						--player:setTag("LuaKangkaiSlash", data)
						local to_data = sgs.QVariant()
						to_data:setValue(to)
						local will_use = room:askForSkillInvoke(player, self:objectName(), to_data)
						--player:removeTag("LuaKangkaiSlash")
						if will_use  then
							player:drawCards(1)
							if not player:isNude() and player:objectName() ~= to:objectName() then
								local card = nil
								if player:getCardCount() > 1 then
									card = room:askForCard(player, "..!", "@kangkai-give:" .. to:objectName(), data, sgs.Card_MethodNone);
									if not card then
										card = player:getCards("he"):at(math.random(player:getCardCount()))
									end
								else
									card = player:getCards("he"):first()
								end
								to:obtainCard(card)
								if card:getTypeId() == sgs.Card_TypeEquip and room:getCardOwner(card:getEffectiveId()):objectName() == to:objectName() and not to:isLocked(card) then
									--local xdata = sgs.QVariant()
									--xdata:setValue(card)
									--to:setTag("LuaKangkaiSlash", data)
									--to:setTag("LuaKangkaiGivenCard", xdata)
									local will_use = room:askForSkillInvoke(to, "kangkai_use", sgs.QVariant("use"))
									--to:removeTag("LuaKangkaiSlash")
									--to:removeTag("LuaKangkaiGivenCard")
									if will_use then
										room:useCard(sgs.CardUseStruct(card, to, to))
									end							
								end
							end
						end
					end
				end
			end
			return false
		end
	}

返回索引 ##克构 相关武将:倚天·陆抗
描述:**觉醒技,**回合开始阶段开始时,若你是除主公外唯一的吴势力角色,你须减少1点体力上限并获得技能“连营”
引用:LuaKegou
状态:1217验证通过

	LuaKegou = sgs.CreateTriggerSkill{
		name = "LuaKegou" ,
		events = {sgs.EventPhaseStart} ,
		frequency = sgs.Skill_Wake ,
		on_trigger = function(self, event, player, data)
			for _, _player in sgs.qlist(player:getSiblings()) do
				if _player:isAlive() and (_player:getKingdom() == "wu")
						and (not _player:isLord()) and (_player:objectName() ~= player:objectName()) then
					return false
				end
			end
			player:setMark("LuaKegou", 1)
			local room = player:getRoom()
			player:gainMark("@waked")
			room:loseMaxHp(player)
			room:acquireSkill(player, "lianying")
			return false
		end ,
		can_trigger = function(self, target)
			return target and target:isAlive() and target:hasSkill(self:objectName())
					and (target:getPhase() == sgs.Player_Start)
					and (target:getMark("LuaKegou") == 0)
					and (target:getKingdom() == "wu")
					and (not target:isLord())
		end
	}

返回索引 ##克己 相关武将:标准·吕蒙、界限突破·吕蒙、☆SP·吕蒙
描述:若你未于出牌阶段内使用或打出【杀】,你可以跳过弃牌阶段。
引用:LuaKeji
状态:0405验证通过

	LuaKeji = sgs.CreateTriggerSkill{
		name = "LuaKeji" ,
		frequency = sgs.Skill_Frequent ,
		global = true ,
		events = {sgs.PreCardUsed, sgs.CardResponded, sgs.EventPhaseChanging} ,   
		on_trigger = function(self, event, player, data)
			if event == sgs.EventPhaseChanging then
				local can_trigger = true
				if player:hasFlag("LuaKejiSlashInPlayPhase") then
					can_trigger = false
					player:setFlags("-LuaKejiSlashInPlayPhase")
				end
				local change = data:toPhaseChange()
				if change.to == sgs.Player_Discard and player:isAlive() and player:hasSkill(self:objectName()) then
					if can_trigger and player:askForSkillInvoke(self:objectName()) then
						player:skip(sgs.Player_Discard)
					end
				end
			else
				if player:getPhase() == sgs.Player_Play then
					local card = nil
					if event == sgs.PreCardUsed then
						card = data:toCardUse().card
					else
						card = data:toCardResponse().m_card			 
					end
					if card:isKindOf("Slash") then
						player:setFlags("LuaKejiSlashInPlayPhase")
					end
				end
			end
			return false
		end
	}

返回索引 ##空城 相关武将:标准·诸葛亮、测试·五星诸葛
描述:**锁定技,**若你没有手牌,你不能被选择为【杀】或【决斗】的目标。
引用:LuaKongcheng
状态:1217验证通过

	LuaKongcheng = sgs.CreateProhibitSkill{
		name = "LuaKongcheng",
		is_prohibited = function(self, from, to, card)
			return to:hasSkill(self:objectName()) and (card:isKindOf("Slash") or card:isKindOf("Duel")) and to:isKongcheng()
		end
	}

返回索引 ##苦肉 相关武将:界限突破·黄盖
描述:**出牌阶段限一次,**你可以弃置一张牌:若如此做,你失去1点体力。 引用:LuaKurou
状态:0405验证通过

	LuaKurouCard = sgs.CreateSkillCard{
		name = "LuaKurouCard",
		target_fixed = true,
		on_use = function(self, room, source, targets)
			room:loseHp(source)
		end
	}
	LuaKurou = sgs.CreateOneCardViewAsSkill{
		name = "LuaKurou",
		filter_pattern = ".!",
		enabled_at_play = function(self, player)
			return not player:hasUsed("#LuaKurouCard")
		end, 
		view_as = function(self, originalCard) 
			local card = LuaKurouCard:clone()
			card:addSubcard(originalCard)
			card:setSkillName(self:objectName())
			return card
		end
	}

返回索引 ##苦肉 相关武将:标准·黄盖、SP·台版黄盖
描述:出牌阶段,出牌阶段,你可以失去1点体力:若如此做,你摸两张牌。
引用:LuaNosKurou
状态:0405验证通过

	LuaNosKurouCard = sgs.CreateSkillCard{
		name = "LuaNosKurouCard",
		target_fixed = true,
		on_use = function(self, room, source, targets)
			room:loseHp(source)
			if source:isAlive() then
				room:drawCards(source, 2, "noskurou")
			end
		end
	}
	LuaNosKurou = sgs.CreateZeroCardViewAsSkill{
		name = "LuaNosKurou",
		view_as = function()
			return LuaNosKurouCard:clone()
		end
	}

返回索引 ##狂暴 相关武将:神·吕布、SP·神吕布
描述:**锁定技,**游戏开始时,你获得两枚“暴怒”标记。每当你造成或受到1点伤害后,你获得一枚“暴怒”标记。 引用:LuaKuangbao
状态:0405验证通过

	LuaKuangbao = sgs.CreateTriggerSkill{
		name = "LuaKuangbao" ,
		events = {sgs.GameStart, sgs.Damage, sgs.Damaged} ,
		frequency = sgs.Skill_Compulsory ,
		on_trigger = function(self, event, player, data)
			local room = player:getRoom()
			if event == sgs.GameStart then
				player:gainMark("@wrath", 2)
				room:notifySkillInvoked(player, self:objectName())
			else
				local damage = data:toDamage()
				player:gainMark("@wrath", damage.damage)
				room:notifySkillInvoked(player, self:objectName())
			end
		end
	}

返回索引 ##狂风 相关武将:神·诸葛亮
描述:结束阶段开始时,你可以将一张“星”置入弃牌堆并选择一名角色,若如此做,你的下回合开始前,每当其受到的火焰伤害结算开始时,此伤害+1。
引用:LuaKuangfeng 状态:0405验证通过(需与本手册技能“七星”配合使用)
备注:医治永恒&水饺wch哥:源码的狂风和大雾的技能询问与标记的清除分别位于七星的QixingAsk和QixingClear中,此技能独立出来了。

LuaKuangfengCard = sgs.CreateSkillCard{
	name = "LuaKuangfengCard",
	handling_method = sgs.Card_MethodNone,
	will_throw = false,
	filter = function(self, targets, to_select, player)
		return #targets == 0
	end,
	on_effect = function(self, effect)
		local reason = sgs.CardMoveReason(sgs.CardMoveReason_S_REASON_REMOVE_FROM_PILE, "", "LuaKuangfeng", "")
		effect.to:getRoom():throwCard(self, reason, nil)
		effect.from:setTag("LuaQixing_user", sgs.QVariant(true))
		effect.to:gainMark("@gale")
	end,
}
LuaKuangfengVS = sgs.CreateOneCardViewAsSkill{
	name = "LuaKuangfeng", 
	response_pattern = "@@LuaKuangfeng",
	filter_pattern = ".|.|.|stars",
	expand_pile = "stars",
	view_as = function(self, card)
		local kf = LuaKuangfengCard:clone()
		kf:addSubcard(card)
		return kf
	end,
}
LuaKuangfeng = sgs.CreateTriggerSkill{
	name = "LuaKuangfeng",
	events = {sgs.DamageForseen},
	view_as_skill = LuaKuangfengVS,
	can_trigger = function(self, player)
		return player ~= nil and player:getMark("@gale") > 0
	end,
	on_trigger = function(self, event, player, data)
		local damage = data:toDamage()
		if damage.nature == sgs.DamageStruct_Fire then
			damage.damage = damage.damage + 1
			data:setValue(damage)
		end
		return false
	end,
}

返回索引 ##狂斧 相关武将:国战·潘凤
描述:每当你使用的【杀】对一名角色造成一次伤害后,你可以将其装备区里的一张牌弃置或置入你的装备区。
引用:LuaKuangfu
状态:1217验证通过

	LuaKuangfu = sgs.CreateTriggerSkill{
		name = "LuaKuangfu" ,
		events = {sgs.Damage} ,
		on_trigger = function(self, event, player, data)
			local damage = data:toDamage()
			local target = damage.to
			if damage.card and damage.card:isKindOf("Slash") and target:hasEquip() and (not damage.chain) and (not damage.transfer) then
				local equiplist = {}
				for i = 0, 3, 1 do
					if not target:getEquip(i) then continue end
					if player:canDiscard(target, target:getEquip(i):getEffectiveId()) or (player:getEquip(i) == nil) then
						table.insert(equiplist,tostring(i))
					end
				end
				if #equiplist == nil then return false end
				if not player:askForSkillInvoke(self:objectName(), data) then return false end
				local _data = sgs.QVariant()
				_data:setValue(target)
				local room = player:getRoom()
				local equip_index = tonumber(room:askForChoice(player, "LuaKuangfu_equip", table.concat(equiplist, "+"), _data))
				local card = target:getEquip(equip_index)
				local card_id = card:getEffectiveId()
				local choicelist = {}
				if player:canDiscard(target, card_id) then
					table.insert(choicelist, "throw")
				end
				if (equip_index > -1) and (player:getEquip(equip_index) == nil) then
					table.insert(choicelist, "move")
				end
				local choice = room:askForChoice(player, "LuaKuangfu", table.concat(choicelist, "+"))
				if choice == "move" then
					room:moveCardTo(card, player, sgs.Player_PlaceEquip)
				else
					room:throwCard(card, target, player)
				end
			end
			return false
		end
	}

返回索引 ##狂骨 相关武将:风·魏延
描述:**锁定技,**每当你对距离1以内的一名角色造成1点伤害后,你回复1点体力。
引用:LuaKuanggu
状态:1217验证通过

	LuaKuanggu = sgs.CreateTriggerSkill{
		name = "LuaKuanggu",
		frequency = sgs.Skill_Compulsory,
		events = {sgs.Damage, sgs.PreDamageDone},
		on_trigger = function(self, event, player, data)
			local damage = data:toDamage()
			local room = player:getRoom()
			if (event == sgs.PreDamageDone) and damage.from and damage.from:hasSkill(self:objectName()) and damage.from:isAlive() then
				local weiyan = damage.from
				weiyan:setTag("invokeLuaKuanggu", sgs.QVariant((weiyan:distanceTo(damage.to) <= 1)))
			elseif (event == sgs.Damage) and player:hasSkill(self:objectName()) and player:isAlive() then
				local invoke = player:getTag("invokeLuaKuanggu"):toBool()
				player:setTag("invokeLuaKuanggu", sgs.QVariant(false))
				if invoke and player:isWounded() then
					local recover = sgs.RecoverStruct()
					recover.who = player
					recover.recover = damage.damage
					room:recover(player, recover)
				end
			end
			return false
		end,
		can_trigger = function(self, target)
			return target
		end
	}

返回索引 ##狂骨-1V1 相关武将:1v1·魏延
描述:每当你造成伤害后,你可以进行判定:若结果为黑色,你回复1点体力。
引用:LuaKOFKuanggu
状态:1217验证通过

	LuaKOFKuanggu = sgs.CreateTriggerSkill{
		name = "LuaKOFKuanggu",
		events = {sgs.Damage},	
		on_trigger = function(self, event, player, data)
			local room = player:getRoom()
			if room:askForSkillInvoke(player,self:objectName(),data) then
			local judge = sgs.JudgeStruct()
				judge.pattern = ".|black"
				judge.who = player
				judge.reason = self:objectName()
				room:judge(judge)
			if judge:isGood() and player:isWounded() then
				local recover = sgs.RecoverStruct()
					recover.who = player
					room:recover(player, recover)
				end
			end
		end
	}

返回索引 ##溃围 相关武将:☆SP·曹仁
描述:结束阶段开始时,你可以摸X+2张牌,然后将你的武将牌翻面,且你的下个摸牌阶段开始时,你弃置X张牌。(X为当前场上武器牌的数量)
引用:LuaKuiwei
状态:1217验证通过

	getWeaponCountKuiwei = function(caoren)
		local n = 0
		for _, p in sgs.qlist(caoren:getRoom():getAlivePlayers()) do
			if p:getWeapon() then n = n + 1 end
		end
		return n
	end
	LuaKuiwei = sgs.CreateTriggerSkill{
		name = "LuaKuiwei" ,
		events = {sgs.EventPhaseStart} ,
		on_trigger = function(self, event, player, data)
			if player:getPhase() == sgs.Player_Finish then
				if not player:hasSkill(self:objectName()) then return false end
				if not player:askForSkillInvoke(self:objectName()) then return false end
				local n = getWeaponCountKuiwei(player)
				player:drawCards(n + 2)
				player:turnOver()
				if player:getMark("@kuiwei") == 0 then
					player:getRoom():addPlayerMark(player, "@kuiwei")
				end
			elseif player:getPhase() == sgs.Player_Draw then
				if player:getMark("@kuiwei") == 0 then return false end
				local room = player:getRoom()
				room:removePlayerMark(player, "@kuiwei")
				local n = getWeaponCountKuiwei(player)
				if n > 0 then
					room:askForDiscard(player, self:objectName(), n, n, false, true)
				end
			end
			return false
		end ,
		can_trigger = function(self, target)
			return target and target:isAlive() and (target:hasSkill(self:objectName()) or (target:getMark("@kuiwei") > 0))
		end
	}

返回索引