Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro-core
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
List
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
nanahira
ygopro-core
Commits
b50a150a
Commit
b50a150a
authored
Feb 15, 2025
by
wind2009
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into develop-8888
parents
5211263b
5e1b16f9
Changes
9
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
231 additions
and
319 deletions
+231
-319
card.cpp
card.cpp
+105
-105
effect.cpp
effect.cpp
+5
-5
effect.h
effect.h
+0
-2
effectset.h
effectset.h
+2
-92
field.cpp
field.cpp
+32
-32
libcard.cpp
libcard.cpp
+5
-5
libduel.cpp
libduel.cpp
+3
-3
operations.cpp
operations.cpp
+53
-49
processor.cpp
processor.cpp
+26
-26
No files found.
card.cpp
View file @
b50a150a
This diff is collapsed.
Click to expand it.
effect.cpp
View file @
b50a150a
...
@@ -219,7 +219,7 @@ int32_t effect::get_required_handorset_effects(effect_set* eset, uint8_t playeri
...
@@ -219,7 +219,7 @@ int32_t effect::get_required_handorset_effects(effect_set* eset, uint8_t playeri
uint8_t
op
=
pduel
->
game_field
->
core
.
reason_player
;
uint8_t
op
=
pduel
->
game_field
->
core
.
reason_player
;
pduel
->
game_field
->
core
.
reason_player
=
playerid
;
pduel
->
game_field
->
core
.
reason_player
=
playerid
;
pduel
->
game_field
->
save_lp_cost
();
pduel
->
game_field
->
save_lp_cost
();
for
(
int32_t
i
=
0
;
i
<
tmp_eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
tmp_eset
.
size
();
++
i
)
{
auto
peffect
=
tmp_eset
[
i
];
auto
peffect
=
tmp_eset
[
i
];
if
(
peffect
->
check_count_limit
(
playerid
))
{
if
(
peffect
->
check_count_limit
(
playerid
))
{
pduel
->
game_field
->
core
.
reason_effect
=
peffect
;
pduel
->
game_field
->
core
.
reason_effect
=
peffect
;
...
@@ -235,7 +235,7 @@ int32_t effect::get_required_handorset_effects(effect_set* eset, uint8_t playeri
...
@@ -235,7 +235,7 @@ int32_t effect::get_required_handorset_effects(effect_set* eset, uint8_t playeri
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_EFFECT
);
if
(
pduel
->
lua
->
check_condition
(
peffect
->
cost
,
10
))
{
if
(
pduel
->
lua
->
check_condition
(
peffect
->
cost
,
10
))
{
available
=
2
;
available
=
2
;
eset
->
add_item
(
peffect
);
eset
->
push_back
(
peffect
);
}
}
}
}
}
}
...
@@ -381,7 +381,7 @@ int32_t effect::is_activateable(uint8_t playerid, const tevent& e, int32_t negle
...
@@ -381,7 +381,7 @@ int32_t effect::is_activateable(uint8_t playerid, const tevent& e, int32_t negle
int32_t
effect
::
is_action_check
(
uint8_t
playerid
)
{
int32_t
effect
::
is_action_check
(
uint8_t
playerid
)
{
effect_set
eset
;
effect_set
eset
;
pduel
->
game_field
->
filter_player_effect
(
playerid
,
EFFECT_CANNOT_ACTIVATE
,
&
eset
);
pduel
->
game_field
->
filter_player_effect
(
playerid
,
EFFECT_CANNOT_ACTIVATE
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
playerid
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
playerid
,
PARAM_TYPE_INT
);
if
(
eset
[
i
]
->
check_value_condition
(
2
))
if
(
eset
[
i
]
->
check_value_condition
(
2
))
...
@@ -389,7 +389,7 @@ int32_t effect::is_action_check(uint8_t playerid) {
...
@@ -389,7 +389,7 @@ int32_t effect::is_action_check(uint8_t playerid) {
}
}
eset
.
clear
();
eset
.
clear
();
pduel
->
game_field
->
filter_player_effect
(
playerid
,
EFFECT_ACTIVATE_COST
,
&
eset
);
pduel
->
game_field
->
filter_player_effect
(
playerid
,
EFFECT_ACTIVATE_COST
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
pduel
->
lua
->
add_param
(
eset
[
i
],
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
eset
[
i
],
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
playerid
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
playerid
,
PARAM_TYPE_INT
);
...
@@ -577,7 +577,7 @@ int32_t effect::is_player_effect_target(card* pcard) {
...
@@ -577,7 +577,7 @@ int32_t effect::is_player_effect_target(card* pcard) {
}
}
int32_t
effect
::
is_immuned
(
card
*
pcard
)
{
int32_t
effect
::
is_immuned
(
card
*
pcard
)
{
const
effect_set_v
&
effects
=
pcard
->
immune_effect
;
const
effect_set_v
&
effects
=
pcard
->
immune_effect
;
for
(
int32_t
i
=
0
;
i
<
effects
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
effects
.
size
();
++
i
)
{
effect
*
peffect
=
effects
[
i
];
effect
*
peffect
=
effects
[
i
];
if
(
peffect
->
is_available
()
&&
peffect
->
value
)
{
if
(
peffect
->
is_available
()
&&
peffect
->
value
)
{
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
this
,
PARAM_TYPE_EFFECT
);
...
...
effect.h
View file @
b50a150a
...
@@ -18,8 +18,6 @@ class duel;
...
@@ -18,8 +18,6 @@ class duel;
class
group
;
class
group
;
class
effect
;
class
effect
;
struct
tevent
;
struct
tevent
;
struct
effect_set
;
struct
effect_set_v
;
enum
effect_flag
:
uint64_t
;
enum
effect_flag
:
uint64_t
;
enum
effect_flag2
:
uint64_t
;
enum
effect_flag2
:
uint64_t
;
enum
effect_category
:
uint64_t
;
enum
effect_category
:
uint64_t
;
...
...
effectset.h
View file @
b50a150a
...
@@ -8,7 +8,6 @@
...
@@ -8,7 +8,6 @@
#ifndef EFFECTSET_H_
#ifndef EFFECTSET_H_
#define EFFECTSET_H_
#define EFFECTSET_H_
#include <array>
#include <vector>
#include <vector>
#include <algorithm>
#include <algorithm>
...
@@ -16,96 +15,7 @@ class effect;
...
@@ -16,96 +15,7 @@ class effect;
bool
effect_sort_id
(
const
effect
*
e1
,
const
effect
*
e2
);
bool
effect_sort_id
(
const
effect
*
e1
,
const
effect
*
e2
);
// std::array<effect*, 64>
using
effect_set
=
std
::
vector
<
effect
*>
;
struct
effect_set
{
using
effect_set_v
=
effect_set
;
void
add_item
(
effect
*
peffect
)
{
if
(
count
>=
64
)
return
;
container
[
count
++
]
=
peffect
;
}
void
remove_item
(
int
index
)
{
if
(
index
<
0
||
index
>=
count
)
return
;
for
(
int
i
=
index
;
i
<
count
-
1
;
++
i
)
container
[
i
]
=
container
[
i
+
1
];
--
count
;
}
void
clear
()
{
count
=
0
;
}
int
size
()
const
{
return
count
;
}
void
sort
()
{
if
(
count
<
2
)
return
;
std
::
sort
(
container
.
begin
(),
container
.
begin
()
+
count
,
effect_sort_id
);
}
effect
*
const
&
get_last
()
const
{
assert
(
count
);
return
container
[
count
-
1
];
}
effect
*&
get_last
()
{
assert
(
count
);
return
container
[
count
-
1
];
}
effect
*
const
&
operator
[]
(
int
index
)
const
{
return
container
[
index
];
}
effect
*&
operator
[]
(
int
index
)
{
return
container
[
index
];
}
effect
*
const
&
at
(
int
index
)
const
{
return
container
[
index
];
}
effect
*&
at
(
int
index
)
{
return
container
[
index
];
}
private:
std
::
array
<
effect
*
,
64
>
container
{
nullptr
};
int
count
{
0
};
};
struct
effect_set_v
{
void
add_item
(
effect
*
peffect
)
{
container
.
push_back
(
peffect
);
}
void
remove_item
(
int
index
)
{
if
(
index
<
0
||
index
>=
(
int
)
container
.
size
())
return
;
container
.
erase
(
container
.
begin
()
+
index
);
}
void
clear
()
{
container
.
clear
();
}
int
size
()
const
{
return
(
int
)
container
.
size
();
}
void
sort
()
{
std
::
sort
(
container
.
begin
(),
container
.
end
(),
effect_sort_id
);
}
effect
*
const
&
get_last
()
const
{
assert
(
container
.
size
());
return
container
.
back
();
}
effect
*&
get_last
()
{
assert
(
container
.
size
());
return
container
.
back
();
}
effect
*
const
&
operator
[]
(
int
index
)
const
{
return
container
[
index
];
}
effect
*&
operator
[]
(
int
index
)
{
return
container
[
index
];
}
effect
*
const
&
at
(
int
index
)
const
{
return
container
[
index
];
}
effect
*&
at
(
int
index
)
{
return
container
[
index
];
}
private:
std
::
vector
<
effect
*>
container
;
};
#endif //EFFECTSET_H_
#endif //EFFECTSET_H_
field.cpp
View file @
b50a150a
This diff is collapsed.
Click to expand it.
libcard.cpp
View file @
b50a150a
...
@@ -196,7 +196,7 @@ int32_t scriptlib::card_get_fusion_code(lua_State *L) {
...
@@ -196,7 +196,7 @@ int32_t scriptlib::card_get_fusion_code(lua_State *L) {
return
count
;
return
count
;
effect_set
eset
;
effect_set
eset
;
pcard
->
filter_effect
(
EFFECT_ADD_FUSION_CODE
,
&
eset
);
pcard
->
filter_effect
(
EFFECT_ADD_FUSION_CODE
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
lua_pushinteger
(
L
,
eset
[
i
]
->
get_value
(
pcard
));
lua_pushinteger
(
L
,
eset
[
i
]
->
get_value
(
pcard
));
return
count
+
eset
.
size
();
return
count
+
eset
.
size
();
}
}
...
@@ -213,7 +213,7 @@ int32_t scriptlib::card_get_link_code(lua_State *L) {
...
@@ -213,7 +213,7 @@ int32_t scriptlib::card_get_link_code(lua_State *L) {
}
}
effect_set
eset
;
effect_set
eset
;
pcard
->
filter_effect
(
EFFECT_ADD_LINK_CODE
,
&
eset
);
pcard
->
filter_effect
(
EFFECT_ADD_LINK_CODE
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
lua_pushinteger
(
L
,
eset
[
i
]
->
get_value
(
pcard
));
lua_pushinteger
(
L
,
eset
[
i
]
->
get_value
(
pcard
));
return
count
+
eset
.
size
();
return
count
+
eset
.
size
();
}
}
...
@@ -231,7 +231,7 @@ int32_t scriptlib::card_is_fusion_code(lua_State *L) {
...
@@ -231,7 +231,7 @@ int32_t scriptlib::card_is_fusion_code(lua_State *L) {
fcode
.
insert
(
code1
);
fcode
.
insert
(
code1
);
if
(
code2
)
if
(
code2
)
fcode
.
insert
(
code2
);
fcode
.
insert
(
code2
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
fcode
.
insert
(
eset
[
i
]
->
get_value
(
pcard
));
fcode
.
insert
(
eset
[
i
]
->
get_value
(
pcard
));
uint32_t
count
=
lua_gettop
(
L
)
-
1
;
uint32_t
count
=
lua_gettop
(
L
)
-
1
;
uint32_t
result
=
FALSE
;
uint32_t
result
=
FALSE
;
...
@@ -261,7 +261,7 @@ int32_t scriptlib::card_is_link_code(lua_State *L) {
...
@@ -261,7 +261,7 @@ int32_t scriptlib::card_is_link_code(lua_State *L) {
fcode
.
insert
(
code1
);
fcode
.
insert
(
code1
);
if
(
code2
)
if
(
code2
)
fcode
.
insert
(
code2
);
fcode
.
insert
(
code2
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
fcode
.
insert
(
eset
[
i
]
->
get_value
(
pcard
));
fcode
.
insert
(
eset
[
i
]
->
get_value
(
pcard
));
uint32_t
count
=
lua_gettop
(
L
)
-
1
;
uint32_t
count
=
lua_gettop
(
L
)
-
1
;
uint32_t
result
=
FALSE
;
uint32_t
result
=
FALSE
;
...
@@ -1991,7 +1991,7 @@ int32_t scriptlib::card_is_has_effect(lua_State *L) {
...
@@ -1991,7 +1991,7 @@ int32_t scriptlib::card_is_has_effect(lua_State *L) {
check_player
=
PLAYER_NONE
;
check_player
=
PLAYER_NONE
;
}
}
int32_t
size
=
0
;
int32_t
size
=
0
;
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
if
(
check_player
==
PLAYER_NONE
||
eset
[
i
]
->
check_count_limit
(
check_player
))
{
if
(
check_player
==
PLAYER_NONE
||
eset
[
i
]
->
check_count_limit
(
check_player
))
{
interpreter
::
effect2value
(
L
,
eset
[
i
]);
interpreter
::
effect2value
(
L
,
eset
[
i
]);
++
size
;
++
size
;
...
...
libduel.cpp
View file @
b50a150a
...
@@ -399,7 +399,7 @@ int32_t scriptlib::duel_get_flag_effect_label(lua_State *L) {
...
@@ -399,7 +399,7 @@ int32_t scriptlib::duel_get_flag_effect_label(lua_State *L) {
lua_pushnil
(
L
);
lua_pushnil
(
L
);
return
1
;
return
1
;
}
}
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
lua_pushinteger
(
L
,
eset
[
i
]
->
label
.
size
()
?
eset
[
i
]
->
label
[
0
]
:
0
);
lua_pushinteger
(
L
,
eset
[
i
]
->
label
.
size
()
?
eset
[
i
]
->
label
[
0
]
:
0
);
return
eset
.
size
();
return
eset
.
size
();
}
}
...
@@ -1475,7 +1475,7 @@ int32_t scriptlib::duel_is_environment(lua_State *L) {
...
@@ -1475,7 +1475,7 @@ int32_t scriptlib::duel_is_environment(lua_State *L) {
effect_set
eset
;
effect_set
eset
;
pduel
->
game_field
->
filter_field_effect
(
EFFECT_CHANGE_ENVIRONMENT
,
&
eset
);
pduel
->
game_field
->
filter_field_effect
(
EFFECT_CHANGE_ENVIRONMENT
,
&
eset
);
if
(
eset
.
size
())
{
if
(
eset
.
size
())
{
effect
*
peffect
=
eset
.
get_last
();
effect
*
peffect
=
eset
.
back
();
if
(
code
==
(
uint32_t
)
peffect
->
get_value
()
&&
(
playerid
==
peffect
->
get_handler_player
()
||
playerid
==
PLAYER_ALL
))
if
(
code
==
(
uint32_t
)
peffect
->
get_value
()
&&
(
playerid
==
peffect
->
get_handler_player
()
||
playerid
==
PLAYER_ALL
))
ret
=
1
;
ret
=
1
;
}
}
...
@@ -4533,7 +4533,7 @@ int32_t scriptlib::duel_is_player_affected_by_effect(lua_State *L) {
...
@@ -4533,7 +4533,7 @@ int32_t scriptlib::duel_is_player_affected_by_effect(lua_State *L) {
effect_set
eset
;
effect_set
eset
;
pduel
->
game_field
->
filter_player_effect
(
playerid
,
code
,
&
eset
);
pduel
->
game_field
->
filter_player_effect
(
playerid
,
code
,
&
eset
);
int32_t
size
=
0
;
int32_t
size
=
0
;
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
if
(
eset
[
i
]
->
check_count_limit
(
playerid
))
{
if
(
eset
[
i
]
->
check_count_limit
(
playerid
))
{
interpreter
::
effect2value
(
L
,
eset
[
i
]);
interpreter
::
effect2value
(
L
,
eset
[
i
]);
++
size
;
++
size
;
...
...
operations.cpp
View file @
b50a150a
This diff is collapsed.
Click to expand it.
processor.cpp
View file @
b50a150a
...
@@ -1233,7 +1233,7 @@ int32_t field::process_phase_event(int16_t step, int32_t phase) {
...
@@ -1233,7 +1233,7 @@ int32_t field::process_phase_event(int16_t step, int32_t phase) {
effect_set
eset
;
effect_set
eset
;
filter_player_effect
(
infos
.
turn_player
,
EFFECT_HAND_LIMIT
,
&
eset
);
filter_player_effect
(
infos
.
turn_player
,
EFFECT_HAND_LIMIT
,
&
eset
);
if
(
eset
.
size
())
if
(
eset
.
size
())
limit
=
eset
.
get_last
()
->
get_value
();
limit
=
eset
.
back
()
->
get_value
();
int32_t
hd
=
(
int32_t
)
player
[
infos
.
turn_player
].
list_hand
.
size
();
int32_t
hd
=
(
int32_t
)
player
[
infos
.
turn_player
].
list_hand
.
size
();
if
(
hd
<=
limit
)
{
if
(
hd
<=
limit
)
{
core
.
units
.
begin
()
->
step
=
24
;
core
.
units
.
begin
()
->
step
=
24
;
...
@@ -2148,7 +2148,7 @@ int32_t field::process_idle_command(uint16_t step) {
...
@@ -2148,7 +2148,7 @@ int32_t field::process_idle_command(uint16_t step) {
core
.
spsummonable_cards
.
clear
();
core
.
spsummonable_cards
.
clear
();
effect_set
eset
;
effect_set
eset
;
filter_field_effect
(
EFFECT_SPSUMMON_PROC
,
&
eset
);
filter_field_effect
(
EFFECT_SPSUMMON_PROC
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
card
*
pcard
=
eset
[
i
]
->
get_handler
();
card
*
pcard
=
eset
[
i
]
->
get_handler
();
if
(
!
eset
[
i
]
->
check_count_limit
(
pcard
->
current
.
controler
))
if
(
!
eset
[
i
]
->
check_count_limit
(
pcard
->
current
.
controler
))
continue
;
continue
;
...
@@ -2157,7 +2157,7 @@ int32_t field::process_idle_command(uint16_t step) {
...
@@ -2157,7 +2157,7 @@ int32_t field::process_idle_command(uint16_t step) {
}
}
eset
.
clear
();
eset
.
clear
();
filter_field_effect
(
EFFECT_SPSUMMON_PROC_G
,
&
eset
);
filter_field_effect
(
EFFECT_SPSUMMON_PROC_G
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
card
*
pcard
=
eset
[
i
]
->
get_handler
();
card
*
pcard
=
eset
[
i
]
->
get_handler
();
if
(
!
eset
[
i
]
->
check_count_limit
(
infos
.
turn_player
))
if
(
!
eset
[
i
]
->
check_count_limit
(
infos
.
turn_player
))
continue
;
continue
;
...
@@ -2526,7 +2526,7 @@ int32_t field::process_battle_command(uint16_t step) {
...
@@ -2526,7 +2526,7 @@ int32_t field::process_battle_command(uint16_t step) {
effect_set
eset
;
effect_set
eset
;
filter_player_effect
(
infos
.
turn_player
,
EFFECT_ATTACK_COST
,
&
eset
,
FALSE
);
filter_player_effect
(
infos
.
turn_player
,
EFFECT_ATTACK_COST
,
&
eset
,
FALSE
);
core
.
attacker
->
filter_effect
(
EFFECT_ATTACK_COST
,
&
eset
);
core
.
attacker
->
filter_effect
(
EFFECT_ATTACK_COST
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
if
(
eset
[
i
]
->
operation
)
{
if
(
eset
[
i
]
->
operation
)
{
core
.
attack_cancelable
=
FALSE
;
core
.
attack_cancelable
=
FALSE
;
core
.
sub_solving_event
.
push_back
(
nil_event
);
core
.
sub_solving_event
.
push_back
(
nil_event
);
...
@@ -3398,7 +3398,7 @@ void field::calculate_battle_damage(effect** pdamchange, card** preason_card, ui
...
@@ -3398,7 +3398,7 @@ void field::calculate_battle_damage(effect** pdamchange, card** preason_card, ui
if
(
eset
.
size
())
{
if
(
eset
.
size
())
{
pierce
=
true
;
pierce
=
true
;
uint8_t
dp
[
2
]
=
{};
uint8_t
dp
[
2
]
=
{};
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
dp
[
1
-
eset
[
i
]
->
get_handler_player
()]
=
1
;
dp
[
1
-
eset
[
i
]
->
get_handler_player
()]
=
1
;
if
(
dp
[
0
])
if
(
dp
[
0
])
core
.
battle_damage
[
0
]
=
attacker_value
-
defender_value
;
core
.
battle_damage
[
0
]
=
attacker_value
-
defender_value
;
...
@@ -3406,7 +3406,7 @@ void field::calculate_battle_damage(effect** pdamchange, card** preason_card, ui
...
@@ -3406,7 +3406,7 @@ void field::calculate_battle_damage(effect** pdamchange, card** preason_card, ui
core
.
battle_damage
[
1
]
=
attacker_value
-
defender_value
;
core
.
battle_damage
[
1
]
=
attacker_value
-
defender_value
;
bool
double_damage
=
false
;
bool
double_damage
=
false
;
//bool half_damage = false;
//bool half_damage = false;
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
if
(
eset
[
i
]
->
get_value
()
==
DOUBLE_DAMAGE
)
if
(
eset
[
i
]
->
get_value
()
==
DOUBLE_DAMAGE
)
double_damage
=
true
;
double_damage
=
true
;
//if(eset[i]->get_value() == HALF_DAMAGE)
//if(eset[i]->get_value() == HALF_DAMAGE)
...
@@ -3491,12 +3491,12 @@ void field::calculate_battle_damage(effect** pdamchange, card** preason_card, ui
...
@@ -3491,12 +3491,12 @@ void field::calculate_battle_damage(effect** pdamchange, card** preason_card, ui
core
.
attack_target
->
filter_effect
(
EFFECT_CHANGE_INVOLVING_BATTLE_DAMAGE
,
&
change_effects
,
FALSE
);
core
.
attack_target
->
filter_effect
(
EFFECT_CHANGE_INVOLVING_BATTLE_DAMAGE
,
&
change_effects
,
FALSE
);
filter_player_effect
(
pa
,
EFFECT_CHANGE_BATTLE_DAMAGE
,
&
change_effects
,
FALSE
);
filter_player_effect
(
pa
,
EFFECT_CHANGE_BATTLE_DAMAGE
,
&
change_effects
,
FALSE
);
filter_player_effect
(
1
-
pa
,
EFFECT_CHANGE_BATTLE_DAMAGE
,
&
change_effects
,
FALSE
);
filter_player_effect
(
1
-
pa
,
EFFECT_CHANGE_BATTLE_DAMAGE
,
&
change_effects
,
FALSE
);
change_effects
.
sort
(
);
std
::
sort
(
change_effects
.
begin
(),
change_effects
.
end
(),
effect_sort_id
);
for
(
uint8_t
p
=
0
;
p
<
2
;
++
p
)
{
for
(
uint8_t
p
=
0
;
p
<
2
;
++
p
)
{
bool
double_dam
=
false
;
bool
double_dam
=
false
;
bool
half_dam
=
false
;
bool
half_dam
=
false
;
int32_t
dam_value
=
-
1
;
int32_t
dam_value
=
-
1
;
for
(
int32_t
i
=
0
;
i
<
change_effects
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
change_effects
.
size
();
++
i
)
{
int32_t
val
=
-
1
;
int32_t
val
=
-
1
;
if
(
!
change_effects
[
i
]
->
is_flag
(
EFFECT_FLAG_PLAYER_TARGET
))
{
if
(
!
change_effects
[
i
]
->
is_flag
(
EFFECT_FLAG_PLAYER_TARGET
))
{
pduel
->
lua
->
add_param
(
p
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
p
,
PARAM_TYPE_INT
);
...
@@ -3612,13 +3612,13 @@ void field::calculate_battle_damage(effect** pdamchange, card** preason_card, ui
...
@@ -3612,13 +3612,13 @@ void field::calculate_battle_damage(effect** pdamchange, card** preason_card, ui
dam_card
->
filter_effect
(
EFFECT_CHANGE_INVOLVING_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
dam_card
->
filter_effect
(
EFFECT_CHANGE_INVOLVING_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
filter_player_effect
(
damaged_player
,
EFFECT_CHANGE_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
filter_player_effect
(
damaged_player
,
EFFECT_CHANGE_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
filter_player_effect
(
1
-
damaged_player
,
EFFECT_CHANGE_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
filter_player_effect
(
1
-
damaged_player
,
EFFECT_CHANGE_BATTLE_DAMAGE
,
&
eset
,
FALSE
);
eset
.
sort
(
);
std
::
sort
(
eset
.
begin
(),
eset
.
end
(),
effect_sort_id
);
for
(
uint8_t
p
=
0
;
p
<
2
;
++
p
)
{
for
(
uint8_t
p
=
0
;
p
<
2
;
++
p
)
{
bool
double_dam
=
false
;
bool
double_dam
=
false
;
bool
half_dam
=
false
;
bool
half_dam
=
false
;
int32_t
dam_value
=
-
1
;
int32_t
dam_value
=
-
1
;
int32_t
current_min
=
INT32_MAX
;
int32_t
current_min
=
INT32_MAX
;
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
int32_t
val
=
-
1
;
int32_t
val
=
-
1
;
if
(
!
eset
[
i
]
->
is_flag
(
EFFECT_FLAG_PLAYER_TARGET
))
{
if
(
!
eset
[
i
]
->
is_flag
(
EFFECT_FLAG_PLAYER_TARGET
))
{
pduel
->
lua
->
add_param
(
p
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
p
,
PARAM_TYPE_INT
);
...
@@ -4006,7 +4006,7 @@ int32_t field::add_chain(uint16_t step) {
...
@@ -4006,7 +4006,7 @@ int32_t field::add_chain(uint16_t step) {
card
*
phandler
=
peffect
->
get_handler
();
card
*
phandler
=
peffect
->
get_handler
();
effect_set
eset
;
effect_set
eset
;
filter_player_effect
(
clit
.
triggering_player
,
EFFECT_ACTIVATE_COST
,
&
eset
);
filter_player_effect
(
clit
.
triggering_player
,
EFFECT_ACTIVATE_COST
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
pduel
->
lua
->
add_param
(
eset
[
i
],
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
eset
[
i
],
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
clit
.
triggering_effect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
clit
.
triggering_effect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
clit
.
triggering_player
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
clit
.
triggering_player
,
PARAM_TYPE_INT
);
...
@@ -4177,7 +4177,7 @@ int32_t field::add_chain(uint16_t step) {
...
@@ -4177,7 +4177,7 @@ int32_t field::add_chain(uint16_t step) {
auto
peffect
=
clit
.
triggering_effect
;
auto
peffect
=
clit
.
triggering_effect
;
auto
playerid
=
clit
.
triggering_player
;
auto
playerid
=
clit
.
triggering_player
;
int32_t
ceffect_unique_id
=
0
;
int32_t
ceffect_unique_id
=
0
;
for
(
int32_t
i
=
0
;
i
<
clit
.
required_handorset_effects
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
clit
.
required_handorset_effects
.
size
();
++
i
)
{
pduel
->
lua
->
add_param
(
peffect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
peffect
,
PARAM_TYPE_EFFECT
);
pduel
->
lua
->
add_param
(
playerid
,
PARAM_TYPE_INT
);
pduel
->
lua
->
add_param
(
playerid
,
PARAM_TYPE_INT
);
auto
id
=
clit
.
required_handorset_effects
[
i
]
->
get_value
(
2
);
auto
id
=
clit
.
required_handorset_effects
[
i
]
->
get_value
(
2
);
...
@@ -4196,7 +4196,7 @@ int32_t field::add_chain(uint16_t step) {
...
@@ -4196,7 +4196,7 @@ int32_t field::add_chain(uint16_t step) {
}
}
}
}
core
.
select_options
.
clear
();
core
.
select_options
.
clear
();
for
(
int32_t
i
=
0
;
i
<
clit
.
required_handorset_effects
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
clit
.
required_handorset_effects
.
size
();
++
i
)
{
core
.
select_options
.
push_back
(
clit
.
required_handorset_effects
[
i
]
->
description
);
core
.
select_options
.
push_back
(
clit
.
required_handorset_effects
[
i
]
->
description
);
}
}
add_process
(
PROCESSOR_SELECT_OPTION
,
0
,
0
,
0
,
clit
.
triggering_player
,
0
);
add_process
(
PROCESSOR_SELECT_OPTION
,
0
,
0
,
0
,
clit
.
triggering_player
,
0
);
...
@@ -4623,21 +4623,21 @@ void field::refresh_location_info_instant() {
...
@@ -4623,21 +4623,21 @@ void field::refresh_location_info_instant() {
player
[
0
].
disabled_location
=
0
;
player
[
0
].
disabled_location
=
0
;
player
[
1
].
disabled_location
=
0
;
player
[
1
].
disabled_location
=
0
;
filter_field_effect
(
EFFECT_DISABLE_FIELD
,
&
eset
);
filter_field_effect
(
EFFECT_DISABLE_FIELD
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
uint32_t
value
=
eset
[
i
]
->
get_value
();
uint32_t
value
=
eset
[
i
]
->
get_value
();
player
[
0
].
disabled_location
|=
value
&
0x1f7f
;
player
[
0
].
disabled_location
|=
value
&
0x1f7f
;
player
[
1
].
disabled_location
|=
(
value
>>
16
)
&
0x1f7f
;
player
[
1
].
disabled_location
|=
(
value
>>
16
)
&
0x1f7f
;
}
}
eset
.
clear
();
eset
.
clear
();
filter_field_effect
(
EFFECT_USE_EXTRA_MZONE
,
&
eset
);
filter_field_effect
(
EFFECT_USE_EXTRA_MZONE
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
uint8_t
p
=
eset
[
i
]
->
get_handler_player
();
uint8_t
p
=
eset
[
i
]
->
get_handler_player
();
uint32_t
value
=
eset
[
i
]
->
get_value
();
uint32_t
value
=
eset
[
i
]
->
get_value
();
player
[
p
].
disabled_location
|=
(
value
>>
16
)
&
0x1f
;
player
[
p
].
disabled_location
|=
(
value
>>
16
)
&
0x1f
;
}
}
eset
.
clear
();
eset
.
clear
();
filter_field_effect
(
EFFECT_USE_EXTRA_SZONE
,
&
eset
);
filter_field_effect
(
EFFECT_USE_EXTRA_SZONE
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
uint8_t
p
=
eset
[
i
]
->
get_handler_player
();
uint8_t
p
=
eset
[
i
]
->
get_handler_player
();
uint32_t
value
=
eset
[
i
]
->
get_value
();
uint32_t
value
=
eset
[
i
]
->
get_value
();
player
[
p
].
disabled_location
|=
(
value
>>
8
)
&
0x1f00
;
player
[
p
].
disabled_location
|=
(
value
>>
8
)
&
0x1f00
;
...
@@ -4661,31 +4661,31 @@ int32_t field::refresh_location_info(uint16_t step) {
...
@@ -4661,31 +4661,31 @@ int32_t field::refresh_location_info(uint16_t step) {
core
.
extra_mzone_effects
.
clear
();
core
.
extra_mzone_effects
.
clear
();
core
.
extra_szone_effects
.
clear
();
core
.
extra_szone_effects
.
clear
();
filter_field_effect
(
EFFECT_DISABLE_FIELD
,
&
eset
);
filter_field_effect
(
EFFECT_DISABLE_FIELD
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
uint32_t
value
=
eset
[
i
]
->
get_value
();
uint32_t
value
=
eset
[
i
]
->
get_value
();
if
(
value
)
{
if
(
value
)
{
player
[
0
].
disabled_location
|=
value
&
0x1f7f
;
player
[
0
].
disabled_location
|=
value
&
0x1f7f
;
player
[
1
].
disabled_location
|=
(
value
>>
16
)
&
0x1f7f
;
player
[
1
].
disabled_location
|=
(
value
>>
16
)
&
0x1f7f
;
}
else
}
else
core
.
disfield_effects
.
add_item
(
eset
[
i
]);
core
.
disfield_effects
.
push_back
(
eset
[
i
]);
}
}
eset
.
clear
();
eset
.
clear
();
filter_field_effect
(
EFFECT_USE_EXTRA_MZONE
,
&
eset
);
filter_field_effect
(
EFFECT_USE_EXTRA_MZONE
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
uint8_t
p
=
eset
[
i
]
->
get_handler_player
();
uint8_t
p
=
eset
[
i
]
->
get_handler_player
();
uint32_t
value
=
eset
[
i
]
->
get_value
();
uint32_t
value
=
eset
[
i
]
->
get_value
();
player
[
p
].
disabled_location
|=
(
value
>>
16
)
&
0x1f
;
player
[
p
].
disabled_location
|=
(
value
>>
16
)
&
0x1f
;
if
((
uint32_t
)
field_used_count
[(
value
>>
16
)
&
0x1f
]
<
(
value
&
0xffff
))
if
((
uint32_t
)
field_used_count
[(
value
>>
16
)
&
0x1f
]
<
(
value
&
0xffff
))
core
.
extra_mzone_effects
.
add_item
(
eset
[
i
]);
core
.
extra_mzone_effects
.
push_back
(
eset
[
i
]);
}
}
eset
.
clear
();
eset
.
clear
();
filter_field_effect
(
EFFECT_USE_EXTRA_SZONE
,
&
eset
);
filter_field_effect
(
EFFECT_USE_EXTRA_SZONE
,
&
eset
);
for
(
int32_t
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
for
(
effect_set
::
size_type
i
=
0
;
i
<
eset
.
size
();
++
i
)
{
uint8_t
p
=
eset
[
i
]
->
get_handler_player
();
uint8_t
p
=
eset
[
i
]
->
get_handler_player
();
uint32_t
value
=
eset
[
i
]
->
get_value
();
uint32_t
value
=
eset
[
i
]
->
get_value
();
player
[
p
].
disabled_location
|=
(
value
>>
8
)
&
0x1f00
;
player
[
p
].
disabled_location
|=
(
value
>>
8
)
&
0x1f00
;
if
((
uint32_t
)
field_used_count
[(
value
>>
16
)
&
0x1f
]
<
(
value
&
0xffff
))
if
((
uint32_t
)
field_used_count
[(
value
>>
16
)
&
0x1f
]
<
(
value
&
0xffff
))
core
.
extra_szone_effects
.
add_item
(
eset
[
i
]);
core
.
extra_szone_effects
.
push_back
(
eset
[
i
]);
}
}
return
FALSE
;
return
FALSE
;
}
}
...
@@ -4696,7 +4696,7 @@ int32_t field::refresh_location_info(uint16_t step) {
...
@@ -4696,7 +4696,7 @@ int32_t field::refresh_location_info(uint16_t step) {
}
}
effect
*
peffect
=
core
.
disfield_effects
[
0
];
effect
*
peffect
=
core
.
disfield_effects
[
0
];
core
.
units
.
begin
()
->
peffect
=
peffect
;
core
.
units
.
begin
()
->
peffect
=
peffect
;
core
.
disfield_effects
.
remove_item
(
0
);
core
.
disfield_effects
.
erase
(
core
.
disfield_effects
.
begin
()
);
if
(
!
peffect
->
operation
)
{
if
(
!
peffect
->
operation
)
{
peffect
->
value
=
0x80
;
peffect
->
value
=
0x80
;
core
.
units
.
begin
()
->
step
=
0
;
core
.
units
.
begin
()
->
step
=
0
;
...
@@ -4729,7 +4729,7 @@ int32_t field::refresh_location_info(uint16_t step) {
...
@@ -4729,7 +4729,7 @@ int32_t field::refresh_location_info(uint16_t step) {
}
}
effect
*
peffect
=
core
.
extra_mzone_effects
[
0
];
effect
*
peffect
=
core
.
extra_mzone_effects
[
0
];
core
.
units
.
begin
()
->
peffect
=
peffect
;
core
.
units
.
begin
()
->
peffect
=
peffect
;
core
.
extra_mzone_effects
.
remove_item
(
0
);
core
.
extra_mzone_effects
.
erase
(
core
.
extra_mzone_effects
.
begin
()
);
uint32_t
p
=
peffect
->
get_handler_player
();
uint32_t
p
=
peffect
->
get_handler_player
();
uint32_t
mzone_flag
=
(
player
[
p
].
disabled_location
|
player
[
p
].
used_location
)
&
0x1f
;
uint32_t
mzone_flag
=
(
player
[
p
].
disabled_location
|
player
[
p
].
used_location
)
&
0x1f
;
if
(
mzone_flag
==
0x1f
)
{
if
(
mzone_flag
==
0x1f
)
{
...
@@ -4768,7 +4768,7 @@ int32_t field::refresh_location_info(uint16_t step) {
...
@@ -4768,7 +4768,7 @@ int32_t field::refresh_location_info(uint16_t step) {
}
}
effect
*
peffect
=
core
.
extra_szone_effects
[
0
];
effect
*
peffect
=
core
.
extra_szone_effects
[
0
];
core
.
units
.
begin
()
->
peffect
=
peffect
;
core
.
units
.
begin
()
->
peffect
=
peffect
;
core
.
extra_szone_effects
.
remove_item
(
0
);
core
.
extra_szone_effects
.
erase
(
core
.
extra_szone_effects
.
begin
()
);
uint32_t
p
=
peffect
->
get_handler_player
();
uint32_t
p
=
peffect
->
get_handler_player
();
uint32_t
szone_flag
=
((
player
[
p
].
disabled_location
|
player
[
p
].
used_location
)
>>
8
)
&
0x1f
;
uint32_t
szone_flag
=
((
player
[
p
].
disabled_location
|
player
[
p
].
used_location
)
>>
8
)
&
0x1f
;
if
(
szone_flag
==
0x1f
)
{
if
(
szone_flag
==
0x1f
)
{
...
@@ -5018,7 +5018,7 @@ int32_t field::adjust_step(uint16_t step) {
...
@@ -5018,7 +5018,7 @@ int32_t field::adjust_step(uint16_t step) {
eset
.
clear
();
eset
.
clear
();
pcard
->
filter_effect
(
EFFECT_SET_POSITION
,
&
eset
);
pcard
->
filter_effect
(
EFFECT_SET_POSITION
,
&
eset
);
if
(
eset
.
size
())
{
if
(
eset
.
size
())
{
pos
=
eset
.
get_last
()
->
get_value
();
pos
=
eset
.
back
()
->
get_value
();
if
((
pos
&
0xff
)
!=
pcard
->
current
.
position
)
{
if
((
pos
&
0xff
)
!=
pcard
->
current
.
position
)
{
pos_adjust
.
insert
(
pcard
);
pos_adjust
.
insert
(
pcard
);
pcard
->
position_param
=
pos
;
pcard
->
position_param
=
pos
;
...
...
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