Commit 476c8892 authored by nanahira's avatar nanahira Committed by GitHub

fix card_operation_sort segfault (#588)

parent 3fd1f4e6
...@@ -98,13 +98,6 @@ bool card::card_operation_sort(card* c1, card* c2) { ...@@ -98,13 +98,6 @@ bool card::card_operation_sort(card* c1, card* c2) {
else else
return c1->current.sequence < c2->current.sequence; return c1->current.sequence < c2->current.sequence;
} else if (c1->current.location & LOCATION_DECK && !pduel->game_field->core.select_deck_seq_preserved) { } else if (c1->current.location & LOCATION_DECK && !pduel->game_field->core.select_deck_seq_preserved) {
// faceup deck cards should go at the very first
if(c1->current.position != c2->current.position) {
if(c1->current.position & POS_FACEUP)
return false;
else
return true;
}
// if deck reversed and the card being at the top, it should go first // if deck reversed and the card being at the top, it should go first
if(pduel->game_field->core.deck_reversed) { if(pduel->game_field->core.deck_reversed) {
if(c1->current.sequence == pduel->game_field->player[cp1].list_main.size() - 1) if(c1->current.sequence == pduel->game_field->player[cp1].list_main.size() - 1)
...@@ -112,6 +105,13 @@ bool card::card_operation_sort(card* c1, card* c2) { ...@@ -112,6 +105,13 @@ bool card::card_operation_sort(card* c1, card* c2) {
if(c2->current.sequence == pduel->game_field->player[cp2].list_main.size() - 1) if(c2->current.sequence == pduel->game_field->player[cp2].list_main.size() - 1)
return true; return true;
} }
// faceup deck cards should go at the very first
if(c1->current.position != c2->current.position) {
if(c1->current.position & POS_FACEUP)
return false;
else
return true;
}
// sort deck as card property // sort deck as card property
auto c1_type = c1->data.type & 0x7; auto c1_type = c1->data.type & 0x7;
auto c2_type = c2->data.type & 0x7; auto c2_type = c2->data.type & 0x7;
...@@ -119,14 +119,13 @@ bool card::card_operation_sort(card* c1, card* c2) { ...@@ -119,14 +119,13 @@ bool card::card_operation_sort(card* c1, card* c2) {
if(c1_type != c2_type) if(c1_type != c2_type)
return c1_type > c2_type; return c1_type > c2_type;
if(c1_type & TYPE_MONSTER) { if(c1_type & TYPE_MONSTER) {
// sort monster by level, then code if (c1->data.level != c2->data.level)
if(c1->data.level != c2->data.level) return c1->data.level > c2->data.level;
return c1->data.level < c2->data.level; // TODO: more sorts here
else }
return c1->data.code > c2->data.code; if(c1->data.code != c2->data.code)
} else
// spell and trap should go by code
return c1->data.code > c2->data.code; return c1->data.code > c2->data.code;
return c1->current.sequence > c2->current.sequence;
} else { } else {
if(c1->current.location & (LOCATION_DECK | LOCATION_EXTRA | LOCATION_GRAVE | LOCATION_REMOVED)) if(c1->current.location & (LOCATION_DECK | LOCATION_EXTRA | LOCATION_GRAVE | LOCATION_REMOVED))
return c1->current.sequence > c2->current.sequence; return c1->current.sequence > c2->current.sequence;
......
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