Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro-2pick
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
ygopro-2pick
Commits
ee06959e
Commit
ee06959e
authored
Apr 03, 2015
by
VanillaSalt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix EFFECT_SWAP_AD
parent
8a9df20e
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
113 additions
and
121 deletions
+113
-121
ocgcore/card.cpp
ocgcore/card.cpp
+108
-99
ocgcore/card.h
ocgcore/card.h
+3
-2
script/c4239451.lua
script/c4239451.lua
+1
-10
script/c79967395.lua
script/c79967395.lua
+1
-10
No files found.
ocgcore/card.cpp
View file @
ee06959e
...
...
@@ -325,7 +325,7 @@ int32 card::get_base_attack(uint8 swap) {
temp
.
base_attack
=
-
1
;
return
batk
;
}
int32
card
::
get_attack
(
uint8
swap
)
{
int32
card
::
get_attack
()
{
if
(
assume_type
==
ASSUME_ATTACK
)
return
assume_value
;
if
(
current
.
location
!=
LOCATION_MZONE
&&
!
(
data
.
type
&
TYPE_MONSTER
)
&&
!
(
get_type
()
&
TYPE_MONSTER
))
...
...
@@ -334,69 +334,8 @@ int32 card::get_attack(uint8 swap) {
return
data
.
attack
;
if
(
temp
.
attack
!=
-
1
)
return
temp
.
attack
;
if
(
!
swap
&&
is_affected_by_effect
(
EFFECT_SWAP_AD
))
return
get_defence
(
TRUE
);
uint32
base
=
get_base_attack
();
temp
.
base_attack
=
base
;
temp
.
attack
=
base
;
int32
up
=
0
,
upc
=
0
,
final
=
-
1
,
atk
,
rev
=
FALSE
;
effect_set
eset
;
effect_set
effects
;
filter_effect
(
EFFECT_UPDATE_ATTACK
,
&
eset
,
FALSE
);
filter_effect
(
EFFECT_SET_ATTACK
,
&
eset
,
FALSE
);
filter_effect
(
EFFECT_SET_ATTACK_FINAL
,
&
eset
);
if
(
is_affected_by_effect
(
EFFECT_REVERSE_UPDATE
))
rev
=
TRUE
;
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
switch
(
eset
[
i
]
->
code
)
{
case
EFFECT_UPDATE_ATTACK
:
if
((
eset
[
i
]
->
type
&
EFFECT_TYPE_SINGLE
)
&&
!
(
eset
[
i
]
->
flag
&
EFFECT_FLAG_SINGLE_RANGE
))
{
for
(
int32
j
=
0
;
j
<
effects
.
size
();
++
j
)
{
if
(
effects
[
j
]
->
flag
&
EFFECT_FLAG_REPEAT
)
{
base
=
effects
[
j
]
->
get_value
(
this
);
up
=
0
;
upc
=
0
;
temp
.
attack
=
base
;
}
}
up
+=
eset
[
i
]
->
get_value
(
this
);
}
else
upc
+=
eset
[
i
]
->
get_value
(
this
);
break
;
case
EFFECT_SET_ATTACK
:
base
=
eset
[
i
]
->
get_value
(
this
);
if
(
!
(
eset
[
i
]
->
type
&
EFFECT_TYPE_SINGLE
))
up
=
0
;
break
;
case
EFFECT_SET_ATTACK_FINAL
:
if
((
eset
[
i
]
->
type
&
EFFECT_TYPE_SINGLE
)
&&
!
(
eset
[
i
]
->
flag
&
EFFECT_FLAG_SINGLE_RANGE
))
{
base
=
eset
[
i
]
->
get_value
(
this
);
up
=
0
;
upc
=
0
;
}
else
effects
.
add_item
(
eset
[
i
]);
break
;
}
if
(
!
rev
)
temp
.
attack
=
base
+
up
+
upc
;
else
temp
.
attack
=
base
-
up
-
upc
;
}
for
(
int32
i
=
0
;
i
<
effects
.
size
();
++
i
)
{
final
=
effects
[
i
]
->
get_value
(
this
);
temp
.
attack
=
final
;
}
if
(
final
==
-
1
)
{
if
(
!
rev
)
atk
=
base
+
up
+
upc
;
else
atk
=
base
-
up
-
upc
;
}
else
atk
=
final
;
if
(
atk
<
0
)
atk
=
0
;
temp
.
base_attack
=
-
1
;
temp
.
attack
=
-
1
;
int32
atk
;
calc_attack_defence
(
&
atk
,
0
);
return
atk
;
}
int32
card
::
get_base_defence
(
uint8
swap
)
{
...
...
@@ -425,7 +364,7 @@ int32 card::get_base_defence(uint8 swap) {
temp
.
base_defence
=
-
1
;
return
bdef
;
}
int32
card
::
get_defence
(
uint8
swap
)
{
int32
card
::
get_defence
()
{
if
(
assume_type
==
ASSUME_DEFENCE
)
return
assume_value
;
if
(
current
.
location
!=
LOCATION_MZONE
&&
!
(
data
.
type
&
TYPE_MONSTER
)
&&
!
(
get_type
()
&
TYPE_MONSTER
))
...
...
@@ -434,70 +373,140 @@ int32 card::get_defence(uint8 swap) {
return
data
.
defence
;
if
(
temp
.
defence
!=
-
1
)
return
temp
.
defence
;
if
(
!
swap
&&
is_affected_by_effect
(
EFFECT_SWAP_AD
))
return
get_attack
(
TRUE
);
uint32
base
=
get_base_defence
();
temp
.
base_defence
=
base
;
temp
.
defence
=
base
;
int32
up
=
0
,
upc
=
0
,
final
=
-
1
,
def
,
rev
=
FALSE
;
int32
def
;
calc_attack_defence
(
0
,
&
def
);
return
def
;
}
void
card
::
calc_attack_defence
(
int32
*
patk
,
int32
*
pdef
)
{
uint32
base_atk
=
get_base_attack
();
temp
.
base_attack
=
base_atk
;
temp
.
attack
=
base_atk
;
uint32
base_def
=
get_base_defence
();
temp
.
base_defence
=
base_def
;
temp
.
defence
=
base_def
;
int32
up_atk
=
0
,
upc_atk
=
0
,
final_atk
=
-
1
,
atk
;
int32
up_def
=
0
,
upc_def
=
0
,
final_def
=
-
1
,
def
;
effect_set
eset
;
effect_set
effects
;
filter_effect
(
EFFECT_UPDATE_ATTACK
,
&
eset
,
FALSE
);
filter_effect
(
EFFECT_SET_ATTACK
,
&
eset
,
FALSE
);
filter_effect
(
EFFECT_SET_ATTACK_FINAL
,
&
eset
,
FALSE
);
filter_effect
(
EFFECT_UPDATE_DEFENCE
,
&
eset
,
FALSE
);
filter_effect
(
EFFECT_SET_DEFENCE
,
&
eset
,
FALSE
);
filter_effect
(
EFFECT_SET_DEFENCE_FINAL
,
&
eset
);
filter_effect
(
EFFECT_SET_DEFENCE_FINAL
,
&
eset
,
FALSE
);
filter_effect
(
EFFECT_SWAP_AD
,
&
eset
);
int32
rev
=
FALSE
;
if
(
is_affected_by_effect
(
EFFECT_REVERSE_UPDATE
))
rev
=
TRUE
;
effect_set
effects_atk
,
effects_def
;
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
switch
(
eset
[
i
]
->
code
)
{
case
EFFECT_UPDATE_ATTACK
:
if
((
eset
[
i
]
->
type
&
EFFECT_TYPE_SINGLE
)
&&
!
(
eset
[
i
]
->
flag
&
EFFECT_FLAG_SINGLE_RANGE
))
{
for
(
int32
j
=
0
;
j
<
effects_atk
.
size
();
++
j
)
{
if
(
effects_atk
[
j
]
->
flag
&
EFFECT_FLAG_REPEAT
)
{
base_atk
=
effects_atk
[
j
]
->
get_value
(
this
);
up_atk
=
0
;
upc_atk
=
0
;
temp
.
attack
=
base_atk
;
}
}
up_atk
+=
eset
[
i
]
->
get_value
(
this
);
}
else
upc_atk
+=
eset
[
i
]
->
get_value
(
this
);
break
;
case
EFFECT_SET_ATTACK
:
base_atk
=
eset
[
i
]
->
get_value
(
this
);
if
(
!
(
eset
[
i
]
->
type
&
EFFECT_TYPE_SINGLE
))
up_atk
=
0
;
break
;
case
EFFECT_SET_ATTACK_FINAL
:
if
((
eset
[
i
]
->
type
&
EFFECT_TYPE_SINGLE
)
&&
!
(
eset
[
i
]
->
flag
&
EFFECT_FLAG_SINGLE_RANGE
))
{
base_atk
=
eset
[
i
]
->
get_value
(
this
);
up_atk
=
0
;
upc_atk
=
0
;
}
else
effects_atk
.
add_item
(
eset
[
i
]);
break
;
case
EFFECT_UPDATE_DEFENCE
:
if
((
eset
[
i
]
->
type
&
EFFECT_TYPE_SINGLE
)
&&
!
(
eset
[
i
]
->
flag
&
EFFECT_FLAG_SINGLE_RANGE
))
{
for
(
int32
j
=
0
;
j
<
effects
.
size
();
++
j
)
{
if
(
effects
[
j
]
->
flag
&
EFFECT_FLAG_REPEAT
)
{
base
=
effects
[
j
]
->
get_value
(
this
);
up
=
0
;
upc
=
0
;
temp
.
defence
=
base
;
for
(
int32
j
=
0
;
j
<
effects
_def
.
size
();
++
j
)
{
if
(
effects
_def
[
j
]
->
flag
&
EFFECT_FLAG_REPEAT
)
{
base
_def
=
effects_def
[
j
]
->
get_value
(
this
);
up
_def
=
0
;
upc
_def
=
0
;
temp
.
attack
=
base_def
;
}
}
up
+=
eset
[
i
]
->
get_value
(
this
);
up
_def
+=
eset
[
i
]
->
get_value
(
this
);
}
else
upc
+=
eset
[
i
]
->
get_value
(
this
);
upc
_def
+=
eset
[
i
]
->
get_value
(
this
);
break
;
case
EFFECT_SET_DEFENCE
:
base
=
eset
[
i
]
->
get_value
(
this
);
base
_def
=
eset
[
i
]
->
get_value
(
this
);
if
(
!
(
eset
[
i
]
->
type
&
EFFECT_TYPE_SINGLE
))
up
=
0
;
up
_def
=
0
;
break
;
case
EFFECT_SET_DEFENCE_FINAL
:
if
((
eset
[
i
]
->
type
&
EFFECT_TYPE_SINGLE
)
&&
!
(
eset
[
i
]
->
flag
&
EFFECT_FLAG_SINGLE_RANGE
))
{
base
=
eset
[
i
]
->
get_value
(
this
);
up
=
0
;
upc
=
0
;
base
_def
=
eset
[
i
]
->
get_value
(
this
);
up
_def
=
0
;
upc
_def
=
0
;
}
else
effects
.
add_item
(
eset
[
i
]);
effects_def
.
add_item
(
eset
[
i
]);
break
;
case
EFFECT_SWAP_AD
:
int32
a
=
base_atk
+
up_atk
+
upc_atk
;
int32
d
=
base_def
+
up_def
+
upc_def
;
base_atk
=
d
;
up_atk
=
0
;
upc_atk
=
0
;
base_def
=
a
;
up_def
=
0
;
upc_def
=
0
;
break
;
}
if
(
!
rev
)
temp
.
defence
=
base
+
up
+
upc
;
else
temp
.
defence
=
base
-
up
-
upc
;
if
(
!
rev
)
{
temp
.
attack
=
base_atk
+
up_atk
+
upc_atk
;
temp
.
defence
=
base_def
+
up_def
+
upc_def
;
}
else
{
temp
.
attack
=
base_atk
-
up_atk
-
upc_atk
;
temp
.
defence
=
base_def
-
up_def
-
upc_def
;
}
}
for
(
int32
i
=
0
;
i
<
effects
.
size
();
++
i
)
{
final
=
effects
[
i
]
->
get_value
(
this
);
temp
.
defence
=
final
;
for
(
int32
i
=
0
;
i
<
effects_atk
.
size
();
++
i
)
{
final_atk
=
effects_atk
[
i
]
->
get_value
(
this
);
temp
.
attack
=
final_atk
;
}
for
(
int32
i
=
0
;
i
<
effects_def
.
size
();
++
i
)
{
final_def
=
effects_def
[
i
]
->
get_value
(
this
);
temp
.
defence
=
final_def
;
}
if
(
final
==
-
1
)
{
if
(
final
_atk
==
-
1
)
{
if
(
!
rev
)
def
=
base
+
up
+
upc
;
atk
=
base_atk
+
up_atk
+
upc_atk
;
else
def
=
base
-
up
-
upc
;
atk
=
base_atk
-
up_atk
-
upc_atk
;
}
else
def
=
final
;
atk
=
final_atk
;
if
(
final_def
==
-
1
)
{
if
(
!
rev
)
def
=
base_def
+
up_def
+
upc_def
;
else
def
=
base_def
-
up_def
-
upc_def
;
}
else
def
=
final_def
;
if
(
atk
<
0
)
atk
=
0
;
if
(
def
<
0
)
def
=
0
;
temp
.
base_attack
=
-
1
;
temp
.
attack
=
-
1
;
temp
.
base_defence
=
-
1
;
temp
.
defence
=
-
1
;
return
def
;
if
(
patk
)
*
patk
=
atk
;
if
(
pdef
)
*
pdef
=
def
;
}
uint32
card
::
get_level
()
{
if
((
data
.
type
&
TYPE_XYZ
)
||
(
status
&
STATUS_NO_LEVEL
)
...
...
ocgcore/card.h
View file @
ee06959e
...
...
@@ -145,9 +145,10 @@ public:
int32
is_set_card
(
uint32
set_code
);
uint32
get_type
();
int32
get_base_attack
(
uint8
swap
=
FALSE
);
int32
get_attack
(
uint8
swap
=
FALSE
);
int32
get_attack
();
int32
get_base_defence
(
uint8
swap
=
FALSE
);
int32
get_defence
(
uint8
swap
=
FALSE
);
int32
get_defence
();
void
calc_attack_defence
(
int32
*
patk
,
int32
*
pdef
);
uint32
get_level
();
uint32
get_rank
();
uint32
get_synchro_level
(
card
*
pcard
);
...
...
script/c4239451.lua
View file @
ee06959e
...
...
@@ -43,20 +43,11 @@ function c4239451.adop1(e,tp,eg,ep,ev,re,r,rp)
if
not
e
:
GetHandler
():
IsRelateToEffect
(
e
)
then
return
end
local
tc
=
Duel
.
GetFirstTarget
()
if
tc
:
IsRelateToEffect
(
e
)
and
tc
:
IsFaceup
()
then
local
atk
=
tc
:
GetAttack
()
local
def
=
tc
:
GetDefence
()
local
e1
=
Effect
.
CreateEffect
(
e
:
GetHandler
())
e1
:
SetType
(
EFFECT_TYPE_SINGLE
)
e1
:
SetCode
(
EFFECT_SET_ATTACK_FINAL
)
e1
:
SetValue
(
def
)
e1
:
SetCode
(
EFFECT_SWAP_AD
)
e1
:
SetReset
(
RESET_EVENT
+
0x1fe0000
+
RESET_PHASE
+
RESET_END
)
tc
:
RegisterEffect
(
e1
)
local
e2
=
Effect
.
CreateEffect
(
e
:
GetHandler
())
e2
:
SetType
(
EFFECT_TYPE_SINGLE
)
e2
:
SetCode
(
EFFECT_SET_DEFENCE_FINAL
)
e2
:
SetValue
(
atk
)
e2
:
SetReset
(
RESET_EVENT
+
0x1fe0000
+
RESET_PHASE
+
RESET_END
)
tc
:
RegisterEffect
(
e2
)
end
end
function
c4239451
.
adcon2
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
)
...
...
script/c79967395.lua
View file @
ee06959e
...
...
@@ -30,19 +30,10 @@ end
function
c79967395
.
operation
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
)
local
tc
=
Duel
.
GetFirstTarget
()
if
tc
:
IsFaceup
()
and
tc
:
IsRelateToEffect
(
e
)
then
local
atk
=
tc
:
GetAttack
()
local
def
=
tc
:
GetDefence
()
local
e1
=
Effect
.
CreateEffect
(
e
:
GetHandler
())
e1
:
SetType
(
EFFECT_TYPE_SINGLE
)
e1
:
SetCode
(
EFFECT_SET_ATTACK_FINAL
)
e1
:
SetValue
(
def
)
e1
:
SetCode
(
EFFECT_SWAP_AD
)
e1
:
SetReset
(
RESET_EVENT
+
0x1fe0000
+
RESET_PHASE
+
PHASE_END
)
tc
:
RegisterEffect
(
e1
)
local
e2
=
Effect
.
CreateEffect
(
e
:
GetHandler
())
e2
:
SetType
(
EFFECT_TYPE_SINGLE
)
e2
:
SetCode
(
EFFECT_SET_DEFENCE_FINAL
)
e2
:
SetValue
(
atk
)
e2
:
SetReset
(
RESET_EVENT
+
0x1fe0000
+
RESET_PHASE
+
PHASE_END
)
tc
:
RegisterEffect
(
e2
)
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment