Commit 6f695c6a authored by Dark Zane's avatar Dark Zane Committed by GitHub

Merge branch 'fallenstardust:master' into master

parents 81fa4ca9 d1780756
......@@ -386,30 +386,32 @@ uint32_t DataManager::CardReader(uint32_t code, card_data* pData) {
pData->clear();
return 0;
}
unsigned char* DataManager::ScriptReaderEx(const char* script_name, int* slen) {
unsigned char* DataManager::ScriptReaderEx(const char* script_path, int* slen) {
// default script name: ./script/c%d.lua
if (std::strncmp(script_name, "./script", 8) != 0)
return DefaultScriptReader(script_name, slen);
if (std::strncmp(script_path, "./script", 8) != 0) // not a card script file
return ReadScriptFromFile(script_path, slen);
const char* script_name = script_path + 2;
char expansions_path[1024]{};
std::snprintf(expansions_path, sizeof expansions_path, "./expansions/%s", script_name + 2);
if(mainGame->gameConf.prefer_expansion_script) {
if (DefaultScriptReader(expansions_path, slen))
std::snprintf(expansions_path, sizeof expansions_path, "./expansions/%s", script_name);
if (mainGame->gameConf.prefer_expansion_script) { // debug script with raw file in expansions
if (ReadScriptFromFile(expansions_path, slen))
return scriptBuffer;
else if (ScriptReaderZip(script_name + 2, slen))
if (ReadScriptFromIrrFS(script_name, slen))
return scriptBuffer;
else if (DefaultScriptReader(script_name, slen))
if (ReadScriptFromFile(script_path, slen))
return scriptBuffer;
} else {
if (DefaultScriptReader(script_name, slen))
if (ReadScriptFromIrrFS(script_name, slen))
return scriptBuffer;
else if (DefaultScriptReader(expansions_path, slen))
if (ReadScriptFromFile(script_path, slen))
return scriptBuffer;
else if (ScriptReaderZip(script_name + 2, slen))
if (ReadScriptFromFile(expansions_path, slen))
return scriptBuffer;
}
return nullptr;
}
unsigned char* DataManager::ScriptReaderZip(const char* script_name, int* slen) {
unsigned char* DataManager::ReadScriptFromIrrFS(const char* script_name, int* slen) {
IReadFile* reader = FileSystem->createAndOpenFile(script_name);
if (!reader)
return nullptr;
......@@ -420,7 +422,7 @@ unsigned char* DataManager::ScriptReaderZip(const char* script_name, int* slen)
*slen = size;
return scriptBuffer;
}
unsigned char* DataManager::DefaultScriptReader(const char* script_name, int* slen) {
unsigned char* DataManager::ReadScriptFromFile(const char* script_name, int* slen) {
wchar_t fname[256]{};
BufferIO::DecodeUTF8(script_name, fname);
FILE* fp = myfopen(fname, "rb");
......
......@@ -82,13 +82,13 @@ public:
static unsigned char scriptBuffer[0x100000];
static const wchar_t* unknown_string;
static uint32_t CardReader(uint32_t, card_data*);
static unsigned char* ScriptReaderEx(const char* script_name, int* slen);
static unsigned char* ScriptReaderEx(const char* script_path, int* slen);
//read by IFileSystem
static unsigned char* ScriptReader(const char* script_name, int* slen);
static unsigned char* ReadScriptFromIrrFS(const char* script_name, int* slen);
//read by fread
static unsigned char* DefaultScriptReader(const char* script_name, int* slen);
static unsigned char* ScriptReaderZip(const char* script_name, int* slen);
static unsigned char* ReadScriptFromFile(const char* script_name, int* slen);
static irr::io::IFileSystem* FileSystem;
static bool deck_sort_lv(code_pointer l1, code_pointer l2);
......
......@@ -82,12 +82,12 @@ bool card::card_operation_sort(card* c1, card* c2) {
}
if(c1->current.location != c2->current.location)
return c1->current.location < c2->current.location;
if(c1->current.location & LOCATION_OVERLAY) {
if(c1->current.location == LOCATION_OVERLAY) {
if(c1->overlay_target && c2->overlay_target && c1->overlay_target->current.sequence != c2->overlay_target->current.sequence)
return c1->overlay_target->current.sequence < c2->overlay_target->current.sequence;
else
return c1->current.sequence < c2->current.sequence;
} else if (c1->current.location & LOCATION_DECK && pduel->game_field->is_select_hide_deck_sequence(cp1)) {
} else if (c1->current.location == LOCATION_DECK && pduel->game_field->is_select_hide_deck_sequence(cp1)) {
// 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)
......@@ -105,8 +105,8 @@ bool card::card_operation_sort(card* c1, card* c2) {
return c2_faceup;
}
// sort deck as card property
auto c1_type = c1->data.type & 0x7;
auto c2_type = c2->data.type & 0x7;
auto c1_type = c1->data.type & (TYPE_MONSTER | TYPE_SPELL | TYPE_TRAP);
auto c2_type = c2->data.type & (TYPE_MONSTER | TYPE_SPELL | TYPE_TRAP);
// monster should go before spell, and then trap
if(c1_type != c2_type)
return c1_type > c2_type;
......
......@@ -12,6 +12,7 @@
#include "effect.h"
#include "interpreter.h"
#include <cstring>
#include <algorithm>
int32_t field::field_used_count[32] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5};
......@@ -1094,11 +1095,9 @@ void field::reverse_deck(uint8_t playerid) {
if(count == 0)
return;
for(int32_t i = 0; i < count / 2; ++i) {
card* tmp = player[playerid].list_main[i];
tmp->current.sequence = count - 1 - i;
player[playerid].list_main[i]->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;
std::swap(player[playerid].list_main[i], player[playerid].list_main[count - 1 - i]);
}
}
void field::refresh_player_info(uint8_t playerid) {
......
......@@ -348,7 +348,7 @@ struct processor {
uint8_t current_player{ PLAYER_NONE };
uint8_t conti_player{ PLAYER_NONE };
uint8_t select_deck_sequence_revealed{ FALSE };
uint8_t selecting_player{ PLAYER_NONE };
uint8_t selecting_player{ 0 };
activity_map summon_counter;
activity_map normalsummon_counter;
activity_map spsummon_counter;
......
......@@ -261,10 +261,10 @@ int32_t field::select_card(uint16_t step, uint8_t playerid, uint8_t cancelable,
pduel->write_buffer8(min);
pduel->write_buffer8(max);
pduel->write_buffer8((uint8_t)core.select_cards.size());
uint8_t deck_seq_pointer = 0;
uint8_t deck_seq = 0;
for(auto& pcard : core.select_cards) {
pduel->write_buffer32(pcard->data.code);
pduel->write_buffer32(pcard->get_select_info_location(&deck_seq_pointer));
pduel->write_buffer32(pcard->get_select_info_location(&deck_seq));
}
return FALSE;
} else {
......@@ -305,15 +305,15 @@ int32_t field::select_unselect_card(uint16_t step, uint8_t playerid, uint8_t can
pduel->write_buffer8(min);
pduel->write_buffer8(max);
pduel->write_buffer8((uint8_t)core.select_cards.size());
uint8_t deck_seq_pointer = 0;
uint8_t deck_seq = 0;
for(auto& pcard : core.select_cards) {
pduel->write_buffer32(pcard->data.code);
pduel->write_buffer32(pcard->get_select_info_location(&deck_seq_pointer));
pduel->write_buffer32(pcard->get_select_info_location(&deck_seq));
}
pduel->write_buffer8((uint8_t)core.unselect_cards.size());
for(auto& pcard : core.unselect_cards) {
pduel->write_buffer32(pcard->data.code);
pduel->write_buffer32(pcard->get_select_info_location(&deck_seq_pointer));
pduel->write_buffer32(pcard->get_select_info_location(&deck_seq));
}
return FALSE;
} else {
......@@ -530,12 +530,12 @@ int32_t field::select_tribute(uint16_t step, uint8_t playerid, uint8_t cancelabl
pduel->write_buffer8(min);
pduel->write_buffer8(max);
pduel->write_buffer8((uint8_t)core.select_cards.size());
uint8_t deck_seq_pointer = 0;
uint8_t deck_seq = 0;
for(auto& pcard : core.select_cards) {
pduel->write_buffer32(pcard->data.code);
pduel->write_buffer8(pcard->current.controler);
pduel->write_buffer8(pcard->current.location);
pduel->write_buffer8(pcard->get_select_sequence(&deck_seq_pointer));
pduel->write_buffer8(pcard->get_select_sequence(&deck_seq));
pduel->write_buffer8(pcard->release_param);
}
return FALSE;
......@@ -605,12 +605,12 @@ int32_t field::select_counter(uint16_t step, uint8_t playerid, uint16_t countert
pduel->write_buffer8((uint8_t)core.select_cards.size());
core.selecting_player = playerid;
std::sort(core.select_cards.begin(), core.select_cards.end(), card::card_operation_sort);
uint8_t deck_seq_pointer = 0;
uint8_t deck_seq = 0;
for(auto& pcard : core.select_cards) {
pduel->write_buffer32(pcard->data.code);
pduel->write_buffer8(pcard->current.controler);
pduel->write_buffer8(pcard->current.location);
pduel->write_buffer8(pcard->get_select_sequence(&deck_seq_pointer));
pduel->write_buffer8(pcard->get_select_sequence(&deck_seq));
pduel->write_buffer16(pcard->get_counter(countertype));
}
return FALSE;
......@@ -663,12 +663,12 @@ int32_t field::select_with_sum_limit(int16_t step, uint8_t playerid, int32_t acc
pduel->write_buffer8(min);
pduel->write_buffer8(max);
pduel->write_buffer8((uint8_t)core.must_select_cards.size());
uint8_t deck_seq_pointer = 0;
uint8_t deck_seq = 0;
for(auto& pcard : core.must_select_cards) {
pduel->write_buffer32(pcard->data.code);
pduel->write_buffer8(pcard->current.controler);
pduel->write_buffer8(pcard->current.location);
pduel->write_buffer8(pcard->get_select_sequence(&deck_seq_pointer));
pduel->write_buffer8(pcard->get_select_sequence(&deck_seq));
pduel->write_buffer32(pcard->sum_param);
}
pduel->write_buffer8((uint8_t)core.select_cards.size());
......@@ -676,7 +676,7 @@ int32_t field::select_with_sum_limit(int16_t step, uint8_t playerid, int32_t acc
pduel->write_buffer32(pcard->data.code);
pduel->write_buffer8(pcard->current.controler);
pduel->write_buffer8(pcard->current.location);
pduel->write_buffer8(pcard->get_select_sequence(&deck_seq_pointer));
pduel->write_buffer8(pcard->get_select_sequence(&deck_seq));
pduel->write_buffer32(pcard->sum_param);
}
return FALSE;
......
......@@ -24,6 +24,7 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.utils.YGOUtil;
import ocgcore.data.Card;
......@@ -288,52 +289,8 @@ public class BaseActivity extends AppCompatActivity {
// getContext().startActivity(new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, Uri.parse("package:" + getContext().getPackageName())).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
// }
} else {
showToast("喵不给我权限让我怎么运行?!");
YGOUtil.showTextToast("喵不给我权限让我怎么运行?!");
finish();
}
}
@SuppressLint("ShowToast")
private Toast makeToast() {
if (mToast == null) {
mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
}
return mToast;
}
/**
* Set how long to show the view for.
*
* @see android.widget.Toast#LENGTH_SHORT
* @see android.widget.Toast#LENGTH_LONG
*/
public void showToast(int id, int duration) {
showToast(getString(id), duration);
}
public void showToast(CharSequence text) {
showToast(text, Toast.LENGTH_SHORT);
}
public void showToast(int id) {
showToast(getString(id));
}
/**
* Set how long to show the view for.
*
* @see android.widget.Toast#LENGTH_SHORT
* @see android.widget.Toast#LENGTH_LONG
*/
public void showToast(CharSequence text, int duration) {
if (Looper.myLooper() != Looper.getMainLooper()) {
runOnUiThread(() -> showToast(text, duration));
return;
}
Toast toast = makeToast();
toast.setText(text);
toast.setGravity(Gravity.TOP, 0, 0);
toast.setDuration(duration);
toast.show();
}
}
......@@ -13,6 +13,7 @@ import java.io.IOException;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.utils.FileLogUtil;
import cn.garymb.ygomobile.utils.YGOUtil;
public class FileLogActivity extends BaseActivity {
......@@ -51,10 +52,10 @@ public class FileLogActivity extends BaseActivity {
public void onClick(DialogInterface dialog, int which) {
try {
FileLogUtil.clear();
showToast("清空完毕");
YGOUtil.showTextToast("清空完毕");
tv_log.setText("");
} catch (IOException e) {
showToast("清空失败,原因为"+e.getMessage());
YGOUtil.showTextToast("清空失败,原因为"+e.getMessage());
}
dialog.dismiss();
}
......
......@@ -7,7 +7,6 @@ import android.content.Intent;
import android.graphics.Color;
import android.os.Handler;
import android.os.Message;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextPaint;
import android.text.TextUtils;
......@@ -35,7 +34,9 @@ import com.feihua.dialogutils.util.DialogUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.Stack;
import cn.garymb.ygomobile.AppsSettings;
......@@ -43,7 +44,6 @@ import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.core.IrrlichtBridge;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.loader.CardLoader;
import cn.garymb.ygomobile.loader.CardSearchInfo;
import cn.garymb.ygomobile.loader.ImageLoader;
import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.adapters.BaseAdapterPlus;
......@@ -115,7 +115,6 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
private Button btn_redownload;
private Button btn_share;
private boolean isDownloadCardImage = true;
private List<String> spanStringList = new ArrayList<>();
@SuppressLint("HandlerLeak")
Handler handler = new Handler() {
......@@ -147,6 +146,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
}
}
};
private List<String> spanStringList = new ArrayList<>();
private Shimmer shimmer;
private boolean mShowAdd = false;
private OnFavoriteChangedListener mOnFavoriteChangedListener;
......@@ -355,7 +355,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
if (stack.isEmpty()) {
String quotedText = text.substring(start, i).trim();
// 使用 queryable 方法判断是否高亮
applySpan(spannableString, start, i, queryable(quotedText)? YGOUtil.c(R.color.holo_blue_bright) : Color.WHITE);
applySpan(spannableString, start, i, queryable(quotedText) ? YGOUtil.c(R.color.holo_blue_bright) : Color.WHITE);
spanStringList.add(quotedText);
currentQuoteType = QuoteType.NONE;
}
......@@ -367,7 +367,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
stack.pop();
if (stack.isEmpty()) {
String quotedText = text.substring(start, i).trim();
applySpan(spannableString, start, i, queryable(quotedText)? YGOUtil.c(R.color.holo_blue_bright) : Color.WHITE);
applySpan(spannableString, start, i, queryable(quotedText) ? YGOUtil.c(R.color.holo_blue_bright) : Color.WHITE);
spanStringList.add(quotedText);
currentQuoteType = QuoteType.NONE;
} else {
......@@ -408,27 +408,39 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
}
private List<Card> queryList(String keyword) {
// 获取关键词对应的 setcode
long setcode = DataManager.get().getStringManager().getSetCode(keyword);
// 从 cardManager 获取所有卡片
SparseArray<Card> cards = cardManager.getAllCards();
List<Card> matchingCards = new ArrayList<>();
if (cards == null) {
return new ArrayList<>();
}
// 使用 HashSet 来保存匹配的卡片,避免重复并提高查找效率
Set<Card> matchingCards = new HashSet<>();
// 建立CardInfo拥有的字段表
List<Long> cardInfoSetCodes = new ArrayList<>();
// 检查关键词是否存在于卡片名字或描述中
for (int i = 0; i < cards.size(); i++) {
Card card = cards.valueAt(i);
cardInfoSetCodes.clear();//每张卡调用前都清空字段表以防重复
// 如果 card.Name 或 card.Desc 为 null,则跳过该卡片
if (card.Name == null && card.Desc == null) continue;
// 清空字段表以防重复累加
cardInfoSetCodes.clear();
// 将 card 的 setCode 转换为 List<Long>
for (long setCode : card.getSetCode()) {
if (setCode > 0) cardInfoSetCodes.add(setCode);
}
//关键词如果有对应字段则添加进去
if (cardInfoSetCodes.contains(setcode) && !matchingCards.contains(card)) matchingCards.add(card);
// 确保 card.Name 和 card.Desc 不为 null
if ((card.Name != null && card.Name.contains(keyword)) || (card.Desc != null && card.Desc.contains(keyword))) {
if (!matchingCards.contains(card)) matchingCards.add(card);
// 检查关键词是否有对应字段
if (setcode > 0 && cardInfoSetCodes.contains(setcode)) {
matchingCards.add(card);
}
// 检查关键词是否存在于卡片名字或描述中
if ((card.Name != null && card.Name.contains(keyword)) ||
(card.Desc != null && card.Desc.contains(keyword))) {
matchingCards.add(card);
}
}
return matchingCards;
// 将结果转换回 List<Card>
return new ArrayList<>(matchingCards);
}
private boolean queryable(String keyword) {
......@@ -458,42 +470,45 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
private List<Card> relatedCards(Card cardInfo) {
SparseArray<Card> cards = cardManager.getAllCards();
// 使用 HashSet 来保存匹配的卡片,避免重复并提高查找效率
Set<Card> matchingCards = new HashSet<>();
// 新创建一个表避免外部修改原本的表
List<String> highlightedTexts = new ArrayList<>(spanStringList);
// 使用 ArrayList 来保存匹配的卡片
List<Card> matchingCards = new ArrayList<>();
// 将 cardInfo 的 setCode 转换为 List<Long>
List<Long> cardInfoSetCodes = new ArrayList<>();
// 将 cardInfo 的 setCode 转换为 Set<Long>
Set<Long> cardInfoSetCodes = new HashSet<>();
for (long setCode : cardInfo.getSetCode()) {
if (setCode != 0) cardInfoSetCodes.add(setCode);
}
Log.w("cc cardInfoSetCodes", cardInfoSetCodes.toString());
for (int i = 0; i < cards.size(); i++) {
Card card = cards.valueAt(i);
// 空值检查
if (card.Name == null || card.Desc == null) continue;
// 检查卡片名或描述是否包含给定卡片的名字
if (!card.Name.equals(cardInfo.Name) && (card.Name.contains(cardInfo.Name) || card.Desc.contains(cardInfo.Name))) {
// 检查卡片是否已经存在于匹配列表中
if (!matchingCards.contains(card)) matchingCards.add(card);
if (!card.Name.equals(cardInfo.Name)) {
if ((card.Name != null && card.Name.contains(cardInfo.Name)) ||
(card.Desc != null && card.Desc.contains(cardInfo.Name))) {
matchingCards.add(card);
}
}
// 获取卡片的字段并检查是否有相同的字段
for (long setCode : card.getSetCode()) {
if (cardInfoSetCodes.contains(setCode)) {
if (!matchingCards.contains(card) && !card.Name.equals(cardInfo.Name)) matchingCards.add(card);
if (!card.Name.equals(cardInfo.Name))
matchingCards.add(card);
}
}
for (String keyword : highlightedTexts) {
if ((card.Name != null && card.Name.equals(keyword)) //和关键词完全一致的视为关联卡
|| (card.Desc != null && (card.Desc.contains("「" + keyword + "」") || card.Desc.contains("\"" + keyword + "\"")))) {//描述中关键词指向的字段一致的视为关联卡
if (!matchingCards.contains(card) && !card.Name.equals(cardInfo.Name)) matchingCards.add(card);
boolean nameMatch = card.Name != null && card.Name.equals(keyword);
boolean descMatch = card.Desc != null && (card.Desc.contains("「" + keyword + "」") || card.Desc.contains("\"" + keyword + "\""));
if (nameMatch || descMatch) { // 和关键词完全一致的视为关联卡
if (!card.Name.equals(cardInfo.Name))
matchingCards.add(card);
}
}
}
return matchingCards;
// 将结果转换回 List<Card>
return new ArrayList<>(matchingCards);
}
private void setCardInfo(Card cardInfo, View view) {
......@@ -670,7 +685,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
}
private void downloadCardImage(int code, boolean force) {
if (cardManager.getCard(code) == null) {
if (String.valueOf(Math.abs(code)).length() >= 9) {
YGOUtil.showTextToast(context.getString(R.string.tip_expansions_image));
return;
}
......@@ -734,47 +749,49 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
public void onPreCard() {
int position = getCurPosition();
CardListProvider provider = getProvider();
if (position == 0) {
getContext().showToast(R.string.already_top, Toast.LENGTH_SHORT);
} else {
int index = position;
do {
if (index == 0) {
getContext().showToast(R.string.already_top, Toast.LENGTH_SHORT);
int cardsCount = provider.getCardsCount();
Log.w("cc onPreCard", position + "/" + cardsCount);
// 如果已经在顶部,显示提示并返回
if (position <= 0) {
YGOUtil.showTextToast(R.string.already_top, Toast.LENGTH_SHORT);
return;
} else {
index--;
}
} while (provider.getCard(index) == null || provider.getCard(index).Name == null || provider.getCard(position).Name.equals(provider.getCard(index).Name));
bind(provider.getCard(index), index, provider);
if (position == 1) {
getContext().showToast(R.string.already_top, Toast.LENGTH_SHORT);
// 向前查找有效卡片
for (int index = position - 1; index >= 0; index--) {
//当进行高亮词、关联卡片查询到的结果比原列表少时,进行以下判断处理,避免index溢出错误
if (index > cardsCount) {
index = 0;
position = cardsCount - 1;
}
Card card = provider.getCard(index);
if (card != null && card.Name != null && !provider.getCard(position).Name.equals(card.Name)) {
bind(card, index, provider);
return;
}
}
// 如果没有找到合适的前一张卡片(所有卡片名称相同或为null),显示提示
YGOUtil.showTextToast(R.string.already_top, Toast.LENGTH_SHORT);
}
public void onNextCard() {
int position = getCurPosition();
CardListProvider provider = getProvider();
if (position < provider.getCardsCount() - 1) {
int index = position;
do {
if (index == provider.getCardsCount() - 1) {
getContext().showToast(R.string.already_end, Toast.LENGTH_SHORT);
int cardsCount = provider.getCardsCount();
// 如果已经在底部,显示提示并返回
if (position >= cardsCount - 1) {
YGOUtil.showTextToast(R.string.already_end, Toast.LENGTH_SHORT);
return;
} else {
index++;
}
} while (provider.getCard(index) == null || provider.getCard(index).Name == null || provider.getCard(position).Name.equals(provider.getCard(index).Name));
bind(provider.getCard(index), index, provider);
if (position == provider.getCardsCount() - 1) {
getContext().showToast(R.string.already_end, Toast.LENGTH_SHORT);
// 向后查找有效卡片
for (int index = position + 1; index < cardsCount; index++) {
Card card = provider.getCard(index);
if (card != null && card.Name != null && !provider.getCard(position).Name.equals(card.Name)) {
bind(card, index, provider);
return;
}
} else {
getContext().showToast(R.string.already_end, Toast.LENGTH_SHORT);
}
// 如果没有找到合适的下一张卡片(所有卡片名称相同或为null),显示提示
YGOUtil.showTextToast(R.string.already_end, Toast.LENGTH_SHORT);
}
// 定义引号类型
......
......@@ -634,9 +634,9 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
if (checkLimit(cardInfo)) {
boolean rs = mDeckAdapater.AddCard(cardInfo, DeckItemType.SideCard);
if (rs) {
activity.showToast(R.string.add_card_tip_ok);
YGOUtil.showTextToast(R.string.add_card_tip_ok);
} else {
activity.showToast(R.string.add_card_tip_fail);
YGOUtil.showTextToast(R.string.add_card_tip_fail);
}
return rs;
}
......@@ -652,9 +652,9 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
rs = mDeckAdapater.AddCard(cardInfo, DeckItemType.MainCard);
}
if (rs) {
activity.showToast(R.string.add_card_tip_ok);
YGOUtil.showTextToast(R.string.add_card_tip_ok);
} else {
activity.showToast(R.string.add_card_tip_fail);
YGOUtil.showTextToast(R.string.add_card_tip_fail);
}
return rs;
}
......
......@@ -26,6 +26,7 @@ import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.YGOUtil;
import ocgcore.DataManager;
import ocgcore.data.Card;
import ocgcore.enums.CardType;
......@@ -328,9 +329,9 @@ public class ImageUpdater implements DialogInterface.OnCancelListener {
}
VUiKit.post(() -> {
if (mError == 0) {
mContext.showToast(R.string.downloading_images_ok, Toast.LENGTH_SHORT);
YGOUtil.showTextToast(R.string.downloading_images_ok, Toast.LENGTH_SHORT);
} else {
mContext.showToast(mContext.getString(R.string.download_image_error, mError), Toast.LENGTH_SHORT);
YGOUtil.showTextToast(mContext.getString(R.string.download_image_error, mError), Toast.LENGTH_SHORT);
}
});
}
......
......@@ -65,7 +65,7 @@ public class MainActivity extends HomeActivity implements BottomNavigationBar.On
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// for(int i=0;i<permissions.length;i++){
// if(grantResults[i] == PackageManager.PERMISSION_DENIED){
// showToast(getString(R.string.tip_no_permission,permissions[i]));
// YGOUtil.showTextToast(getString(R.string.tip_no_permission,permissions[i]));
// break;
// }
// }
......
......@@ -473,7 +473,106 @@ public interface ComparisonTableUtil {
100233201,
100233018,
100233019,
100233020
100233020,
100230501,
100200265,
101207081,
101207082,
101207083,
101207084,
101207085,
101207086,
101207087,
101207088,
101207089,
101207090,
101207091,
101207092,
101207093,
101207094,
101207095,
101207096,
101208000,
101208201,
101208202,
101208203,
101208004,
101208005,
101208006,
101208007,
101208008,
101208009,
101208010,
101208011,
101208012,
101208013,
101208014,
101208015,
101208016,
101208017,
101208018,
101208019,
101208020,
101208021,
101208022,
101208023,
101208024,
101208025,
101208026,
101208027,
101208028,
101208029,
101208030,
101208031,
101208032,
101208033,
101208034,
101208035,
101208036,
101208037,
101208204,
101208039,
101208040,
101208041,
101208042,
101208043,
101208205,
101208045,
101208046,
101208047,
101208048,
101208049,
101208050,
101208206,
101208052,
101208053,
101208207,
101208055,
101208056,
101208057,
101208058,
101208059,
101208060,
101208061,
101208062,
101208063,
101208064,
101208065,
101208066,
101208067,
101208068,
101208069,
101208208,
101208071,
101208072,
101208073,
101208074,
101208075,
101208076,
101208077,
101208078,
101208079,
101208080
};
int[] newIDsArray = {
......@@ -945,6 +1044,105 @@ public interface ComparisonTableUtil {
875572,
37260677,
73664385,
59080
59080,
66429798,
93413793,
21960890,
58354899,
94749594,
21147203,
57232301,
83626916,
20011655,
56410769,
83404468,
82782870,
18176525,
19899073,
55397172,
45171524,
81560239,
17954937,
58931850,
3723262,
30118811,
66102515,
2501624,
35095329,
61480937,
98888032,
34873741,
60268386,
97662494,
23151193,
60145298,
96540807,
22938501,
59323650,
95718355,
22812963,
58201062,
94655777,
21050476,
57448410,
84433129,
20938824,
56322832,
83711531,
19715246,
56100345,
82699999,
19093698,
45488703,
81476402,
18861006,
44265115,
71750854,
17749468,
43143567,
70538272,
16926971,
43321985,
79415624,
5800323,
42209438,
78693036,
5088741,
31086840,
77571454,
4965193,
30350202,
67359907,
3743515,
39138610,
6636319,
42021064,
79015062,
5414777,
31809476,
78293584,
4398189,
31786838,
67171933,
4575541,
30964246,
66059345,
93453053,
39848658,
66236707,
92221402,
38625110,
65114115,
91509824,
28903523,
64998567,
90386276,
27781371,
53276089,
90664684,
22669793,
58053438,
85442146,
21846145
};
}
......@@ -40,7 +40,6 @@
android:layout_marginLeft="5dp"
android:background="@drawable/button2_bg"
android:gravity="center"
android:paddingRight="16dp"
android:shadowColor="@color/black"
android:text="@string/card_faq"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
......
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