Skip to content

Commit 49f1929

Browse files
authored
Merge pull request #146 from kevinlul/Action-Duel
Action Duel scripts for Beta #1
2 parents 88edddd + 9fe212c commit 49f1929

File tree

169 files changed

+6532
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

169 files changed

+6532
-0
lines changed

Diff for: unofficial/c150000000.lua

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
--地縛原
2+
--Earthbound Tundra
3+
--Scripted by Larry126
4+
local s,id=GetID()
5+
function s.initial_effect(c)
6+
--cannot summon in def
7+
local e1=Effect.CreateEffect(c)
8+
e1:SetType(EFFECT_TYPE_FIELD)
9+
e1:SetRange(LOCATION_FZONE)
10+
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
11+
e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
12+
e1:SetTargetRange(1,1)
13+
e1:SetTarget(s.splimit)
14+
c:RegisterEffect(e1)
15+
local e2=e1:Clone()
16+
e2:SetCode(EFFECT_CANNOT_SUMMON)
17+
c:RegisterEffect(e2)
18+
local e3=e1:Clone()
19+
e3:SetCode(EFFECT_CANNOT_FLIP_SUMMON)
20+
c:RegisterEffect(e3)
21+
--cannot change position
22+
local e4=Effect.CreateEffect(c)
23+
e4:SetType(EFFECT_TYPE_FIELD)
24+
e4:SetRange(LOCATION_FZONE)
25+
e4:SetCode(EFFECT_CANNOT_CHANGE_POSITION)
26+
e4:SetTargetRange(LOCATION_MZONE,LOCATION_MZONE)
27+
e4:SetTarget(s.poslimit)
28+
c:RegisterEffect(e4)
29+
--send
30+
local e5=Effect.CreateEffect(c)
31+
e5:SetCategory(CATEGORY_TOGRAVE)
32+
e5:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_F)
33+
e5:SetRange(LOCATION_FZONE)
34+
e5:SetCode(EVENT_TO_HAND)
35+
e5:SetCondition(s.tgcon)
36+
e5:SetTarget(s.tgtg)
37+
e5:SetOperation(s.tgop)
38+
c:RegisterEffect(e5)
39+
--action card
40+
local e5=Effect.CreateEffect(c)
41+
e5:SetType(EFFECT_TYPE_FIELD)
42+
e5:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
43+
e5:SetCode(id)
44+
e5:SetRange(LOCATION_FZONE)
45+
e5:SetTargetRange(1,1)
46+
e5:SetValue(1)
47+
c:RegisterEffect(e5)
48+
end
49+
function s.splimit(e,c,sump,sumtype,sumpos,targetp,se)
50+
return sumpos&POS_DEFENSE>0
51+
end
52+
function s.poslimit(e,c)
53+
return c:IsPosition(POS_FACEUP_ATTACK)
54+
end
55+
function s.tgfilter(c)
56+
return c:IsType(TYPE_ACTION)
57+
end
58+
function s.tgcon(e,tp,eg,ep,ev,re,r,rp)
59+
return eg:IsExists(s.tgfilter,1,nil)
60+
end
61+
function s.tgtg(e,tp,eg,ep,ev,re,r,rp,chk)
62+
if chk==0 then return true end
63+
Duel.SetOperationInfo(0,CATEGORY_TOGRAVE,nil,0,1-ep,LOCATION_HAND)
64+
Duel.SetChainLimit(s.limit(ep))
65+
end
66+
function s.limit(ep)
67+
return function (e,lp,tp)
68+
return not (e:GetHandler():IsType(TYPE_ACTION) and tp~=1-ep)
69+
end
70+
end
71+
function s.tgop(e,tp,eg,ep,ev,re,r,rp)
72+
if not e:GetHandler():IsRelateToEffect(e) then return end
73+
local g=Duel.GetMatchingGroup(s.tgfilter,1-ep,LOCATION_HAND,0,nil)
74+
Duel.SendtoGrave(g,REASON_EFFECT)
75+
end

