Commit 380b5992 authored by argon.sun's avatar argon.sun

fix

parent 6e3fab5e
......@@ -1957,7 +1957,8 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
int code = BufferIO::ReadInt32(pbuf);
mainGame->gMutex.Lock();
pcard = mainGame->dField.GetCard(player, LOCATION_DECK, mainGame->dField.deck[player].size() - 1);
pcard->SetCode(code);
if(code || !mainGame->dField.deck_reversed)
pcard->SetCode(code);
mainGame->dField.deck[player].erase(mainGame->dField.deck[player].end() - 1);
mainGame->dField.AddCard(pcard, player, LOCATION_HAND, 0);
for(int i = 0; i < mainGame->dField.hand[player].size(); ++i)
......
......@@ -428,6 +428,12 @@ void field::shuffle(uint8 playerid, uint8 location) {
pduel->write_buffer8(MSG_SHUFFLE_DECK);
pduel->write_buffer8(playerid);
core.shuffle_deck_check[playerid] = FALSE;
if(core.deck_reversed) {
pduel->write_buffer8(MSG_DECK_TOP);
pduel->write_buffer8(playerid);
pduel->write_buffer8(0);
pduel->write_buffer32((*player[playerid].list_main.rbegin())->data.code);
}
}
}
void field::reset_sequence(uint8 playerid, uint8 location) {
......@@ -502,6 +508,8 @@ void field::reverse_deck(uint8 playerid) {
return;
for(int i = 0; i < count / 2; ++i) {
card* tmp = player[playerid].list_main[i];
tmp->current.sequence = count - 1 - i;
player[playerid].list_main[count - 1 - i]->current.sequence = i;
player[playerid].list_main[i] = player[playerid].list_main[count - 1 - i];
player[playerid].list_main[count - 1 - i] = tmp;
}
......@@ -714,11 +722,9 @@ void field::filter_affected_cards(effect* peffect, card_set* cset) {
}
}
void field::filter_player_effect(uint8 playerid, uint32 code, effect_set* eset, uint8 sort) {
effect* peffect;
pair<effect_container::iterator, effect_container::iterator> rg;
rg = effects.aura_effect.equal_range(code);
auto rg = effects.aura_effect.equal_range(code);
for (; rg.first != rg.second; ++rg.first) {
peffect = rg.first->second;
effect* peffect = rg.first->second;
if (peffect->is_target_player(playerid) && peffect->is_available())
eset->add_item(peffect);
}
......
......@@ -624,8 +624,7 @@ int32 scriptlib::duel_confirm_cards(lua_State *L) {
pduel->write_buffer8(pcard->current.sequence);
} else {
pduel->write_buffer8(pgroup->container.size());
field::card_set::iterator cit;
for(cit = pgroup->container.begin(); cit != pgroup->container.end(); ++cit) {
for(auto cit = pgroup->container.begin(); cit != pgroup->container.end(); ++cit) {
pduel->write_buffer32((*cit)->data.code);
pduel->write_buffer8((*cit)->current.controler);
pduel->write_buffer8((*cit)->current.location);
......
......@@ -302,6 +302,7 @@ int32 field::draw(uint16 step, effect* reason_effect, uint32 reason, uint8 reaso
card_set cset;
card_vector cv;
uint32 drawed = 0;
uint32 public_count = 0;
if(!(reason & REASON_RULE) && !is_player_can_draw(playerid)) {
returns.ivalue[0] = 0;
return TRUE;
......@@ -328,6 +329,10 @@ int32 field::draw(uint16 step, effect* reason_effect, uint32 reason, uint8 reaso
pcard->current.location = 0;
add_card(playerid, pcard, LOCATION_HAND, 0);
pcard->enable_field_effect(TRUE);
if(pcard->is_affected_by_effect(EFFECT_PUBLIC)) {
pcard->set_status(STATUS_IS_PUBLIC, TRUE);
public_count++;
}
cv.push_back(pcard);
cset.insert(pcard);
}
......@@ -347,7 +352,19 @@ int32 field::draw(uint16 step, effect* reason_effect, uint32 reason, uint8 reaso
for(uint32 i = 0; i < drawed; ++i)
pduel->write_buffer32(cv[i]->data.code);
}
if(cset.size()) {
if(core.deck_reversed && (drawed > 0) && (public_count < drawed)) {
pduel->write_buffer8(MSG_CONFIRM_CARDS);
pduel->write_buffer8(1 - playerid);
pduel->write_buffer8(cset.size());
for(auto cit = cset.begin(); cit != cset.end(); ++cit) {
pduel->write_buffer32((*cit)->data.code);
pduel->write_buffer8((*cit)->current.controler);
pduel->write_buffer8((*cit)->current.location);
pduel->write_buffer8((*cit)->current.sequence);
}
shuffle(playerid, LOCATION_HAND);
}
if(drawed) {
for(auto cit = cset.begin(); cit != cset.end(); ++cit)
raise_single_event((*cit), 0, EVENT_TO_HAND, reason_effect, reason, reason_player, playerid, 0);
process_single_event();
......@@ -2242,6 +2259,31 @@ int32 field::send_to(uint16 step, group * targets, effect * reason_effect, uint3
cv.push_back(*cit);
if(cv.size() > 1)
std::sort(cv.begin(), cv.end(), card::card_operation_sort);
if(core.deck_reversed) {
int32 d0 = player[0].list_main.size() - 1, s0 = d0;
int32 d1 = player[1].list_main.size() - 1, s1 = d1;
for( int i = 0; i < cv.size(); ++i) {
card* pcard = cv[i];
if(pcard->current.location != LOCATION_DECK)
continue;
if((pcard->current.controler == 0) && (pcard->current.sequence == s0))
s0--;
if((pcard->current.controler == 1) && (pcard->current.sequence == s1))
s1--;
}
if((s0 != d0) && (s0 > 0)) {
pduel->write_buffer8(MSG_DECK_TOP);
pduel->write_buffer8(0);
pduel->write_buffer8(d0 - s0);
pduel->write_buffer32(player[0].list_main[s0]->data.code);
}
if((s1 != d1) && (s1 > 0)) {
pduel->write_buffer8(MSG_DECK_TOP);
pduel->write_buffer8(1);
pduel->write_buffer8(d1 - s1);
pduel->write_buffer32(player[1].list_main[s1]->data.code);
}
}
for (auto cvit = cv.begin(); cvit != cv.end(); ++cvit) {
card* pcard = *cvit;
oloc = pcard->current.location;
......@@ -2588,6 +2630,16 @@ int32 field::move_to_field(uint16 step, card * target, uint32 enable, uint32 ret
return FALSE;
}
case 2: {
if(core.deck_reversed && (target->current.location == LOCATION_DECK)) {
int32 curp = target->current.controler;
int32 curs = target->current.sequence;
if(curs > 0 && (curs == player[curp].list_main.size() - 1)) {
pduel->write_buffer8(MSG_DECK_TOP);
pduel->write_buffer8(curp);
pduel->write_buffer8(1);
pduel->write_buffer32(player[curp].list_main[curs - 1]->data.code);
}
}
pduel->write_buffer8(MSG_MOVE);
pduel->write_buffer32(target->data.code);
if(target->overlay_target) {
......
......@@ -4426,22 +4426,22 @@ int32 field::adjust_step(uint16 step) {
reverse_deck(0);
reverse_deck(1);
pduel->write_buffer8(MSG_REVERSE_DECK);
}
core.deck_reversed = rv;
if(core.deck_reversed) {
if(player[0].list_main.size()) {
pduel->write_buffer8(MSG_DECK_TOP);
pduel->write_buffer8(0);
pduel->write_buffer8(0);
pduel->write_buffer32((*player[0].list_main.rbegin())->data.code);
}
if(player[1].list_main.size()) {
pduel->write_buffer8(MSG_DECK_TOP);
pduel->write_buffer8(1);
pduel->write_buffer8(0);
pduel->write_buffer32((*player[1].list_main.rbegin())->data.code);
if(rv) {
if(player[0].list_main.size()) {
pduel->write_buffer8(MSG_DECK_TOP);
pduel->write_buffer8(0);
pduel->write_buffer8(0);
pduel->write_buffer32((*player[0].list_main.rbegin())->data.code);
}
if(player[1].list_main.size()) {
pduel->write_buffer8(MSG_DECK_TOP);
pduel->write_buffer8(1);
pduel->write_buffer8(0);
pduel->write_buffer32((*player[1].list_main.rbegin())->data.code);
}
}
}
core.deck_reversed = rv;
return FALSE;
}
case 13: {
......
......@@ -6,6 +6,7 @@ function c10248192.initial_effect(c)
e1:SetCode(EVENT_FREE_CHAIN)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e1:SetCost(c10248192.cost)
e1:SetTarget(c10248192.target)
e1:SetOperation(c10248192.activate)
c:RegisterEffect(e1)
end
......
......@@ -5,7 +5,7 @@ function c89258906.initial_effect(c)
e1:SetDescription(aux.Stringid(89258906,0))
e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
e1:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O)
e1:SetProperty(EFFECT_FLAG_MULTIACT_HAND)
e1:SetProperty(EFFECT_FLAG_MULTIACT_HAND+EFFECT_FLAG_DELAY)
e1:SetCode(EVENT_TO_HAND)
e1:SetCondition(c89258906.condition)
e1:SetTarget(c89258906.target)
......
......@@ -7,5 +7,5 @@ lastdeck = test
textfont = c:/windows/fonts/simsun.ttc 14
numfont = c:/windows/fonts/arialbd.ttf
serverport = 7911
lastip = 192.168.2.100
lastip = 192.168.3.235
lastport = 7911
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