From 86c2fe51c79c9e0071a29ebb263e52e8729d2be5 Mon Sep 17 00:00:00 2001 From: purerosefallen <78877@qq.com> Date: Tue, 14 May 2024 11:49:45 +0800 Subject: [PATCH] fix card_operation_sort segfault --- card.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/card.cpp b/card.cpp index 6c5111593..e052371f1 100644 --- a/card.cpp +++ b/card.cpp @@ -98,13 +98,6 @@ bool card::card_operation_sort(card* c1, card* c2) { else return c1->current.sequence < c2->current.sequence; } 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(pduel->game_field->core.deck_reversed) { 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) { if(c2->current.sequence == pduel->game_field->player[cp2].list_main.size() - 1) 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 auto c1_type = c1->data.type & 0x7; auto c2_type = c2->data.type & 0x7; @@ -119,14 +119,13 @@ bool card::card_operation_sort(card* c1, card* c2) { if(c1_type != c2_type) return c1_type > c2_type; if(c1_type & TYPE_MONSTER) { - // sort monster by level, then code - if(c1->data.level != c2->data.level) - return c1->data.level < c2->data.level; - else - return c1->data.code > c2->data.code; - } else - // spell and trap should go by code + if (c1->data.level != c2->data.level) + return c1->data.level > c2->data.level; + // TODO: more sorts here + } + if(c1->data.code != c2->data.code) return c1->data.code > c2->data.code; + return c1->current.sequence > c2->current.sequence; } else { if(c1->current.location & (LOCATION_DECK | LOCATION_EXTRA | LOCATION_GRAVE | LOCATION_REMOVED)) return c1->current.sequence > c2->current.sequence;