Diff for: unofficial/c150000001.lua

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
--加速
2+
--Acceleration
3+
local s,id=GetID()
4+
function s.initial_effect(c)
5+
--reflect
6+
local e1=Effect.CreateEffect(c)
7+
e1:SetType(EFFECT_TYPE_ACTIVATE)
8+
e1:SetCode(EVENT_CHAINING)
9+
e1:SetCondition(s.condition)
10+
e1:SetOperation(s.operation)
11+
c:RegisterEffect(e1)
12+
end
13+
function s.condition(e,tp,eg,ep,ev,re,r,rp)
14+
local ex,cg,ct,cp,cv=Duel.GetOperationInfo(ev,CATEGORY_DAMAGE)
15+
if ex then return true end
16+
ex,cg,ct,cp,cv=Duel.GetOperationInfo(ev,CATEGORY_RECOVER)
17+
return ex
18+
end
19+
function s.operation(e,tp,eg,ep,ev,re,r,rp)
20+
local cid=Duel.GetChainInfo(ev,CHAININFO_CHAIN_ID)
21+
local e1=Effect.CreateEffect(e:GetHandler())
22+
e1:SetType(EFFECT_TYPE_FIELD)
23+
e1:SetCode(EFFECT_CHANGE_DAMAGE)
24+
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
25+
e1:SetTargetRange(1,0)
26+
e1:SetLabel(cid)
27+
e1:SetValue(s.refcon)
28+
e1:SetReset(RESET_CHAIN)
29+
Duel.RegisterEffect(e1,tp)
30+
end
31+
function s.refcon(e,re,val,r,rp,rc)
32+
local cc=Duel.GetCurrentChain()
33+
local cc=Duel.GetCurrentChain()
34+
if cc==0 or (r&REASON_EFFECT)==0 then return end
35+
local cid=Duel.GetChainInfo(0,CHAININFO_CHAIN_ID)
36+
if cid==e:GetLabel() then return 0 end
37+
return val
38+
end

Diff for: unofficial/c150000002.lua

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
--突撃
2+
--Charge Recklessly
3+
local s,id=GetID()
4+
function s.initial_effect(c)
5+
--Activate
6+
local e1=Effect.CreateEffect(c)
7+
e1:SetType(EFFECT_TYPE_ACTIVATE)
8+
e1:SetCode(EVENT_PRE_DAMAGE_CALCULATE)
9+
e1:SetCondition(s.condition)
10+
e1:SetOperation(s.activate)
11+
c:RegisterEffect(e1)
12+
end
13+
function s.condition(e,tp,eg,ep,ev,re,r,rp)
14+
if not (Duel.GetCurrentPhase()~=PHASE_DAMAGE or not Duel.IsDamageCalculated()) then return false end
15+
local tc=Duel.GetAttacker()
16+
local at=Duel.GetAttackTarget()
17+
if not at or tc:IsFacedown() or at:IsFacedown() then return false end
18+
if tc:IsControler(1-tp) then tc=at end
19+
e:SetLabelObject(tc)
20+
return tc:IsControler(tp) and tc:IsLocation(LOCATION_MZONE)
21+
end
22+
function s.activate(e,tp,eg,ep,ev,re,r,rp)
23+
local c=e:GetHandler()
24+
local tc=e:GetLabelObject()
25+
if tc:IsRelateToBattle() and not tc:IsImmuneToEffect(e) then
26+
local e1=Effect.CreateEffect(c)
27+
e1:SetType(EFFECT_TYPE_SINGLE)
28+
e1:SetCode(EFFECT_UPDATE_ATTACK)
29+
e1:SetValue(600)
30+
e1:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_DAMAGE_CAL)
31+
tc:RegisterEffect(e1)
32+
end
33+
end

