Commit cdf07eb6 authored by Fluorohydride's avatar Fluorohydride

xmaterial count

parent d60a2384
......@@ -1629,6 +1629,9 @@ int32 field::check_with_sum_limit(card_vector* mats, int32 acc, int32 index, int
|| (op2 && acc > op2 && check_with_sum_limit(mats, acc - op2, index + 1, count + 1, min, max))
|| check_with_sum_limit(mats, acc, index + 1, count, min, max);
}
int32 field::check_xyz_material(card* pcard, int32 findex, int32 min, min32 max, group* mg) {
return TRUE;
}
int32 field::is_player_can_draw(uint8 playerid) {
return !is_player_affected_by_effect(playerid, EFFECT_CANNOT_DRAW);
}
......
......@@ -361,6 +361,7 @@ public:
int32 check_synchro_material(card* pcard, int32 findex1, int32 findex2, int32 min, int32 max, group* mg);
int32 check_tuner_material(card* pcard, card* tuner, int32 findex1, int32 findex2, int32 min, int32 max, group* mg);
int32 check_with_sum_limit(card_vector* mats, int32 acc, int32 index, int32 count, int32 min, int32 max);
int32 check_xyz_material(card* pcard, int32 findex, int32 min, min32 max, group* mg);
int32 is_player_can_draw(uint8 playerid);
int32 is_player_can_discard_deck(uint8 playerid, int32 count);
......@@ -474,6 +475,7 @@ public:
int32 change_position(uint16 step, group* targets, effect* reason_effect, uint8 reason_player, uint32 enable);
int32 operation_replace(uint16 step, effect* replace_effect, group* targets, ptr arg, ptr replace_type);
int32 select_synchro_material(int16 step, uint8 playerid, card* pcard, int32 min, int32 max, group* mg);
int32 select_xyz_material(int16 step, uint8 playerid, card* pcard, int32 min, int32 max, group* mg);
int32 select_release_cards(int16 step, uint8 playerid, uint8 check_field, uint8 cancelable, int32 min, int32 max);
int32 select_tribute_cards(int16 step, uint8 playerid, uint8 cancelable, int32 min, int32 max);
int32 toss_coin(uint16 step, effect* reason_effect, uint8 reason_player, uint8 playerid, uint8 count);
......@@ -652,6 +654,7 @@ public:
#define PROCESSOR_SPSUMMON_STEP_S 136
#define PROCESSOR_SPSUMMON_COMP_S 137
#define PROCESSOR_RANDOM_SELECT_S 138
#define PROCESSOR_SELECT_XMATERIAL 139
#define PROCESSOR_DRAW_S 140
#define PROCESSOR_DAMAGE_S 141
#define PROCESSOR_RECOVER_S 142
......
......@@ -427,7 +427,8 @@ static const struct luaL_Reg duellib[] = {
{ "SetOperationInfo", scriptlib::duel_set_operation_info },
{ "GetOperationInfo", scriptlib::duel_get_operation_info },
{ "GetOperationCount", scriptlib::duel_get_operation_count },
{ "GetXyzMaterial", scriptlib::duel_get_xyz_material },
{ "CheckXyzMaterial", scriptlib::duel_get_xyz_material },
{ "SelectXyzMaterial", scriptlib::duel_select_xyz_material },
{ "Overlay", scriptlib::duel_overlay },
{ "GetOverlayGroup", scriptlib::duel_get_overlay_group },
{ "GetOverlayCount", scriptlib::duel_get_overlay_count },
......
......@@ -2393,7 +2393,18 @@ int32 scriptlib::duel_get_operation_count(lua_State *L) {
}
return 1;
}
int32 scriptlib::duel_get_xyz_material(lua_State *L) {
int32 scriptlib::duel_check_xyz_material(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
card* scard = *(card**) lua_touserdata(L, 1);
duel* pduel = scard->pduel;
group* pgroup = pduel->new_group();
group* mgroup = pduel->new_group();
pduel->game_field->get_xyz_material(scard, &pgroup->container);
interpreter::group2value(L, pgroup);
return 1;
}
int32 scriptlib::duel_select_xyz_material(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
card* scard = *(card**) lua_touserdata(L, 1);
......
......@@ -3884,6 +3884,9 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card * pcard, i
}
return TRUE;
}
int32 field::select_xyz_material(int16 step, uint8 playerid, card * pcard, int32 min, int32 max, group* mg) {
return TRUE;
}
int32 field::select_release_cards(int16 step, uint8 playerid, uint8 check_field, uint8 cancelable, int32 min, int32 max) {
switch(step) {
case 0: {
......
......@@ -870,6 +870,13 @@ int32 field::process() {
core.units.pop_front();
return pduel->bufferlen;
}
case PROCESSOR_SELECT_XMATERIAL: {
if (select_xyz_material(it->step, it->arg1, (card*)it->ptarget, it->arg2 & 0xffff, it->arg2 >> 16, (group*)it->peffect))
core.units.pop_front();
else
core.units.begin()->step++;
return pduel->bufferlen;
}
case PROCESSOR_DRAW_S: {
if(it->step == 0) {
add_process(PROCESSOR_DRAW, 0, it->peffect, it->ptarget, it->arg1, it->arg2);
......
......@@ -425,7 +425,8 @@ public:
static int32 duel_set_operation_info(lua_State *L);
static int32 duel_get_operation_info(lua_State *L);
static int32 duel_get_operation_count(lua_State *L);
static int32 duel_get_xyz_material(lua_State *L);
static int32 duel_check_xyz_material(lua_State *L);
static int32 duel_select_xyz_material(lua_State *L);
static int32 duel_overlay(lua_State *L);
static int32 duel_get_overlay_group(lua_State *L);
static int32 duel_get_overlay_count(lua_State *L);
......
......@@ -197,12 +197,7 @@ function Auxiliary.XyzCondition(f,minc,maxc)
local ft=Duel.GetLocationCount(c:GetControler(),LOCATION_MZONE)
local ct=-ft
if minc<=ct then return false end
if og then
return og:IsExists(f,minc,nil)
else
local g=Duel.GetXyzMaterial(c)
return g:IsExists(f,minc,nil)
end
return Duel.CheckXyzMaterial(c,f,minc,maxc,og)
end
end
function Auxiliary.XyzOperation(f,minc,maxc)
......@@ -211,9 +206,7 @@ function Auxiliary.XyzOperation(f,minc,maxc)
c:SetMaterial(og)
Duel.Overlay(c,og)
else
local g=Duel.GetXyzMaterial(c)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL)
local mg=g:FilterSelect(tp,f,minc,maxc,nil)
local mg=Duel.SelectXyzMaterial(tp,c,f,minc,maxc)
c:SetMaterial(mg)
Duel.Overlay(c,mg)
end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment