Commit 5d17ce74 authored by argon.sun's avatar argon.sun

fix

parent 60340764
......@@ -462,70 +462,54 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
else deckManager.current_deck.side.push_back(draging_pointer);
}
} else {
if((hovered_pos == 1 && (draging_pointer->second.type & 0x802040)) || (hovered_pos == 2 && !(draging_pointer->second.type & 0x802040))
|| hovered_pos == 4) {
if(click_pos == 1)
deckManager.current_deck.main.push_back(draging_pointer);
else if(click_pos == 2)
deckManager.current_deck.extra.push_back(draging_pointer);
else if(click_pos == 3)
deckManager.current_deck.side.push_back(draging_pointer);
break;
}
if(hovered_pos == 1) {
if(click_pos == 1) {
if(hovered_seq < deckManager.current_deck.main.size())
if((hovered_pos == 1 && (draging_pointer->second.type & 0x802040)) || (hovered_pos == 2 && !(draging_pointer->second.type & 0x802040)) || hovered_pos == 4)
hovered_pos = 0;
if((hovered_pos == 1 || (hovered_pos == 0 && click_pos == 1)) && deckManager.current_deck.main.size() < 64) {
if(hovered_seq < deckManager.current_deck.main.size() && hovered_pos)
deckManager.current_deck.main.insert(deckManager.current_deck.main.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.main.push_back(draging_pointer);
} else if(hovered_seq < deckManager.current_deck.main.size()) {
deckManager.current_deck.side.push_back(deckManager.current_deck.main[hovered_seq]);
deckManager.current_deck.main[hovered_seq] = draging_pointer;
} else
deckManager.current_deck.side.push_back(draging_pointer);
} else if(hovered_pos == 2) {
if(click_pos == 2) {
if(hovered_seq < deckManager.current_deck.main.size())
} else if((hovered_pos == 2 || (hovered_pos == 0 && click_pos == 2)) && deckManager.current_deck.extra.size() < 20) {
if(hovered_seq < deckManager.current_deck.extra.size() && hovered_pos)
deckManager.current_deck.extra.insert(deckManager.current_deck.extra.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.extra.push_back(draging_pointer);
} else if(hovered_seq < deckManager.current_deck.extra.size()) {
deckManager.current_deck.side.push_back(deckManager.current_deck.extra[hovered_seq]);
deckManager.current_deck.extra[hovered_seq] = draging_pointer;
} else
deckManager.current_deck.side.push_back(draging_pointer);
} else if(hovered_pos == 3 || (hovered_pos == 0 && click_pos == 3)) {
if(click_pos == 3) {
if(hovered_seq < deckManager.current_deck.side.size())
deckManager.current_deck.extra.insert(deckManager.current_deck.side.begin() + hovered_seq, draging_pointer);
} else if((hovered_pos == 3 || (hovered_pos == 0 && click_pos == 3)) && deckManager.current_deck.side.size() < 20) {
if(hovered_seq < deckManager.current_deck.side.size() && hovered_pos)
deckManager.current_deck.side.insert(deckManager.current_deck.side.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.side.push_back(draging_pointer);
} else if(hovered_seq < deckManager.current_deck.side.size()) {
auto swaping_pointer = deckManager.current_deck.side[hovered_seq];
if(click_pos == 1) {
if(swaping_pointer->second.type & 0x802040)
deckManager.current_deck.main.push_back(draging_pointer);
else {
deckManager.current_deck.main.push_back(swaping_pointer);
deckManager.current_deck.side[hovered_seq] = draging_pointer;
}
} else {
if(!(swaping_pointer->second.type & 0x802040))
deckManager.current_deck.extra.push_back(draging_pointer);
else {
deckManager.current_deck.extra.push_back(swaping_pointer);
deckManager.current_deck.side[hovered_seq] = draging_pointer;
}
break;
}
case irr::EMIE_RMOUSE_LEFT_UP: {
if(mainGame->is_siding) {
if(is_draging)
break;
if(hovered_pos == 0 || hovered_seq == -1)
break;
draging_pointer = dataManager.GetCodePointer(hovered_code);
if(hovered_pos == 1) {
if(deckManager.current_deck.side.size() < 20) {
deckManager.current_deck.main.erase(deckManager.current_deck.main.begin() + hovered_seq);
deckManager.current_deck.side.push_back(draging_pointer);
}
} else if(hovered_pos == 2) {
if(deckManager.current_deck.side.size() < 20) {
deckManager.current_deck.extra.erase(deckManager.current_deck.extra.begin() + hovered_seq);
deckManager.current_deck.side.push_back(draging_pointer);
}
} else {
if(click_pos == 1)
deckManager.current_deck.main.push_back(draging_pointer);
else
if((draging_pointer->second.type & 0x802040) && deckManager.current_deck.extra.size() < 20) {
deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq);
deckManager.current_deck.extra.push_back(draging_pointer);
}
if(!(draging_pointer->second.type & 0x802040) && deckManager.current_deck.main.size() < 64) {
deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq);
deckManager.current_deck.main.push_back(draging_pointer);
}
}
break;
}
case irr::EMIE_RMOUSE_LEFT_UP: {
if(mainGame->wCategories->isVisible() || mainGame->is_siding)
if(mainGame->wCategories->isVisible())
break;
if(hovered_pos == 0 || hovered_seq == -1)
break;
......
......@@ -198,7 +198,7 @@ void SingleDuel::PlayerReady(DuelPlayer* dp, bool is_ready) {
if(is_ready) {
bool allow_ocg = host_info.rule == 0 || host_info.rule == 2;
bool allow_tcg = host_info.rule == 1 || host_info.rule == 2;
int res = host_info.no_check_deck ? true : deckManager.CheckLFList(pdeck[dp->type], host_info.lflist, allow_ocg, allow_tcg);
int res = host_info.no_check_deck ? false : deckManager.CheckLFList(pdeck[dp->type], host_info.lflist, allow_ocg, allow_tcg);
if(res) {
STOC_HS_PlayerChange scpc;
scpc.status = (dp->type << 4) | PLAYERCHANGE_NOTREADY;
......
......@@ -1150,6 +1150,8 @@ int32 field::summon(uint16 step, uint8 sumplayer, card* target, effect* proc, ui
}
target->set_status(STATUS_SUMMONING, FALSE);
target->enable_field_effect(TRUE);
if(target->is_status(STATUS_DISABLED))
target->reset(RESET_DISABLE, RESET_EVENT);
target->set_status(STATUS_SUMMON_TURN, TRUE);
core.summoning_card = 0;
return FALSE;
......@@ -1239,6 +1241,8 @@ int32 field::flip_summon(uint16 step, uint8 sumplayer, card * target) {
case 3: {
target->set_status(STATUS_SUMMONING, FALSE);
target->enable_field_effect(TRUE);
if(target->is_status(STATUS_DISABLED))
target->reset(RESET_DISABLE, RESET_EVENT);
target->set_status(STATUS_SUMMON_TURN, TRUE);
return FALSE;
}
......@@ -1385,7 +1389,7 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui
case 5: {
if(!ignore_count) {
returns.ivalue[0] = FALSE;
effect* pextra = core.extra_summon[setplayer]? 0: target->is_affected_by_effect(EFFECT_EXTRA_SET_COUNT);
effect* pextra = core.extra_summon[setplayer] ? 0 : target->is_affected_by_effect(EFFECT_EXTRA_SET_COUNT);
if(pextra) {
core.temp_var[0] = (ptr)pextra;
// if(core.summon_count[setplayer] < get_summon_count_limit(setplayer))
......@@ -1628,6 +1632,8 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target) {
oeit->second = 0;
target->set_status(STATUS_SUMMONING, FALSE);
target->enable_field_effect(TRUE);
if(target->is_status(STATUS_DISABLED))
target->reset(RESET_DISABLE, RESET_EVENT);
target->set_status(STATUS_PROC_COMPLETE | STATUS_SUMMON_TURN, TRUE);
core.spsummoning_card = 0;
return FALSE;
......@@ -2677,7 +2683,10 @@ int32 field::change_position(uint16 step, group * targets, effect * reason_effec
raise_single_event(*cvit, EVENT_CHANGE_POS, reason_effect, 0, reason_player, 0, 0);
pos_changed.insert(*cvit);
}
bool trapmonster = false;
if((opos & POS_FACEUP) && (npos & POS_FACEDOWN)) {
if((*cvit)->get_type()&TYPE_TRAPMONSTER)
trapmonster = true;
(*cvit)->reset(RESET_TURN_SET, RESET_EVENT);
(*cvit)->set_status(STATUS_SET_TURN, TRUE);
(*cvit)->enable_field_effect(FALSE);
......@@ -2692,7 +2701,7 @@ int32 field::change_position(uint16 step, group * targets, effect * reason_effec
}
if((npos & POS_FACEDOWN) && (*cvit)->equiping_target)
(*cvit)->unequip();
if((npos & POS_FACEDOWN) && ((*cvit)->get_type()&TYPE_TRAPMONSTER)) {
if(trapmonster) {
refresh_location_info_instant();
move_to_field(*cvit, (*cvit)->current.controler, (*cvit)->current.controler, LOCATION_SZONE, POS_FACEDOWN);
}
......
......@@ -4120,15 +4120,6 @@ int32 field::adjust_step(uint16 step) {
}
case 1: {
//win check
if(core.win_player != 5) {
pduel->write_buffer8(MSG_WIN);
pduel->write_buffer8(core.win_player);
pduel->write_buffer8(core.win_reason);
core.win_player = 5;
core.win_reason = 0;
core.overdraw[0] = core.overdraw[1] = FALSE;
return FALSE;
}
uint32 winp = 5, rea = 1;
if((player[0].lp <= 0 && player[1].lp > 0)) {
winp = 1;
......@@ -4158,6 +4149,16 @@ int32 field::adjust_step(uint16 step) {
pduel->write_buffer8(MSG_WIN);
pduel->write_buffer8(winp);
pduel->write_buffer8(rea);
core.overdraw[0] = core.overdraw[1] = FALSE;
core.win_player = 5;
core.win_reason = 0;
} else if(core.win_player != 5) {
pduel->write_buffer8(MSG_WIN);
pduel->write_buffer8(core.win_player);
pduel->write_buffer8(core.win_reason);
core.win_player = 5;
core.win_reason = 0;
core.overdraw[0] = core.overdraw[1] = FALSE;
}
return FALSE;
}
......
......@@ -32,7 +32,7 @@ end
function c10118318.activate(e,tp,eg,ep,ev,re,r,rp)
if Duel.GetLocationCount(tp,LOCATION_MZONE)==0 then return end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON)
local g=Duel.SelectMatchingCard(tp,c10118318.filter,tp,LOCATION_DECK+LOCATION_HAND,0,1,1,nil,e,tp)
local g=Duel.SelectMatchingCard(tp,c10118318.filter,tp,LOCATION_DECK,0,1,1,nil,e,tp)
local tc=g:GetFirst()
if tc then
Duel.SpecialSummon(tc,0,tp,tp,false,false,POS_FACEUP)
......
......@@ -6,6 +6,7 @@ function c6540606.initial_effect(c)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e1:SetCode(EVENT_FREE_CHAIN)
e1:SetHintTiming(0,TIMING_TOHAND)
e1:SetCost(c6540606.cost)
e1:SetTarget(c6540606.target)
e1:SetOperation(c6540606.activate)
......
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