Diff for: unofficial/c150000003.lua

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
--アタック・フォース
2+
--Attack Force
3+
local s,id=GetID()
4+
function s.initial_effect(c)
5+
--Activate
6+
local e1=Effect.CreateEffect(c)
7+
e1:SetType(EFFECT_TYPE_ACTIVATE)
8+
e1:SetCode(EVENT_PRE_DAMAGE_CALCULATE)
9+
e1:SetCondition(s.condition)
10+
e1:SetOperation(s.activate)
11+
c:RegisterEffect(e1)
12+
end
13+
function s.condition(e,tp,eg,ep,ev,re,r,rp)
14+
if not (Duel.GetCurrentPhase()~=PHASE_DAMAGE or not Duel.IsDamageCalculated()) then return false end
15+
local tc=Duel.GetAttacker()
16+
local at=Duel.GetAttackTarget()
17+
if not at or tc:IsFacedown() or at:IsFacedown() then return false end
18+
if tc:IsControler(1-tp) then
19+
tc=Duel.GetAttackTarget()
20+
at=Duel.GetAttacker()
21+
end
22+
e:SetLabelObject(tc)
23+
return tc:IsControler(tp) and tc:IsLocation(LOCATION_MZONE) and tc:GetAttack()>at:GetAttack()
24+
end
25+
function s.activate(e,tp,eg,ep,ev,re,r,rp)
26+
local c=e:GetHandler()
27+
local tc=e:GetLabelObject()
28+
if tc:IsRelateToBattle() and not tc:IsImmuneToEffect(e) then
29+
local e1=Effect.CreateEffect(c)
30+
e1:SetType(EFFECT_TYPE_SINGLE)
31+
e1:SetCode(EFFECT_UPDATE_ATTACK)
32+
e1:SetValue(600)
33+
e1:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_DAMAGE_CAL)
34+
tc:RegisterEffect(e1)
35+
end
36+
end

