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
97fd88a8
Commit
97fd88a8
authored
Nov 20, 2014
by
Fluorohydride
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #934 from salix5/patch-hat
fix: Magical Hats
parents
9cb061be
b2ef8f9b
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
65 additions
and
29 deletions
+65
-29
gframe/client_card.cpp
gframe/client_card.cpp
+1
-1
ocgcore/card.cpp
ocgcore/card.cpp
+16
-8
ocgcore/libcard.cpp
ocgcore/libcard.cpp
+19
-7
script/c81210420.lua
script/c81210420.lua
+29
-13
No files found.
gframe/client_card.cpp
View file @
97fd88a8
...
...
@@ -72,7 +72,7 @@ void ClientCard::UpdateInfo(char* buf) {
type
=
BufferIO
::
ReadInt32
(
buf
);
if
(
flag
&
QUERY_LEVEL
)
{
pdata
=
BufferIO
::
ReadInt32
(
buf
);
if
(
pdata
&&
level
!=
(
unsigned
int
)
pdata
)
{
if
(
level
!=
(
unsigned
int
)
pdata
)
{
level
=
pdata
;
myswprintf
(
lvstring
,
L"L%d"
,
level
);
}
...
...
ocgcore/card.cpp
View file @
97fd88a8
...
...
@@ -296,6 +296,8 @@ uint32 card::get_type() {
return
type
;
}
int32
card
::
get_base_attack
(
uint8
swap
)
{
if
(
current
.
location
!=
LOCATION_MZONE
&&
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
))
return
0
;
if
(
current
.
location
!=
LOCATION_MZONE
)
return
data
.
attack
;
if
(
temp
.
base_attack
!=
-
1
)
...
...
@@ -322,6 +324,8 @@ int32 card::get_base_attack(uint8 swap) {
int32
card
::
get_attack
(
uint8
swap
)
{
if
(
assume_type
==
ASSUME_ATTACK
)
return
assume_value
;
if
(
current
.
location
!=
LOCATION_MZONE
&&
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
))
return
0
;
if
(
current
.
location
!=
LOCATION_MZONE
)
return
data
.
attack
;
if
(
temp
.
attack
!=
-
1
)
...
...
@@ -392,6 +396,8 @@ int32 card::get_attack(uint8 swap) {
return
atk
;
}
int32
card
::
get_base_defence
(
uint8
swap
)
{
if
(
current
.
location
!=
LOCATION_MZONE
&&
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
))
return
0
;
if
(
current
.
location
!=
LOCATION_MZONE
)
return
data
.
defence
;
if
(
temp
.
base_defence
!=
-
1
)
...
...
@@ -418,6 +424,8 @@ int32 card::get_base_defence(uint8 swap) {
int32
card
::
get_defence
(
uint8
swap
)
{
if
(
assume_type
==
ASSUME_DEFENCE
)
return
assume_value
;
if
(
current
.
location
!=
LOCATION_MZONE
&&
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
))
return
0
;
if
(
current
.
location
!=
LOCATION_MZONE
)
return
data
.
defence
;
if
(
temp
.
defence
!=
-
1
)
...
...
@@ -488,7 +496,7 @@ int32 card::get_defence(uint8 swap) {
return
def
;
}
uint32
card
::
get_level
()
{
if
(
data
.
type
&
TYPE_XYZ
)
if
(
data
.
type
&
TYPE_XYZ
||
single_effect
.
count
(
0x14d72c34
)
>
0
||
(
current
.
location
!=
LOCATION_MZONE
&&
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
))
)
return
0
;
if
(
assume_type
==
ASSUME_LEVEL
)
return
assume_value
;
...
...
@@ -554,7 +562,7 @@ uint32 card::get_rank() {
return
rank
;
}
uint32
card
::
get_synchro_level
(
card
*
pcard
)
{
if
(
data
.
type
&
TYPE_XYZ
)
if
(
data
.
type
&
TYPE_XYZ
||
single_effect
.
count
(
0x14d72c34
)
>
0
||
(
current
.
location
!=
LOCATION_MZONE
&&
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
))
)
return
0
;
uint32
lev
;
effect_set
eset
;
...
...
@@ -566,7 +574,7 @@ uint32 card::get_synchro_level(card* pcard) {
return
lev
;
}
uint32
card
::
get_ritual_level
(
card
*
pcard
)
{
if
(
data
.
type
&
TYPE_XYZ
)
if
(
data
.
type
&
TYPE_XYZ
||
single_effect
.
count
(
0x14d72c34
)
>
0
||
(
current
.
location
!=
LOCATION_MZONE
&&
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
))
)
return
0
;
uint32
lev
;
effect_set
eset
;
...
...
@@ -578,7 +586,7 @@ uint32 card::get_ritual_level(card* pcard) {
return
lev
;
}
uint32
card
::
is_xyz_level
(
card
*
pcard
,
uint32
lv
)
{
if
(
data
.
type
&
TYPE_XYZ
)
if
(
data
.
type
&
TYPE_XYZ
||
single_effect
.
count
(
0x14d72c34
)
>
0
||
(
current
.
location
!=
LOCATION_MZONE
&&
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
))
)
return
FALSE
;
uint32
lev
;
effect_set
eset
;
...
...
@@ -594,10 +602,10 @@ uint32 card::is_xyz_level(card* pcard, uint32 lv) {
uint32
card
::
get_attribute
()
{
if
(
assume_type
==
ASSUME_ATTRIBUTE
)
return
assume_value
;
if
(
current
.
location
!=
LOCATION_MZONE
&&
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
))
return
0
;
if
(
!
(
current
.
location
&
(
LOCATION_MZONE
+
LOCATION_GRAVE
)))
return
data
.
attribute
;
if
((
current
.
location
==
LOCATION_GRAVE
)
&&
(
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
)))
return
data
.
attribute
;
if
(
temp
.
attribute
!=
0xffffffff
)
return
temp
.
attribute
;
effect_set
effects
;
...
...
@@ -621,10 +629,10 @@ uint32 card::get_attribute() {
uint32
card
::
get_race
()
{
if
(
assume_type
==
ASSUME_RACE
)
return
assume_value
;
if
(
current
.
location
!=
LOCATION_MZONE
&&
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
))
return
0
;
if
(
!
(
current
.
location
&
(
LOCATION_MZONE
+
LOCATION_GRAVE
)))
return
data
.
race
;
if
((
current
.
location
==
LOCATION_GRAVE
)
&&
(
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
)))
return
data
.
race
;
if
(
temp
.
race
!=
0xffffffff
)
return
temp
.
race
;
effect_set
effects
;
...
...
ocgcore/libcard.cpp
View file @
97fd88a8
...
...
@@ -95,7 +95,7 @@ int32 scriptlib::card_get_origin_level(lua_State *L) {
check_param_count
(
L
,
1
);
check_param
(
L
,
PARAM_TYPE_CARD
,
1
);
card
*
pcard
=
*
(
card
**
)
lua_touserdata
(
L
,
1
);
if
(
pcard
->
data
.
type
&
TYPE_XYZ
)
if
(
pcard
->
data
.
type
&
TYPE_XYZ
||
pcard
->
single_effect
.
count
(
0x14d72c34
)
>
0
||
(
pcard
->
current
.
location
!=
LOCATION_MZONE
&&
pcard
->
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
))
)
lua_pushinteger
(
L
,
0
);
else
lua_pushinteger
(
L
,
pcard
->
data
.
level
);
...
...
@@ -146,7 +146,10 @@ int32 scriptlib::card_get_origin_attribute(lua_State *L) {
check_param_count
(
L
,
1
);
check_param
(
L
,
PARAM_TYPE_CARD
,
1
);
card
*
pcard
=
*
(
card
**
)
lua_touserdata
(
L
,
1
);
lua_pushinteger
(
L
,
pcard
->
data
.
attribute
);
if
(
pcard
->
single_effect
.
count
(
0x14d72c34
)
>
0
||
(
pcard
->
current
.
location
!=
LOCATION_MZONE
&&
pcard
->
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
)))
lua_pushinteger
(
L
,
0
);
else
lua_pushinteger
(
L
,
pcard
->
data
.
attribute
);
return
1
;
}
int32
scriptlib
::
card_get_race
(
lua_State
*
L
)
{
...
...
@@ -160,7 +163,10 @@ int32 scriptlib::card_get_origin_race(lua_State *L) {
check_param_count
(
L
,
1
);
check_param
(
L
,
PARAM_TYPE_CARD
,
1
);
card
*
pcard
=
*
(
card
**
)
lua_touserdata
(
L
,
1
);
lua_pushinteger
(
L
,
pcard
->
data
.
race
);
if
(
pcard
->
single_effect
.
count
(
0x14d72c34
)
>
0
||
(
pcard
->
current
.
location
!=
LOCATION_MZONE
&&
pcard
->
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
)))
lua_pushinteger
(
L
,
0
);
else
lua_pushinteger
(
L
,
pcard
->
data
.
race
);
return
1
;
}
int32
scriptlib
::
card_get_attack
(
lua_State
*
L
)
{
...
...
@@ -181,7 +187,10 @@ int32 scriptlib::card_get_text_attack(lua_State *L) {
check_param_count
(
L
,
1
);
check_param
(
L
,
PARAM_TYPE_CARD
,
1
);
card
*
pcard
=
*
(
card
**
)
lua_touserdata
(
L
,
1
);
lua_pushinteger
(
L
,
pcard
->
data
.
attack
);
if
(
pcard
->
single_effect
.
count
(
0x14d72c34
)
>
0
||
(
pcard
->
current
.
location
!=
LOCATION_MZONE
&&
pcard
->
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
)))
lua_pushinteger
(
L
,
0
);
else
lua_pushinteger
(
L
,
pcard
->
data
.
attack
);
return
1
;
}
int32
scriptlib
::
card_get_defence
(
lua_State
*
L
)
{
...
...
@@ -202,7 +211,10 @@ int32 scriptlib::card_get_text_defence(lua_State *L) {
check_param_count
(
L
,
1
);
check_param
(
L
,
PARAM_TYPE_CARD
,
1
);
card
*
pcard
=
*
(
card
**
)
lua_touserdata
(
L
,
1
);
lua_pushinteger
(
L
,
pcard
->
data
.
defence
);
if
(
pcard
->
single_effect
.
count
(
0x14d72c34
)
>
0
||
(
pcard
->
current
.
location
!=
LOCATION_MZONE
&&
pcard
->
data
.
type
&
(
TYPE_SPELL
+
TYPE_TRAP
)))
lua_pushinteger
(
L
,
0
);
else
lua_pushinteger
(
L
,
pcard
->
data
.
defence
);
return
1
;
}
int32
scriptlib
::
card_get_previous_code_onfield
(
lua_State
*
L
)
{
...
...
@@ -1509,7 +1521,7 @@ int32 scriptlib::card_is_level_below(lua_State *L) {
check_param
(
L
,
PARAM_TYPE_CARD
,
1
);
card
*
pcard
=
*
(
card
**
)
lua_touserdata
(
L
,
1
);
uint32
lvl
=
lua_tointeger
(
L
,
2
);
if
((
pcard
->
data
.
type
&
TYPE_XYZ
)
||
(
!
(
pcard
->
data
.
type
&
TYPE_MONSTER
)
&&
!
(
pcard
->
current
.
location
&
LOCATION_MZONE
)))
if
((
pcard
->
data
.
type
&
TYPE_XYZ
)
||
(
!
(
pcard
->
data
.
type
&
TYPE_MONSTER
)
&&
!
(
pcard
->
current
.
location
&
LOCATION_MZONE
))
||
pcard
->
single_effect
.
count
(
0x14d72c34
)
>
0
)
lua_pushboolean
(
L
,
0
);
else
lua_pushboolean
(
L
,
pcard
->
get_level
()
<=
lvl
);
...
...
@@ -1520,7 +1532,7 @@ int32 scriptlib::card_is_level_above(lua_State *L) {
check_param
(
L
,
PARAM_TYPE_CARD
,
1
);
card
*
pcard
=
*
(
card
**
)
lua_touserdata
(
L
,
1
);
uint32
lvl
=
lua_tointeger
(
L
,
2
);
if
((
pcard
->
data
.
type
&
TYPE_XYZ
)
||
(
!
(
pcard
->
data
.
type
&
TYPE_MONSTER
)
&&
!
(
pcard
->
current
.
location
&
LOCATION_MZONE
)))
if
((
pcard
->
data
.
type
&
TYPE_XYZ
)
||
(
!
(
pcard
->
data
.
type
&
TYPE_MONSTER
)
&&
!
(
pcard
->
current
.
location
&
LOCATION_MZONE
))
||
pcard
->
single_effect
.
count
(
0x14d72c34
)
>
0
)
lua_pushboolean
(
L
,
0
);
else
lua_pushboolean
(
L
,
pcard
->
get_level
()
>=
lvl
);
...
...
script/c81210420.lua
View file @
97fd88a8
...
...
@@ -18,7 +18,7 @@ function c81210420.filter(c)
return
not
c
:
IsType
(
TYPE_TOKEN
)
end
function
c81210420
.
spfilter
(
c
,
e
,
tp
)
return
c
:
IsType
(
TYPE_SPELL
+
TYPE_TRAP
)
and
c
:
IsCanBeSpecialSummoned
(
e
,
0
,
tp
,
true
,
false
,
POS_FACEDOWN
)
return
c
:
IsType
(
TYPE_SPELL
+
TYPE_TRAP
)
and
Duel
.
IsPlayerCanSpecialSummonMonster
(
tp
,
c
:
GetCode
(),
0
,
0x11
,
0
,
0
,
0
,
0
,
0
)
end
function
c81210420
.
target
(
e
,
tp
,
eg
,
ep
,
ev
,
re
,
r
,
rp
,
chk
)
if
chk
==
0
then
return
Duel
.
IsExistingMatchingCard
(
c81210420
.
filter
,
tp
,
LOCATION_MZONE
,
0
,
1
,
nil
)
...
...
@@ -43,23 +43,39 @@ function c81210420.activate(e,tp,eg,ep,ev,re,r,rp)
tc
:
ClearEffectRelation
()
end
end
local
tg
=
sg
:
GetFirst
()
while
tg
do
local
e1
=
Effect
.
CreateEffect
(
tg
)
e1
:
SetType
(
EFFECT_TYPE_SINGLE
)
e1
:
SetCode
(
EFFECT_CHANGE_TYPE
)
e1
:
SetProperty
(
EFFECT_FLAG_CANNOT_DISABLE
)
e1
:
SetValue
(
TYPE_NORMAL
+
TYPE_MONSTER
)
e1
:
SetReset
(
RESET_EVENT
+
0x47c0000
)
tg
:
RegisterEffect
(
e1
,
true
)
local
e2
=
e1
:
Clone
()
e2
:
SetCode
(
EFFECT_CHANGE_RACE
)
e2
:
SetValue
(
0
)
tg
:
RegisterEffect
(
e2
,
true
)
local
e3
=
e1
:
Clone
()
e3
:
SetCode
(
EFFECT_CHANGE_ATTRIBUTE
)
e3
:
SetValue
(
0
)
tg
:
RegisterEffect
(
e3
,
true
)
local
e4
=
e1
:
Clone
()
e4
:
SetCode
(
EFFECT_SET_BASE_ATTACK
)
e4
:
SetValue
(
0
)
tg
:
RegisterEffect
(
e4
,
true
)
local
e5
=
e1
:
Clone
()
e5
:
SetCode
(
EFFECT_SET_BASE_DEFENCE
)
e5
:
SetValue
(
0
)
tg
:
RegisterEffect
(
e5
,
true
)
tg
:
RegisterFlagEffect
(
81210420
,
RESET_EVENT
+
0x47c0000
+
RESET_PHASE
+
PHASE_BATTLE
,
0
,
1
)
tg
=
sg
:
GetNext
()
end
Duel
.
SpecialSummon
(
sg
,
0
,
tp
,
tp
,
true
,
false
,
POS_FACEDOWN_DEFENCE
)
Duel
.
ConfirmCards
(
1
-
tp
,
sg
)
sg
:
AddCard
(
tc
)
Duel
.
ShuffleSetCard
(
sg
)
sg
:
RemoveCard
(
tc
)
local
sc
=
sg
:
GetFirst
()
sc
:
RegisterFlagEffect
(
81210420
,
RESET_EVENT
+
0x1fe0000
+
RESET_PHASE
+
PHASE_BATTLE
,
0
,
1
)
local
e1
=
Effect
.
CreateEffect
(
e
:
GetHandler
())
e1
:
SetType
(
EFFECT_TYPE_SINGLE
)
e1
:
SetCode
(
EFFECT_CHANGE_TYPE
)
e1
:
SetValue
(
TYPE_NORMAL
+
TYPE_MONSTER
)
e1
:
SetReset
(
RESET_EVENT
+
0x1fc0000
)
sc
:
RegisterEffect
(
e1
)
sc
=
sg
:
GetNext
()
sc
:
RegisterFlagEffect
(
81210420
,
RESET_EVENT
+
0x1fe0000
+
RESET_PHASE
+
PHASE_BATTLE
,
0
,
1
)
local
e2
=
e1
:
Clone
()
sc
:
RegisterEffect
(
e2
)
sg
:
KeepAlive
()
local
de
=
Effect
.
CreateEffect
(
e
:
GetHandler
())
de
:
SetType
(
EFFECT_TYPE_FIELD
+
EFFECT_TYPE_CONTINUOUS
)
...
...
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