有会做“剧变”这张牌的么?
最近等不上community wad的更新,自己尝试做了几张牌,但在“剧变”上感到头大了。http://magiccards.info/scans/en/v14/3.jpg我试图参照面纱的娜娜,平衡这两张牌,他们的牺牲分别是:
http://magiccards.info/scans/en/isd/105.jpg <AVAILABILITY>
return PLW_MyPlayerDC( EffectController() ):Get_Int(PLW_TEFERI_ARCHMAGE_EMBLEM) == 1 or EffectController():IsSorceryTime() == true
</AVAILABILITY>
<COST type="RemoveCountersSelf" amount="6" counter_type="Loyalty" />
<TARGET tag="CARD_QUERY_CHOOSE_PLAYER_TO_VESTIGE_ROT" definition="0" compartment="0" count="1" />
<TARGET_DEFINITION id="0">
local filter = ClearFilter()
filter:SetFilterType(FILTER_TYPE_PLAYERS)
</TARGET_DEFINITION>
<RESOLUTION_TIME_ACTION>
local target_player = EffectDC():Get_Targets(0):Get_PlayerPtr(0)
if target_player ~= nil then
local filter = ClearFilter()
filter:Add(FE_CONTROLLER, OP_IS, target_player)
PLW_FilterPermanents(filter)
local count = filter:Count()
if count > 0 then
local answerDC = EffectDC():Make_Targets(1)
local controller = EffectController()
if controller:IsAI() then
-- The idea is: make a pile with roughly half of the total score of the permanents
filter:EvaluateObjects()
local permanents_array = {}
local scores_array = {}
local total_score = 0
for i=0,count-1 do
permanents_array = filter:GetNthEvaluatedObject(i)
scores_array = permanents_array:CalcScore()
total_score = total_score + scores_array
end
local half_total_score = total_score / 2
local temp_score = 0
for i=0,count-1 do
answerDC:Set_CardPtr(i, permanents_array)
temp_score = temp_score + scores_array
if temp_score >= half_total_score then
break
end
end
else
controller:SetItemCount(count)
for i=0,count-1 do
controller:SetItemPrompt(i, "PLW_CARD_QUERY_CHOOSE_CARD_TO_PILE")
end
controller:ChooseItems(answerDC, QUERY_FLAG_UP_TO)
end
end
end
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local target_player = EffectDC():Get_Targets(0):Get_PlayerPtr(0)
if target_player ~= nil then
local answerDC = EffectDC():Get_Targets(1)
local answer_count = answerDC:Count()
local pilesDC = EffectDC():Make_Chest(2)
local filter = ClearFilter()
filter:Add(FE_CONTROLLER, OP_IS, target_player)
PLW_FilterPermanents(filter)
local filter_count = filter:EvaluateObjects()
if filter_count > 0 then
for i=0,answer_count-1 do
pilesDC:Set_CardPtr( i, answerDC:Get_CardPtr(i) )
end
local index = answer_count
for i=0,filter_count-1 do
local permanent = filter:GetNthEvaluatedObject(i)
local already_there = false
for j=0,answer_count-1 do
if permanent == answerDC:Get_CardPtr(j) then
already_there = true
break
end
end
if already_there == false then
pilesDC:Set_CardPtr(index, permanent)
pilesDC:QueryUnselect_CardPtr(index)
index = index + 1
end
end
target_player:ChooseItemFromDC( "PLW_CARD_QUERY_SELECT_PILE_TO_SACRIFICE", pilesDC, EffectDC():Make_Targets(3), QUERY_FLAG_MAY )
end
end
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local target_player = EffectDC():Get_Targets(0):Get_PlayerPtr(0)
if target_player ~= nil then
local answerDC = EffectDC():Get_Targets(1)
local answer_count = answerDC:Count()
local pilesDC = EffectDC():Get_Chest(2)
local lower_bound = answer_count
local upper_bound = pilesDC:Count()-1
local decision = EffectDC():Get_Targets(3) and EffectDC():Get_Targets(3):Get_CardPtr(0)
if decision ~= nil then
-- I chose the selected pile, so I need to sacrifice those permanents
lower_bound = 0
upper_bound = answer_count-1
end
for i=lower_bound,upper_bound do
local permanent = pilesDC:Get_CardPtr(i)
if permanent ~= nil then
target_player:Sacrifice(permanent)
end
end
end
</RESOLUTION_TIME_ACTION>http://magiccards.info/scans/en/vma/14.jpg <RESOLUTION_TIME_ACTION>
local minHands = EffectController():Hand_Count()
local minLands = S_CountTypeInZoneOfPlayer(CARD_TYPE_LAND, ZONE_BATTLEFIELD, EffectController())
local minCreatures = S_CountTypeInZoneOfPlayer(CARD_TYPE_CREATURE, ZONE_BATTLEFIELD, EffectController())
for i=0,(MTG():GetNumberOfPlayers()-1) do
local player = MTG():GetNthPlayer(i)
if player ~= nil then
local numHands = player:Hand_Count()
local numLands = S_CountTypeInZoneOfPlayer(CARD_TYPE_LAND, ZONE_BATTLEFIELD, player)
local numCreatures = S_CountTypeInZoneOfPlayer(CARD_TYPE_CREATURE, ZONE_BATTLEFIELD, player)
if numHands < minHands then
minHands = numHands
end
if numLands < minLands then
minLands = numLands
end
if numCreatures < minCreatures then
minCreatures = numCreatures
end
end
end
EffectDC():Set_Int(0, minLands)
EffectDC():Set_Int(5, minCreatures)
EffectDC():Set_Int(10, minHands)
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION repeating="1">
local n = MTG():GetActionRepCount()
local num_Players = MTG():GetNumberOfPlayers()
if (n < num_Players) then
local player = MTG():GetNthPlayer(n)
local filter = ClearFilter()
filter:Add(FE_CONTROLLER, OP_IS, player)
filter:Add(FE_TYPE, OP_IS, CARD_TYPE_LAND)
local numItemsToSacrifice = filter:Count() - EffectDC():Get_Int(0)
player:SetItemCount( numItemsToSacrifice )
for i = 0, (numItemsToSacrifice-1) do
player:SetItemPrompt( i, "CARD_QUERY_CHOOSE_LAND_TO_SACRIFICE" )
end
player:ChooseItems( EffectDC():Make_Targets(n+1) )
return true
else
for i = 0, (num_Players-1) do
local player = MTG():GetNthPlayer(i)
local targetDC = EffectDC():Get_Targets(i+1)
if targetDC ~= nilthen
local numSacrifices = targetDC:Count()
for j = 0, (numSacrifices-1) do
local cardToSacrifice = targetDC:Get_CardPtr(j)
player:Sacrifice( cardToSacrifice )
end
end
end
return false
end
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION repeating="1">
local n = MTG():GetActionRepCount()
local num_Players = MTG():GetNumberOfPlayers()
if (n < num_Players) then
local player = MTG():GetNthPlayer(n)
local filter = ClearFilter()
filter:Add(FE_CONTROLLER, OP_IS, player)
filter:Add(FE_TYPE, OP_IS, CARD_TYPE_CREATURE)
local numItemsToSacrifice = filter:Count() - EffectDC():Get_Int(5)
player:SetItemCount( numItemsToSacrifice )
for i = 0, (numItemsToSacrifice-1) do
player:SetItemPrompt( i, "CARD_QUERY_CHOOSE_CREATURE_TO_SACRIFICE" )
end
player:ChooseItems( EffectDC():Make_Targets(n+6) )
return true
else
for i = 0, (num_Players-1) do
local player = MTG():GetNthPlayer(i)
local targetDC = EffectDC():Get_Targets(i+6)
if targetDC ~= nilthen
local numSacrifices = targetDC:Count()
for j = 0, (numSacrifices-1) do
local cardToSacrifice = targetDC:Get_CardPtr(j)
player:Sacrifice( cardToSacrifice )
end
end
end
return false
end
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION repeating="1">
local n = MTG():GetActionRepCount()
local num_Players = MTG():GetNumberOfPlayers()
if (n < num_Players) then
local player = MTG():GetNthPlayer(n)
local filter = ClearFilter()
filter:SetZone(ZONE_HAND, player)
local numItemsToDiscard = filter:Count() - EffectDC():Get_Int(10)
player:SetItemCount( numItemsToDiscard )
for i = 0, (numItemsToDiscard-1) do
player:SetItemPrompt( i, "CARD_QUERY_CHOOSE_CARD_TO_DISCARD" )
end
player:ChooseItems( EffectDC():Make_Targets(n+11) )
return true
else
for i = 0, (num_Players-1) do
local player = MTG():GetNthPlayer(i)
local targetDC = EffectDC():Get_Targets(i+11)
if targetDC ~= nilthen
local numDiscard = targetDC:Count()
for j = 0, (numDiscard-1) do
local cardToDiscard = targetDC:Get_CardPtr(j)
cardToDiscard:Discard()
end
end
end
return false
end
</RESOLUTION_TIME_ACTION>但这两个和剧变都有点不同,娜娜的没选类别,平衡牌太复杂了看不懂。。。,个人想法是:每个玩家选神器,结界。。。,然后选择的有卡牌保护,然后一起牺牲掉无卡牌保护的的,但选择的提示,过滤,又不知道怎么做了。。。卡牌保护函数Get_CardPtr()也看不明白怎么运作的。有大神提供建议或给些参考卡牌么 顶一个! 頂!大大會了以後能發個教學嗎? 娜娜就算了,它和平衡一样,而且更简单
1~25行的RESOLUTION_TIME_ACTION是计算应该保留的数量,这里都是1可以删除
86~114行的RESOLUTION_TIME_ACTION是弃牌用不到也可以删除
中间两个RESOLUTION_TIME_ACTION是生物和地,一样的原理就随便拿一个来看:
26~32行照抄
33行指出了类别,根据四种不同的类别需要来填写
34行计算应该牺牲的数量,这样做的原因是AI不懂什么是保留,所以我们只能告诉他应该牺牲多少,他就会从最没用的开始一个一个选来丢掉,前半段都不用变,最后的EffectDC():Get_Int(0)改为1就可以
35~36行照抄
37行的“CARD_QUERY_CHOOSE_LAND_TO_SACRIFICE”是一句显示在屏幕上的提示,根据四种不同的类别需要来填写
38~55行照抄
重复四次 sumomole 发表于 2015-6-16 13:37 static/image/common/back.gif
娜娜就算了,它和平衡一样,而且更简单
1~25行的RESOLUTION_TIME_ACTION是计算应该保留的数量,这里都是1 ...
谢谢大大,之前对函数什么的也不大了解,现在大致能看懂了,我试的做一下:)
页:
[1]