Diff for: unofficial/c150000004.lua

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
--バトル・バーナー
2+
--Battle Burner
3+
local s,id=GetID()
4+
function s.initial_effect(c)
5+
--Activate
6+
local e1=Effect.CreateEffect(c)
7+
e1:SetDescription(aux.Stringid(id,0))
8+
e1:SetCategory(CATEGORY_ATKCHANGE)
9+
e1:SetType(EFFECT_TYPE_ACTIVATE)
10+
e1:SetCode(EVENT_ATTACK_DISABLED)
11+
e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
12+
e1:SetTarget(s.target)
13+
e1:SetOperation(s.operation)
14+
c:RegisterEffect(e1)
15+
end
16+
function s.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
17+
if chkc then return chkc==eg:GetFirst() end
18+
if chk==0 then return eg:GetFirst():IsFaceup() and eg:GetFirst():IsCanBeEffectTarget(e) end
19+
Duel.SetTargetCard(eg:GetFirst())
20+
end
21+
function s.operation(e,tp,eg,ep,ev,re,r,rp)
22+
local c=e:GetHandler()
23+
local tc=Duel.GetFirstTarget()
24+
if tc:IsFaceup() and tc:IsRelateToEffect(e) and tc:GetFlagEffect(id)==0 then
25+
tc:RegisterFlagEffect(id,RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END,0,1)
26+
local e1=Effect.CreateEffect(c)
27+
e1:SetType(EFFECT_TYPE_SINGLE)
28+
e1:SetCode(EFFECT_EXTRA_ATTACK)
29+
e1:SetValue(1)
30+
e1:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END)
31+
tc:RegisterEffect(e1)
32+
local e2=Effect.CreateEffect(c)
33+
e2:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
34+
e2:SetCode(EVENT_BATTLE_START)
35+
e2:SetCountLimit(1)
36+
e2:SetOperation(s.atkop)
37+
e2:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END)
38+
tc:RegisterEffect(e2)
39+
local e3=Effect.CreateEffect(c)
40+
e3:SetDescription(aux.Stringid(id,1))
41+
e3:SetProperty(EFFECT_FLAG_CLIENT_HINT)
42+
e3:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END)
43+
tc:RegisterEffect(e3)
44+
end
45+
end
46+
function s.atkop(e,tp,eg,ep,ev,re,r,rp)
47+
local e1=Effect.CreateEffect(e:GetOwner())
48+
e1:SetDescription(aux.Stringid(id,2))
49+
e1:SetCategory(CATEGORY_DESTROY)
50+
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
51+
e1:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_F)
52+
e1:SetCode(EVENT_BATTLE_DESTROYING)
53+
e1:SetCondition(aux.bdgcon)
54+
e1:SetTarget(s.destg)
55+
e1:SetOperation(s.desop)
56+
e:GetHandler():RegisterEffect(e1)
57+
end
58+
function s.filter(c)
59+
return c:IsAttackPos() and c:IsDestructable()
60+
end
61+
function s.destg(e,tp,eg,ep,ev,re,r,rp,chk)
62+
if chk==0 then return Duel.IsExistingMatchingCard(s.filter,tp,0,LOCATION_MZONE,1,nil) end
63+
local g=Duel.GetMatchingGroup(s.filter,tp,0,LOCATION_MZONE,nil)
64+
Duel.SetOperationInfo(0,CATEGORY_DESTROY,g,#g,0,0)
65+
end
66+
function s.desop(e,tp,eg,ep,ev,re,r,rp)
67+
local g=Duel.GetMatchingGroup(s.filter,tp,0,LOCATION_MZONE,nil)
68+
if #g>0 then
69+
Duel.Destroy(g,REASON_EFFECT)
70+
end
71+
end

Diff for: unofficial/c150000005.lua

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
--バトル・チェンジ
2+
--Battle Change
3+
local s,id=GetID()
4+
function s.initial_effect(c)
5+
--Activate
6+
local e1=Effect.CreateEffect(c)
7+
e1:SetType(EFFECT_TYPE_ACTIVATE)
8+
e1:SetCode(EVENT_FREE_CHAIN)
9+
e1:SetCondition(s.condition)
10+
e1:SetOperation(s.activate)
11+
c:RegisterEffect(e1)
12+
end
13+
function s.condition(e,tp,eg,ep,ev,re,r,rp)
14+
return Duel.GetTurnPlayer()~=tp and Duel.GetCurrentPhase()>=PHASE_BATTLE_START and Duel.GetCurrentPhase()<=PHASE_BATTLE
15+
end
16+
function s.activate(e,tp,eg,ep,ev,re,r,rp)
17+
local e1=Effect.CreateEffect(e:GetHandler())
18+
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
19+
e1:SetCode(EVENT_ATTACK_ANNOUNCE)
20+
e1:SetCondition(s.con)
21+
e1:SetOperation(s.op)
22+
e1:SetReset(RESET_PHASE+PHASE_END)
23+
Duel.RegisterEffect(e1,tp)
24+
end
25+
function s.con(e,tp,eg,ep,ev,re,r,rp)
26+
return not Duel.GetAttacker():IsContains(tp) and Duel.GetAttacker():GetFlagEffect(id)==0
27+
end
28+
function s.op(e,tp,eg,ep,ev,re,r,rp)
29+
local ats=eg:GetFirst():GetAttackableTarget()
30+
local at=Duel.GetAttackTarget()
31+
if #ats==0 or (at and #ats==1) then return end
32+
if Duel.SelectEffectYesNo(tp,e:GetHandler()) then
33+
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_ATTACKTARGET)
34+
local g=ats:Select(tp,1,1,at)
35+
Duel.Hint(HINT_CARD,0,id)
36+
Duel.HintSelection(g)
37+
Duel.ChangeAttackTarget(g:GetFirst())
38+
Duel.GetAttacker():RegisterFlagEffect(id,RESET_EVENT+RESETS_STANDARD,0,1)
39+
end
40+
end

Diff for: unofficial/c150000006.lua

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
--バトル・ロック
2+
--Battle Lock
3+
local s,id=GetID()
4+
function s.initial_effect(c)
5+
--Activate
6+
local e1=Effect.CreateEffect(c)
7+
e1:SetType(EFFECT_TYPE_ACTIVATE)
8+
e1:SetCode(EVENT_FREE_CHAIN)
9+
e1:SetHintTiming(0,TIMING_MAIN_END)
10+
e1:SetCondition(s.condition)
11+
e1:SetOperation(s.activate)
12+
c:RegisterEffect(e1)
13+
end
14+
function s.condition(e,tp,eg,ep,ev,re,r,rp)
15+
return Duel.IsAbleToEnterBP() or (Duel.GetCurrentPhase()>=PHASE_BATTLE_START and Duel.GetCurrentPhase()<=PHASE_BATTLE)
16+
end
17+
function s.activate(e,tp,eg,ep,ev,re,r,rp)
18+
local e1=Effect.CreateEffect(e:GetHandler())
19+
e1:SetType(EFFECT_TYPE_FIELD)
20+
e1:SetCode(EFFECT_CANNOT_ATTACK_ANNOUNCE)
21+
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
22+
e1:SetReset(RESET_PHASE+PHASE_END)
23+
e1:SetTargetRange(0,1)
24+
Duel.RegisterEffect(e1,tp)
25+
end

