Commit a971f79b authored by argon's avatar argon

update

parent 0418303d
......@@ -350,7 +350,7 @@ public:
#define EFFECT_BP_TWICE 296
#define EFFECT_UNIQUE_CHECK 297
#define EFFECT_MATCH_KILL 300
#define EFFECT_SYNCHRO_ASSUME 310
#define EFFECT_SYNCHRO_CHECK 310
#define EVENT_STARTUP 1000
#define EVENT_FLIP 1001
......
......@@ -1494,30 +1494,39 @@ int32 field::check_synchro_material(card* pcard, int32 findex1, int32 findex2, i
}
int32 field::check_tuner_material(card* pcard, card* tuner, int32 findex1, int32 findex2, int32 min, int32 max) {
effect* peffect;
effect* passume = tuner->is_affected_by_effect(EFFECT_SYNCHRO_ASSUME);
if(tuner && tuner->is_position(POS_FACEUP) && (tuner->get_type()&TYPE_TUNER) && tuner->is_can_be_synchro_material(pcard)) {
if(passume)
passume->
if(!pduel->lua->check_matching(tuner, findex1, 0))
effect* pcheck = tuner->is_affected_by_effect(EFFECT_SYNCHRO_CHECK);
if(pcheck)
pcheck->get_value(tuner);
if(!pduel->lua->check_matching(tuner, findex1, 0)) {
pduel->restore_assumes();
return FALSE;
}
if((peffect = tuner->is_affected_by_effect(EFFECT_SYNCHRO_MATERIAL_CUSTOM, pcard))) {
if(!peffect->target)
if(!peffect->target) {
pduel->restore_assumes();
return FALSE;
}
pduel->lua->add_param(peffect, PARAM_TYPE_EFFECT);
pduel->lua->add_param(pcard, PARAM_TYPE_CARD);
pduel->lua->add_param(findex2, PARAM_TYPE_INDEX);
pduel->lua->add_param(min, PARAM_TYPE_INT);
pduel->lua->add_param(max, PARAM_TYPE_INT);
if(pduel->lua->check_condition(peffect->target, 5))
if(pduel->lua->check_condition(peffect->target, 5)) {
pduel->restore_assumes();
return TRUE;
}
} else {
card_vector nsyn;
card* pm;
for(uint8 p = 0; p < 2; ++p) {
for(int32 i = 0; i < 5; ++i) {
pm = player[p].list_mzone[i];
if(pm && pm != tuner && pm->is_position(POS_FACEUP) && pduel->lua->check_matching(pm, findex2, 0)
&& pm->is_can_be_synchro_material(pcard, tuner)) {
if(pm && pm != tuner && pm->is_position(POS_FACEUP) && pm->is_can_be_synchro_material(pcard, tuner)) {
if(pcheck)
pcheck->get_value(pm);
if(!pduel->lua->check_matching(pm, findex2, 0))
continue;
nsyn.push_back(pm);
pm->operation_param = pm->get_synchro_level(pcard);
}
......@@ -1527,12 +1536,17 @@ int32 field::check_tuner_material(card* pcard, card* tuner, int32 findex1, int32
int32 l1 = l & 0xffff;
//int32 l2 = l >> 16;
int32 lv = pcard->get_level();
if(lv == l1)
if(lv == l1) {
pduel->restore_assumes();
return FALSE;
if(check_with_sum_limit(&nsyn, lv - l1, 0, 1, min, max))
}
if(check_with_sum_limit(&nsyn, lv - l1, 0, 1, min, max)) {
pduel->restore_assumes();
return TRUE;
}
}
}
pduel->restore_assumes();
return FALSE;
}
int32 field::check_with_sum_limit(card_vector* mats, int32 acc, int32 index, int32 count, int32 min, int32 max) {
......
......@@ -3613,9 +3613,14 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card * pcard, i
effect* peffect;
for(uint8 p = 0; p < 2; ++p) {
for(int32 i = 0; i < 5; ++i) {
pduel->restore_assumes();
tuner = player[p].list_mzone[i];
if(tuner && tuner->is_position(POS_FACEUP) && (tuner->get_type()&TYPE_TUNER) && pduel->lua->check_matching(tuner, -2, 0)
&& tuner->is_can_be_synchro_material(pcard)) {
if(tuner && tuner->is_position(POS_FACEUP) && (tuner->get_type()&TYPE_TUNER) && tuner->is_can_be_synchro_material(pcard)) {
effect* pcheck = tuner->is_affected_by_effect(EFFECT_SYNCHRO_CHECK);
if(pcheck)
pcheck->get_value(tuner);
if(!pduel->lua->check_matching(tuner, -2, 0))
continue;
if((peffect = tuner->is_affected_by_effect(EFFECT_SYNCHRO_MATERIAL_CUSTOM, pcard))) {
if(!peffect->target)
continue;
......@@ -3632,8 +3637,11 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card * pcard, i
for(uint8 np = 0; np < 2; ++np) {
for(int32 j = 0; j < 5; ++j) {
pm = player[np].list_mzone[j];
if(pm && pm != tuner && pm->is_position(POS_FACEUP) && pduel->lua->check_matching(pm, -1, 0)
&& pm->is_can_be_synchro_material(pcard, tuner)) {
if(pm && pm != tuner && pm->is_position(POS_FACEUP) && pm->is_can_be_synchro_material(pcard, tuner)) {
if(pcheck)
pcheck->get_value(pm);
if(!pduel->lua->check_matching(pm, -1, 0))
continue;
nsyn.push_back(pm);
pm->operation_param = pm->get_synchro_level(pcard);
}
......@@ -3651,6 +3659,7 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card * pcard, i
}
}
}
pduel->restore_assumes();
if(core.select_cards.size() == 0)
return TRUE;
pduel->write_buffer8(MSG_HINT);
......@@ -3662,6 +3671,7 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card * pcard, i
}
case 1: {
card* tuner = core.select_cards[returns.bvalue[1]];
effect* pcheck = tuner->is_affected_by_effect(EFFECT_SYNCHRO_CHECK);
core.units.begin()->ptarget = (group*)tuner;
effect* peffect;
if((peffect = tuner->is_affected_by_effect(EFFECT_SYNCHRO_MATERIAL_CUSTOM, pcard))) {
......@@ -3679,8 +3689,11 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card * pcard, i
for(uint8 np = 0; np < 2; ++np) {
for(int32 i = 0; i < 5; ++i) {
card* pm = player[np].list_mzone[i];
if(pm && pm != tuner && pm->is_position(POS_FACEUP) && pduel->lua->check_matching(pm, -1, 0)
&& pm->is_can_be_synchro_material(pcard, tuner)) {
if(pm && pm != tuner && pm->is_position(POS_FACEUP) && pm->is_can_be_synchro_material(pcard, tuner)) {
if(pcheck)
pcheck->get_value(pm);
if(!pduel->lua->check_matching(pm, -1, 0))
continue;
core.select_cards.push_back(pm);
pm->operation_param = pm->get_synchro_level(pcard);
}
......@@ -3697,6 +3710,7 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card * pcard, i
add_process(PROCESSOR_SELECT_SUM, 0, 0, 0, lv - l1, playerid + (min << 16) + (max << 24));
core.units.begin()->step = 2;
}
pduel->restore_assumes();
return FALSE;
}
case 2: {
......
--ジェノミックス・ファイター --test
function c42155488.initial_effect(c)
--summon with no tribute
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(42155488,0))
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_SUMMON_PROC)
e1:SetCondition(c42155488.ntcon)
e1:SetOperation(c42155488.ntop)
c:RegisterEffect(e1)
--declear
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(42155488,1))
e2:SetType(EFFECT_TYPE_IGNITION)
e2:SetRange(LOCATION_MZONE)
e2:SetCountLimit(1)
e2:SetTarget(c42155488.dectg)
e2:SetOperation(c42155488.decop)
c:RegisterEffect(e2)
end
function c42155488.ntcon(e,c)
if c==nil then return true end
return c:GetLevel()>4 and Duel.GetLocationCount(c:GetControler(),LOCATION_MZONE)>0
end
function c42155488.ntop(e,tp,eg,ep,ev,re,r,rp,c)
--change base attack
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e1:SetRange(LOCATION_MZONE)
e1:SetReset(RESET_EVENT+0xff0000)
e1:SetCode(EFFECT_SET_BASE_ATTACK)
e1:SetValue(1100)
c:RegisterEffect(e1)
local e2=e1:Clone()
e2:SetCode(EFFECT_CHANGE_LEVEL)
e2:SetValue(3)
c:RegisterEffect(e2)
end
function c42155488.dectg(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end
Duel.Hint(HINT_SELECTMSG,tp,563)
local rc=Duel.AnnounceRace(tp,1,0xffffff)
e:SetLabel(rc)
local e1=Effect.CreateEffect(e:GetHandler())
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_CANNOT_SUMMON)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e1:SetTargetRange(1,0)
e1:SetTarget(c42155488.sumlimit)
e1:SetReset(RESET_PHASE+PHASE_END)
e1:SetLabel(rc)
Duel.RegisterEffect(e1,tp)
local e2=e1:Clone()
e2:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
Duel.RegisterEffect(e2,tp)
end
function c42155488.sumlimit(e,c)
return not c:IsRace(e:GetLabel())
end
function c42155488.decop(e,tp,eg,ep,ev,re,r,rp,chk)
local c=e:GetHandler()
if c:IsRelateToEffect(e) and c:IsFaceup() then
local rc=e:GetLabel()
c:SetHint(CHINT_RACE,rc)
local e1=Effect.CreateEffect(c)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_SYNCHRO_CHECK)
e1:SetValue(c42155488.syncheck)
e1:SetReset(RESET_EVENT+0x1fe0000+RESET_PHASE+PHASE_END)
e1:SetLabel(rc)
c:RegisterEffect(e1)
end
end
function c42155488.syncheck(e,c)
c:AssumeProperty(ASSUME_RACE,e:GetLabel())
end
......@@ -440,7 +440,7 @@ EFFECT_REMOVE_BRAINWASHING =295
EFFECT_BP_TWICE =296
EFFECT_UNIQUE_CHECK =297
EFFECT_MATCH_KILL =300
EFFECT_SYNCHRO_ASSUME =310
EFFECT_SYNCHRO_CHECK =310
EVENT_STARTUP =1000
EVENT_FLIP =1001
......
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