Diff for: unofficial/c150000007.lua

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
--ベンケイ・ガード
2+
--Benkei Guard
3+
local s,id=GetID()
4+
function s.initial_effect(c)
5+
--Activate
6+
local e1=Effect.CreateEffect(c)
7+
e1:SetCategory(CATEGORY_SPECIAL_SUMMON+CATEGORY_TOKEN)
8+
e1:SetType(EFFECT_TYPE_ACTIVATE)
9+
e1:SetCode(EVENT_FREE_CHAIN)
10+
e1:SetTarget(s.target)
11+
e1:SetOperation(s.activate)
12+
c:RegisterEffect(e1)
13+
end
14+
s.listed_names={id+1}
15+
function s.target(e,tp,eg,ep,ev,re,r,rp,chk)
16+
if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0
17+
and Duel.IsPlayerCanSpecialSummonMonster(tp,id+1,0,TYPES_TOKEN,1000,0,1,RACE_MACHINE,ATTRIBUTE_EARTH) end
18+
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,0)
19+
Duel.SetOperationInfo(0,CATEGORY_TOKEN,nil,1,tp,0)
20+
end
21+
function s.activate(e,tp,eg,ep,ev,re,r,rp)
22+
if Duel.GetLocationCount(tp,LOCATION_MZONE,tp)<=0
23+
or not Duel.IsPlayerCanSpecialSummonMonster(tp,id+1,0,TYPES_TOKEN,1000,0,1,RACE_MACHINE,ATTRIBUTE_EARTH) then return end
24+
local token=Duel.CreateToken(tp,id+1)
25+
Duel.SpecialSummon(token,0,tp,tp,false,false,POS_FACEUP)
26+
local e1=Effect.CreateEffect(e:GetHandler())
27+
e1:SetType(EFFECT_TYPE_SINGLE)
28+
e1:SetCode(EFFECT_INDESTRUCTABLE_BATTLE)
29+
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
30+
e1:SetValue(1)
31+
e1:SetReset(RESET_EVENT+RESETS_STANDARD)
32+
token:RegisterEffect(e1)
33+
--indes
34+
local e2=Effect.CreateEffect(e:GetHandler())
35+
e2:SetType(EFFECT_TYPE_SINGLE)
36+
e2:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
37+
e2:SetRange(LOCATION_MZONE)
38+
e2:SetCode(EFFECT_INDESTRUCTABLE_EFFECT)
39+
e2:SetReset(RESET_EVENT+RESETS_STANDARD)
40+
e2:SetValue(s.indesval)
41+
c:RegisterEffect(e2)
42+
local e3=Effect.CreateEffect(e:GetHandler())
43+
e3:SetType(EFFECT_TYPE_FIELD)
44+
e3:SetCode(EFFECT_MUST_BE_ATTACKED)
45+
e3:SetRange(LOCATION_MZONE)
46+
e3:SetTargetRange(LOCATION_MZONE,0)
47+
e3:SetTarget(s.attg)
48+
e3:SetReset(RESET_EVENT+RESETS_STANDARD)
49+
e3:SetValue(1)
50+
c:RegisterEffect(e3)
51+
end
52+
function s.indesval(e,re)
53+
return re:IsActiveType(TYPE_MONSTER)
54+
end
55+
function s.attg(e,c)
56+
return c:IsCode(id+1)
57+
end

0 commit comments

Comments
 (0)