Commit 73ec03da authored by fallenstardust's avatar fallenstardust

2018.7禁卡表,重命名卡组,同步ygo

parent 27c50bcd
...@@ -304,6 +304,7 @@ void ClientField::UpdateCard(int controler, int location, int sequence, char* da ...@@ -304,6 +304,7 @@ void ClientField::UpdateCard(int controler, int location, int sequence, char* da
ClientCard* pcard = GetCard(controler, location, sequence); ClientCard* pcard = GetCard(controler, location, sequence);
if(pcard) if(pcard)
pcard->UpdateInfo(data + 4); pcard->UpdateInfo(data + 4);
RefreshCardCountDisplay();
} }
void ClientField::UpdateFieldCard(int controler, int location, char* data) { void ClientField::UpdateFieldCard(int controler, int location, char* data) {
std::vector<ClientCard*>* lst = 0; std::vector<ClientCard*>* lst = 0;
...@@ -339,6 +340,7 @@ void ClientField::UpdateFieldCard(int controler, int location, char* data) { ...@@ -339,6 +340,7 @@ void ClientField::UpdateFieldCard(int controler, int location, char* data) {
(*cit)->UpdateInfo(data); (*cit)->UpdateInfo(data);
data += len - 4; data += len - 4;
} }
RefreshCardCountDisplay();
} }
void ClientField::ClearCommandFlag() { void ClientField::ClearCommandFlag() {
for(auto cit = activatable_cards.begin(); cit != activatable_cards.end(); ++cit) for(auto cit = activatable_cards.begin(); cit != activatable_cards.end(); ++cit)
...@@ -654,6 +656,7 @@ void ClientField::ReplaySwap() { ...@@ -654,6 +656,7 @@ void ClientField::ReplaySwap() {
std::swap(mainGame->dInfo.strLP[0], mainGame->dInfo.strLP[1]); std::swap(mainGame->dInfo.strLP[0], mainGame->dInfo.strLP[1]);
std::swap(mainGame->dInfo.hostname, mainGame->dInfo.clientname); std::swap(mainGame->dInfo.hostname, mainGame->dInfo.clientname);
std::swap(mainGame->dInfo.hostname_tag, mainGame->dInfo.clientname_tag); std::swap(mainGame->dInfo.hostname_tag, mainGame->dInfo.clientname_tag);
RefreshCardCountDisplay();
for(auto chit = chains.begin(); chit != chains.end(); ++chit) { for(auto chit = chains.begin(); chit != chains.end(); ++chit) {
chit->controler = 1 - chit->controler; chit->controler = 1 - chit->controler;
GetChainLocation(chit->controler, chit->location, chit->sequence, &chit->chain_pos); GetChainLocation(chit->controler, chit->location, chit->sequence, &chit->chain_pos);
......
...@@ -191,6 +191,46 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -191,6 +191,46 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
} }
break; break;
} }
case BUTTON_RENAME_DECK: {
int sel = mainGame->cbDBDecks->getSelected();
if(sel == -1)
break;
mainGame->gMutex.Lock();
mainGame->wRenameDeck->setText(dataManager.GetSysString(1362));
mainGame->ebREName->setText(mainGame->cbDBDecks->getItem(sel));
mainGame->PopupElement(mainGame->wRenameDeck);
mainGame->gMutex.Unlock();
prev_operation = id;
prev_sel = sel;
break;
}
case BUTTON_RENAME_DECK_SAVE: {
mainGame->HideElement(mainGame->wRenameDeck);
if(prev_operation == BUTTON_RENAME_DECK) {
wchar_t newname[256];
BufferIO::CopyWStr(mainGame->ebREName->getText(), newname, 256);
if(wcsncasecmp(newname + wcslen(newname) - 4, L"", 4)) {
myswprintf(newname, L"%ls", mainGame->ebREName->getText());
}
if(DeckManager::RenameDeck(mainGame->cbDBDecks->getItem(prev_sel), newname)) {
mainGame->RefreshDeck(mainGame->cbDBDecks);
mainGame->cbDBDecks->setSelected(prev_sel);
mainGame->stACMessage->setText(dataManager.GetSysString(1366));
mainGame->PopupElement(mainGame->wACMessage, 20);
} else {
mainGame->env->addMessageBox(L"", dataManager.GetSysString(1365));
}
}
prev_operation = 0;
prev_sel = -1;
break;
}
case BUTTON_RENAME_DECK_CANCEL: {
mainGame->HideElement(mainGame->wRenameDeck);
prev_operation = 0;
prev_sel = -1;
break;
}
case BUTTON_DELETE_DECK: { case BUTTON_DELETE_DECK: {
int sel = mainGame->cbDBDecks->getSelected(); int sel = mainGame->cbDBDecks->getSelected();
if(sel == -1) if(sel == -1)
......
...@@ -8,7 +8,7 @@ namespace ygo { ...@@ -8,7 +8,7 @@ namespace ygo {
DeckManager deckManager; DeckManager deckManager;
void DeckManager::LoadLFList(const char* path) { void DeckManager::LoadLFList(const char* path, bool load_none) {
LFList* cur = NULL; LFList* cur = NULL;
FILE* fp = fopen(path, "r"); FILE* fp = fopen(path, "r");
char linebuf[256]; char linebuf[256];
...@@ -54,6 +54,23 @@ void DeckManager::LoadLFList(const char* path) { ...@@ -54,6 +54,23 @@ void DeckManager::LoadLFList(const char* path) {
nolimit.content = new std::unordered_map<int, int>; nolimit.content = new std::unordered_map<int, int>;
_lfList.push_back(nolimit); _lfList.push_back(nolimit);
} }
bool DeckManager::RenameDeck(const wchar_t* oldname, const wchar_t* newname) {
wchar_t oldfname[256];
wchar_t newfname[256];
myswprintf(oldfname, L"./deck/%ls.ydk", oldname);
myswprintf(newfname, L"./deck/%ls.ydk", newname);
#ifdef WIN32
BOOL result = MoveFileW(oldfname, newfname);
return !!result;
#else
char oldfilefn[256];
char newfilefn[256];
BufferIO::EncodeUTF8(oldfname, oldfilefn);
BufferIO::EncodeUTF8(newfname, newfilefn);
int result = rename(oldfilefn, newfilefn);
return result == 0;
#endif
}
wchar_t* DeckManager::GetLFListName(int lfhash) { wchar_t* DeckManager::GetLFListName(int lfhash) {
for(size_t i = 0; i < _lfList.size(); ++i) { for(size_t i = 0; i < _lfList.size(); ++i) {
if(_lfList[i].hash == (unsigned int)lfhash) { if(_lfList[i].hash == (unsigned int)lfhash) {
......
...@@ -35,7 +35,7 @@ public: ...@@ -35,7 +35,7 @@ public:
Deck current_deck; Deck current_deck;
std::vector<LFList> _lfList; std::vector<LFList> _lfList;
void LoadLFList(const char* path); void LoadLFList(const char* path, bool load_none);
wchar_t* GetLFListName(int lfhash); wchar_t* GetLFListName(int lfhash);
int CheckDeck(Deck& deck, int lfhash, bool allow_ocg, bool allow_tcg); int CheckDeck(Deck& deck, int lfhash, bool allow_ocg, bool allow_tcg);
int LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec); int LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec);
...@@ -44,6 +44,7 @@ public: ...@@ -44,6 +44,7 @@ public:
bool LoadDeck(const wchar_t* file); bool LoadDeck(const wchar_t* file);
bool SaveDeck(Deck& deck, const wchar_t* name); bool SaveDeck(Deck& deck, const wchar_t* name);
bool DeleteDeck(Deck& deck, const wchar_t* name); bool DeleteDeck(Deck& deck, const wchar_t* name);
static bool RenameDeck(const wchar_t* oldname, const wchar_t* newname);
}; };
extern DeckManager deckManager; extern DeckManager deckManager;
......
...@@ -3654,6 +3654,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -3654,6 +3654,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
} }
mainGame->WaitFrameSignal(5); mainGame->WaitFrameSignal(5);
} }
mainGame->dField.RefreshCardCountDisplay();
break; break;
} }
case MSG_RELOAD_FIELD: { case MSG_RELOAD_FIELD: {
......
...@@ -139,7 +139,8 @@ bool Game::Initialize() { ...@@ -139,7 +139,8 @@ bool Game::Initialize() {
menuHandler.prev_sel = -1; menuHandler.prev_sel = -1;
memset(&dInfo, 0, sizeof(DuelInfo)); memset(&dInfo, 0, sizeof(DuelInfo));
memset(chatTiming, 0, sizeof(chatTiming)); memset(chatTiming, 0, sizeof(chatTiming));
deckManager.LoadLFList((workingDir + path("/lflist.conf")).c_str()); deckManager.LoadLFList((workingDir + path("/expansions/lflist.conf")).c_str(), false);
deckManager.LoadLFList((workingDir + path("/lflist.conf")).c_str(), true);
driver = device->getVideoDriver(); driver = device->getVideoDriver();
#ifdef _IRR_ANDROID_PLATFORM_ #ifdef _IRR_ANDROID_PLATFORM_
int quality = options->getCardQualityOp(); int quality = options->getCardQualityOp();
...@@ -800,7 +801,7 @@ bool Game::Initialize() { ...@@ -800,7 +801,7 @@ bool Game::Initialize() {
#endif #endif
ebDeckname->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER); ebDeckname->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
btnSaveDeckAs = env->addButton(rect<s32>(225 * xScale, 65 * yScale, 290 * xScale, 90 * yScale), wDeckEdit, BUTTON_SAVE_DECK_AS, dataManager.GetSysString(1303)); btnSaveDeckAs = env->addButton(rect<s32>(225 * xScale, 65 * yScale, 290 * xScale, 90 * yScale), wDeckEdit, BUTTON_SAVE_DECK_AS, dataManager.GetSysString(1303));
btnDeleteDeck = env->addButton(rect<s32>(10 * xScale, 95 * yScale, 75 * xScale, 116 * yScale), wDeckEdit, BUTTON_DELETE_DECK, dataManager.GetSysString(1308)); btnDeleteDeck = env->addButton(rect<s32>(10 * xScale, 95 * yScale, 70 * xScale, 116 * yScale), wDeckEdit, BUTTON_DELETE_DECK, dataManager.GetSysString(1308));
btnShuffleDeck = env->addButton(rect<s32>(130 * xScale, 95 * yScale, 180 * xScale, 116 * yScale), wDeckEdit, BUTTON_SHUFFLE_DECK, dataManager.GetSysString(1307)); btnShuffleDeck = env->addButton(rect<s32>(130 * xScale, 95 * yScale, 180 * xScale, 116 * yScale), wDeckEdit, BUTTON_SHUFFLE_DECK, dataManager.GetSysString(1307));
btnSortDeck = env->addButton(rect<s32>(185 * xScale, 95 * yScale, 235 * xScale, 116 * yScale), wDeckEdit, BUTTON_SORT_DECK, dataManager.GetSysString(1305)); btnSortDeck = env->addButton(rect<s32>(185 * xScale, 95 * yScale, 235 * xScale, 116 * yScale), wDeckEdit, BUTTON_SORT_DECK, dataManager.GetSysString(1305));
btnClearDeck = env->addButton(rect<s32>(240 * xScale, 95 * yScale, 290 * xScale, 116 * yScale), wDeckEdit, BUTTON_CLEAR_DECK, dataManager.GetSysString(1304)); btnClearDeck = env->addButton(rect<s32>(240 * xScale, 95 * yScale, 290 * xScale, 116 * yScale), wDeckEdit, BUTTON_CLEAR_DECK, dataManager.GetSysString(1304));
...@@ -812,11 +813,21 @@ bool Game::Initialize() { ...@@ -812,11 +813,21 @@ bool Game::Initialize() {
btnSideSort->setVisible(false); btnSideSort->setVisible(false);
btnSideReload = env->addButton(rect<s32>(440 * xScale, 100 * yScale, 500 * xScale, 130 * yScale), 0, BUTTON_SIDE_RELOAD, dataManager.GetSysString(1309)); btnSideReload = env->addButton(rect<s32>(440 * xScale, 100 * yScale, 500 * xScale, 130 * yScale), 0, BUTTON_SIDE_RELOAD, dataManager.GetSysString(1309));
btnSideReload->setVisible(false); btnSideReload->setVisible(false);
btnRenameDeck = env->addButton(rect<s32>(75 * xScale, 95 * yScale, 125 * xScale, 116 * yScale), wDeckEdit, BUTTON_RENAME_DECK, dataManager.GetSysString(1362));
// //
scrFilter = env->addScrollBar(false, recti(999 * xScale, 161 * yScale, 1019 * xScale, 629 * yScale), 0, SCROLL_FILTER); scrFilter = env->addScrollBar(false, recti(999 * xScale, 161 * yScale, 1019 * xScale, 629 * yScale), 0, SCROLL_FILTER);
scrFilter->setLargeStep(10); scrFilter->setLargeStep(10);
scrFilter->setSmallStep(1); scrFilter->setSmallStep(1);
scrFilter->setVisible(false); scrFilter->setVisible(false);
//rename deck
wRenameDeck = env->addWindow(rect<s32>(490 * xScale, 180 * yScale, 840 * xScale, 340 * yScale), false, dataManager.GetSysString(1367));
wRenameDeck->getCloseButton()->setVisible(false);
wRenameDeck->setVisible(false);
//env->addStaticText(dataManager.GetSysString(1362), rect<s32>(20 * xScale, 25 * yScale, 290 * xScale, 45 * yScale), false, false, wRenameDeck);
ebREName = CAndroidGUIEditBox::addAndroidEditBox(L"", true, env, rect<s32>(20 * xScale, 50 * yScale, 330 * xScale, 90 * yScale), wRenameDeck, -1);
ebREName->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
btnREYes = env->addButton(rect<s32>(70 * xScale, 100 * yScale, 160 * xScale, 150 * yScale), wRenameDeck, BUTTON_RENAME_DECK_SAVE, dataManager.GetSysString(1341));
btnRENo = env->addButton(rect<s32>(180 * xScale, 100 * yScale, 270 * xScale, 150 * yScale), wRenameDeck, BUTTON_RENAME_DECK_CANCEL, dataManager.GetSysString(1212));
//sort type //sort type
wSort = env->addStaticText(L"", rect<s32>(930 * xScale, 132 * yScale, 1020 * xScale, 156 * yScale), true, false, 0, -1, true); wSort = env->addStaticText(L"", rect<s32>(930 * xScale, 132 * yScale, 1020 * xScale, 156 * yScale), true, false, 0, -1, true);
cbSortType = env->addComboBox(rect<s32>(10 * xScale, 2 * yScale, 85 * xScale, 22 * yScale), wSort, COMBOBOX_SORTTYPE); cbSortType = env->addComboBox(rect<s32>(10 * xScale, 2 * yScale, 85 * xScale, 22 * yScale), wSort, COMBOBOX_SORTTYPE);
...@@ -987,12 +998,12 @@ bool Game::Initialize() { ...@@ -987,12 +998,12 @@ bool Game::Initialize() {
chkBotHand = env->addCheckBox(false, rect<s32>(360 * xScale, 170 * yScale, 560 * xScale, 190 * yScale), tabBot, -1, dataManager.GetSysString(1384)); chkBotHand = env->addCheckBox(false, rect<s32>(360 * xScale, 170 * yScale, 560 * xScale, 190 * yScale), tabBot, -1, dataManager.GetSysString(1384));
chkBotNoCheckDeck = env->addCheckBox(false, rect<s32>(360 * xScale, 200 * yScale, 560 * xScale, 220 * yScale), tabBot, -1, dataManager.GetSysString(1229)); chkBotNoCheckDeck = env->addCheckBox(false, rect<s32>(360 * xScale, 200 * yScale, 560 * xScale, 220 * yScale), tabBot, -1, dataManager.GetSysString(1229));
chkBotNoShuffleDeck = env->addCheckBox(false, rect<s32>(360 * xScale, 230 * yScale, 560 * xScale, 250 * yScale), tabBot, -1, dataManager.GetSysString(1230)); chkBotNoShuffleDeck = env->addCheckBox(false, rect<s32>(360 * xScale, 230 * yScale, 560 * xScale, 250 * yScale), tabBot, -1, dataManager.GetSysString(1230));
} else { // avoid null pointer } /*else { // avoid null pointer
btnStartBot = env->addButton(rect<s32>(0, 0, 0, 0), wSinglePlay); btnStartBot = env->addButton(rect<s32>(0, 0, 0, 0), wSinglePlay);
btnBotCancel = env->addButton(rect<s32>(0, 0, 0, 0), wSinglePlay); btnBotCancel = env->addButton(rect<s32>(0, 0, 0, 0), wSinglePlay);
btnStartBot->setVisible(false); btnStartBot->setVisible(false);
btnBotCancel->setVisible(false); btnBotCancel->setVisible(false);
} }*/
irr::gui::IGUITab* tabSingle = wSingle->addTab(dataManager.GetSysString(1381)); irr::gui::IGUITab* tabSingle = wSingle->addTab(dataManager.GetSysString(1381));
lstSinglePlayList = CAndroidGUIListBox::addAndroidGUIListBox(env, rect<s32>(10 * xScale, 10 * yScale, 350 * xScale, 350 * yScale), tabSingle, LISTBOX_SINGLEPLAY_LIST, true, 40 * xScale); lstSinglePlayList = CAndroidGUIListBox::addAndroidGUIListBox(env, rect<s32>(10 * xScale, 10 * yScale, 350 * xScale, 350 * yScale), tabSingle, LISTBOX_SINGLEPLAY_LIST, true, 40 * xScale);
......
...@@ -413,6 +413,12 @@ public: ...@@ -413,6 +413,12 @@ public:
irr::gui::IGUIButton* btnSideSort; irr::gui::IGUIButton* btnSideSort;
irr::gui::IGUIButton* btnSideReload; irr::gui::IGUIButton* btnSideReload;
irr::gui::IGUIEditBox* ebDeckname; irr::gui::IGUIEditBox* ebDeckname;
irr::gui::IGUIButton* btnRenameDeck;
//deck rename
irr::gui::IGUIWindow* wRenameDeck;
irr::gui::IGUIEditBox* ebREName;
irr::gui::IGUIButton* btnREYes;
irr::gui::IGUIButton* btnRENo;
//filter //filter
irr::gui::IGUIStaticText* wFilter; irr::gui::IGUIStaticText* wFilter;
irr::gui::IGUIScrollBar* scrFilter; irr::gui::IGUIScrollBar* scrFilter;
...@@ -629,6 +635,10 @@ extern Game* mainGame; ...@@ -629,6 +635,10 @@ extern Game* mainGame;
#define BUTTON_MARKS_FILTER 380 #define BUTTON_MARKS_FILTER 380
#define BUTTON_MARKERS_OK 381 #define BUTTON_MARKERS_OK 381
#define BUTTON_RENAME_DECK 386
#define BUTTON_RENAME_DECK_SAVE 387
#define BUTTON_RENAME_DECK_CANCEL 388
#define DEFAULT_DUEL_RULE 4 #define DEFAULT_DUEL_RULE 4
#ifdef _IRR_ANDROID_PLATFORM_ #ifdef _IRR_ANDROID_PLATFORM_
......
...@@ -52,6 +52,7 @@ bool ImageManager::Initial(const path dir) { ...@@ -52,6 +52,7 @@ bool ImageManager::Initial(const path dir) {
support_types.push_back(std::string("jpg")); support_types.push_back(std::string("jpg"));
support_types.push_back(std::string("png")); support_types.push_back(std::string("png"));
support_types.push_back(std::string("bpg")); support_types.push_back(std::string("bpg"));
image_work_path = dir;
return true; return true;
} }
void ImageManager::SetDevice(irr::IrrlichtDevice* dev) { void ImageManager::SetDevice(irr::IrrlichtDevice* dev) {
...@@ -87,13 +88,22 @@ irr::video::ITexture* ImageManager::GetTexture(int code) { ...@@ -87,13 +88,22 @@ irr::video::ITexture* ImageManager::GetTexture(int code) {
sprintf(file, "expansions/pics/%d.jpg", code); sprintf(file, "expansions/pics/%d.jpg", code);
irr::video::ITexture* img = NULL; irr::video::ITexture* img = NULL;
std::list<std::string>::iterator iter; std::list<std::string>::iterator iter;
for (iter = support_types.begin(); iter != support_types.end(); ++iter) { for (iter = support_types.begin(); iter != support_types.end(); ++iter) {
sprintf(file, "%s/%d.%s", irr::android::getCardImagePath(mainGame->appMain).c_str(), code, iter->c_str()); sprintf(file, "/expansions/pics/%d.%s", code, iter->c_str());
img = driver->getTexture(file); img = driver->getTexture(image_work_path + path(file));
if (img != NULL) { if (img != NULL) {
break; break;
} }
} }
if(img == NULL) {
for (iter = support_types.begin(); iter != support_types.end(); ++iter) {
sprintf(file, "%s/%d.%s", irr::android::getCardImagePath(mainGame->appMain).c_str(), code, iter->c_str());
img = driver->getTexture(file);
if (img != NULL) {
break;
}
}
}
if(img == NULL){//sdcard first, then zip if(img == NULL){//sdcard first, then zip
for (iter = support_types.begin(); iter != support_types.end(); ++iter) { for (iter = support_types.begin(); iter != support_types.end(); ++iter) {
sprintf(file, "pics/%d.%s", code, iter->c_str()); sprintf(file, "pics/%d.%s", code, iter->c_str());
...@@ -121,6 +131,8 @@ irr::video::ITexture* ImageManager::GetTexture(int code) { ...@@ -121,6 +131,8 @@ irr::video::ITexture* ImageManager::GetTexture(int code) {
return GetTextureThumb(code); return GetTextureThumb(code);
} }
irr::video::ITexture* ImageManager::GetTextureThumb(int code) { irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
return tUnknown;
/*
if(code == 0) if(code == 0)
return tUnknown; return tUnknown;
auto tit = tThumb.find(code); auto tit = tThumb.find(code);
...@@ -140,6 +152,7 @@ irr::video::ITexture* ImageManager::GetTextureThumb(int code) { ...@@ -140,6 +152,7 @@ irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
return tit->second; return tit->second;
else else
return tUnknown; return tUnknown;
*/
} }
irr::video::ITexture* ImageManager::GetTextureField(int code) { irr::video::ITexture* ImageManager::GetTextureField(int code) {
if(code == 0) if(code == 0)
......
...@@ -18,6 +18,8 @@ public: ...@@ -18,6 +18,8 @@ public:
irr::video::ITexture* GetTexture(int code); irr::video::ITexture* GetTexture(int code);
irr::video::ITexture* GetTextureThumb(int code); irr::video::ITexture* GetTextureThumb(int code);
irr::video::ITexture* GetTextureField(int code); irr::video::ITexture* GetTextureField(int code);
path image_work_path;
std::unordered_map<int, irr::video::ITexture*> tMap; std::unordered_map<int, irr::video::ITexture*> tMap;
std::unordered_map<int, irr::video::ITexture*> tThumb; std::unordered_map<int, irr::video::ITexture*> tThumb;
......
...@@ -3135,7 +3135,7 @@ int32 field::is_player_can_spsummon(effect* peffect, uint32 sumtype, uint8 sumpo ...@@ -3135,7 +3135,7 @@ int32 field::is_player_can_spsummon(effect* peffect, uint32 sumtype, uint8 sumpo
} }
restore_lp_cost(); restore_lp_cost();
if(sumpos & POS_FACEDOWN && is_player_affected_by_effect(playerid, EFFECT_DEVINE_LIGHT)) if(sumpos & POS_FACEDOWN && is_player_affected_by_effect(playerid, EFFECT_DEVINE_LIGHT))
sumpos = (sumpos & POS_FACEUP) | (sumpos >> 1); sumpos = (sumpos & POS_FACEUP) | ((sumpos & POS_FACEDOWN) >> 1);
effect_set eset; effect_set eset;
filter_player_effect(playerid, EFFECT_CANNOT_SPECIAL_SUMMON, &eset); filter_player_effect(playerid, EFFECT_CANNOT_SPECIAL_SUMMON, &eset);
for(int32 i = 0; i < eset.size(); ++i) { for(int32 i = 0; i < eset.size(); ++i) {
......
...@@ -156,7 +156,7 @@ void field::special_summon_rule(uint32 sumplayer, card* target, uint32 summon_ty ...@@ -156,7 +156,7 @@ void field::special_summon_rule(uint32 sumplayer, card* target, uint32 summon_ty
} }
void field::special_summon(card_set* target, uint32 sumtype, uint32 sumplayer, uint32 playerid, uint32 nocheck, uint32 nolimit, uint32 positions, uint32 zone) { void field::special_summon(card_set* target, uint32 sumtype, uint32 sumplayer, uint32 playerid, uint32 nocheck, uint32 nolimit, uint32 positions, uint32 zone) {
if((positions & POS_FACEDOWN) && is_player_affected_by_effect(sumplayer, EFFECT_DEVINE_LIGHT)) if((positions & POS_FACEDOWN) && is_player_affected_by_effect(sumplayer, EFFECT_DEVINE_LIGHT))
positions = (positions & POS_FACEUP) | (positions >> 1); positions = (positions & POS_FACEUP) | ((positions & POS_FACEDOWN) >> 1);
for(auto cit = target->begin(); cit != target->end(); ++cit) { for(auto cit = target->begin(); cit != target->end(); ++cit) {
card* pcard = *cit; card* pcard = *cit;
pcard->temp.reason = pcard->current.reason; pcard->temp.reason = pcard->current.reason;
...@@ -175,7 +175,7 @@ void field::special_summon(card_set* target, uint32 sumtype, uint32 sumplayer, u ...@@ -175,7 +175,7 @@ void field::special_summon(card_set* target, uint32 sumtype, uint32 sumplayer, u
} }
void field::special_summon_step(card* target, uint32 sumtype, uint32 sumplayer, uint32 playerid, uint32 nocheck, uint32 nolimit, uint32 positions, uint32 zone) { void field::special_summon_step(card* target, uint32 sumtype, uint32 sumplayer, uint32 playerid, uint32 nocheck, uint32 nolimit, uint32 positions, uint32 zone) {
if((positions & POS_FACEDOWN) && is_player_affected_by_effect(sumplayer, EFFECT_DEVINE_LIGHT)) if((positions & POS_FACEDOWN) && is_player_affected_by_effect(sumplayer, EFFECT_DEVINE_LIGHT))
positions = (positions & POS_FACEUP) | (positions >> 1); positions = (positions & POS_FACEUP) | ((positions & POS_FACEDOWN) >> 1);
target->temp.reason = target->current.reason; target->temp.reason = target->current.reason;
target->temp.reason_effect = target->current.reason_effect; target->temp.reason_effect = target->current.reason_effect;
target->temp.reason_player = target->current.reason_player; target->temp.reason_player = target->current.reason_player;
...@@ -1838,9 +1838,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card* target, effect* proc, ui ...@@ -1838,9 +1838,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card* target, effect* proc, ui
return FALSE; return FALSE;
} }
case 11: { case 11: {
uint8 targetplayer = target->current.controler; set_control(target, target->current.controler, 0, 0);
if(target->owner != targetplayer)
set_control(target, targetplayer, 0, 0);
core.phase_action = TRUE; core.phase_action = TRUE;
target->current.reason = REASON_SUMMON; target->current.reason = REASON_SUMMON;
target->summon_player = sumplayer; target->summon_player = sumplayer;
...@@ -2282,9 +2280,7 @@ int32 field::mset(uint16 step, uint8 setplayer, card* target, effect* proc, uint ...@@ -2282,9 +2280,7 @@ int32 field::mset(uint16 step, uint8 setplayer, card* target, effect* proc, uint
return FALSE; return FALSE;
} }
case 9: { case 9: {
uint8 targetplayer = target->current.controler; set_control(target, target->current.controler, 0, 0);
if(target->owner != targetplayer)
set_control(target, targetplayer, 0, 0);
core.phase_action = TRUE; core.phase_action = TRUE;
core.normalsummon_state_count[setplayer]++; core.normalsummon_state_count[setplayer]++;
check_card_counter(target, 2, setplayer); check_card_counter(target, 2, setplayer);
...@@ -2564,9 +2560,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin ...@@ -2564,9 +2560,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
return FALSE; return FALSE;
} }
case 5: { case 5: {
uint8 targetplayer = target->current.controler; set_control(target, target->current.controler, 0, 0);
if(target->owner != targetplayer)
set_control(target, targetplayer, 0, 0);
core.phase_action = TRUE; core.phase_action = TRUE;
target->current.reason_effect = core.units.begin()->peffect; target->current.reason_effect = core.units.begin()->peffect;
core.summoning_card = target; core.summoning_card = target;
...@@ -2759,8 +2753,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin ...@@ -2759,8 +2753,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card* target, uin
pduel->write_buffer8(pcard->current.location); pduel->write_buffer8(pcard->current.location);
pduel->write_buffer8(pcard->current.sequence); pduel->write_buffer8(pcard->current.sequence);
pduel->write_buffer8(pcard->current.position); pduel->write_buffer8(pcard->current.position);
if(pcard->owner != pcard->current.controler) set_control(pcard, pcard->current.controler, 0, 0);
set_control(pcard, pcard->current.controler, 0, 0);
if(pgroup->it != pgroup->container.end()) if(pgroup->it != pgroup->container.end())
core.units.begin()->step = 22; core.units.begin()->step = 22;
return FALSE; return FALSE;
...@@ -2928,8 +2921,7 @@ int32 field::special_summon_step(uint16 step, group* targets, card* target, uint ...@@ -2928,8 +2921,7 @@ int32 field::special_summon_step(uint16 step, group* targets, card* target, uint
} }
case 3: { case 3: {
returns.ivalue[0] = TRUE; returns.ivalue[0] = TRUE;
if(target->owner != target->current.controler) set_control(target, target->current.controler, 0, 0);
set_control(target, target->current.controler, 0, 0);
target->set_status(STATUS_SPSUMMON_STEP, TRUE); target->set_status(STATUS_SPSUMMON_STEP, TRUE);
return TRUE; return TRUE;
} }
...@@ -3656,6 +3648,12 @@ int32 field::send_to(uint16 step, group * targets, effect * reason_effect, uint3 ...@@ -3656,6 +3648,12 @@ int32 field::send_to(uint16 step, group * targets, effect * reason_effect, uint3
pcard->sendto_param.location = redirect; pcard->sendto_param.location = redirect;
pcard->sendto_param.sequence = redirect_seq; pcard->sendto_param.sequence = redirect_seq;
dest = redirect; dest = redirect;
if(dest == LOCATION_REMOVED) {
if(pcard->sendto_param.position & POS_FACEDOWN_ATTACK)
pcard->sendto_param.position = (pcard->sendto_param.position & ~POS_FACEDOWN_ATTACK) | POS_FACEUP_ATTACK;
if(pcard->sendto_param.position & POS_FACEDOWN_DEFENSE)
pcard->sendto_param.position = (pcard->sendto_param.position & ~POS_FACEDOWN_DEFENSE) | POS_FACEUP_DEFENSE;
}
} }
redirect = pcard->destination_redirect(dest, pcard->current.reason); redirect = pcard->destination_redirect(dest, pcard->current.reason);
if(redirect) { if(redirect) {
......
...@@ -23,7 +23,8 @@ ...@@ -23,7 +23,8 @@
更新: 更新:
1.更新ygo内核; 1.更新ygo内核;
优化: 优化:
1.启动ygo时增加tips 1.启动ygo时增加tips;
2.完善版本号显示;
</pre> </pre>
<ul> <ul>
<li style="color:#ffffff">3.3.1</li> <li style="color:#ffffff">3.3.1</li>
......
#[2018.4][2018.5 TCG][2018.1][2017.10][2017.7][2017.4][2017.1][2016.10][2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9][2018.2 TCG][2017.11 TCG][2017.9 TCG][2017.6 TCG][2017.3 TCG][2016.8 TCG][2016.4 TCG][2015.11 TCG][2015.7 TCG][2015.4 TCG][2015.1 TCG][2014.10 TCG][2014.7 TCG][2014.4 TCG][2014.1.1 TCG][2013.10.11 TCG][2013.3.1][2012.9.1][2012.3.1][2011.9.1] #[2018.7][2018.4][2018.5 TCG][2018.1][2017.10][2017.7][2017.4][2017.1][2016.10][2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9][2018.2 TCG][2017.11 TCG][2017.9 TCG][2017.6 TCG][2017.3 TCG][2016.8 TCG][2016.4 TCG][2015.11 TCG][2015.7 TCG][2015.4 TCG][2015.1 TCG][2014.10 TCG][2014.7 TCG][2014.4 TCG][2014.1.1 TCG][2013.10.11 TCG][2013.3.1][2012.9.1][2012.3.1][2011.9.1]
!2018.7
#forbidden
79875176 0 --トゥーン・キャノン・ソルジャー
11384280 0 --キャノン・ソルジャー
32723153 0 --マジカル·エクスプロージョン
20663556 0 --イレカエル
44910027 0 --ヴィクトリー・ドラゴン
25862681 0 --エンシェント・フェアリー・ドラゴン
53804307 0 --焔征竜-ブラスター
68819554 0 --Emダメージ・ジャグラー
07563579 0 --Emヒグルミ
17330916 0 --EMモンキーボード
90411554 0 --巌征竜-レドックス
17412721 0 --旧神ノーデン
34124316 0 --サイバーポッド
88071625 0 --The tyrant NEPTUNE
48905153 0 --十二獣ドランシア
85115440 0 --十二獣ブルホーン
21593977 0 --処刑人-マキュラ
21377582 0 --真竜剣皇マスターP
16923472 0 --ゼンマイハンター
18326736 0 --星守の騎士 プトレマイオス
54719828 0 --No.16 色の支配者ショック・ルーラー
26400609 0 --瀑征竜-タイダル
78706415 0 --ファイバーポッド
93369354 0 --フィッシュボーグ-ガンナー
23558733 0 --フェニキシアン・クラスター・アマリリス
09929398 0 --BF−朧影のゴウフウ
31178212 0 --マジェスペクター・ユニコーン
34206604 0 --魔導サイエンティスト
96782886 0 --メンタルマスター
03078576 0 --八汰烏
34086406 0 --ラヴァルバル・チェイン
89399912 0 --嵐征竜-テンペスト
57421866 0 --レベル・スティーラー
41482598 0 --悪夢の蜃気楼
44763025 0 --いたずら好きな双子悪魔
19613556 0 --大嵐
17375316 0 --押収
74191942 0 --苦渋の選択
42829885 0 --強引な番兵
45986603 0 --強奪
55144522 0 --強欲な壺
04031928 0 --心変わり
46060017 0 --十二獣の会局
12580477 0 --サンダー·ボルト
23557835 0 --次元融合
57953380 0 --生還の宝札
60682203 0 --大寒波
69243953 0 --蝶の短剣-エルマ
79571449 0 --天使の施し
13035077 0 --ドラゴニックD
70828912 0 --早すぎた埋葬
42703248 0 --ハリケーン
34906152 0 --マスドライバー
46448938 0 --魔導書の神判
46411259 0 --突然変異
85602018 0 --遺言状
27174286 0 --異次元からの帰還
93016201 0 --王宮の弾圧
03280747 0 --第六感
64697231 0 --ダスト·シュート
80604091 0 --血の代償
35316708 0 --刻の封印
17178486 0 --ライフチェンジャー
28566710 0 --ラストバトル!
#limit
24094258 1 --ヘビーメタルフォーゼ・エレクトラム
76794549 1 --アストログラフ・マジシャン
73941492 1 --調弦の魔術師
52340444 1 --閃刀機-ホーネットビット
73468603 1 --盆回し
64034255 1 --A·ジェネクス·バードマン
01561110 1 --ABC-ドラゴン・バスター
50720316 1 --E·HERO シャドー·ミスト
40318957 1 --EMドクロバット・ジョーカー
65536818 1 --源竜星-ボウテンコウ
49684352 1 --虹彩の魔術師
74586817 1 --PSYフレームロード・Ω
78872731 1 --十二獣モルモラット
06602300 1 --重爆撃禽 ボム・フェネクス
75286621 1 --召喚獣メルカバー
78868119 1 --深海のディーヴァ
58984738 1 --真竜拳士ダイナマイトK
78080961 1 --SPYRAL−ジーニアス
65192027 1 --ダーク·アームド·ドラゴン
44335251 1 --魂喰いオヴィラプター
15341821 1 --ダンディライオン
90953320 1 --TG ハイパー·ライブラリアン
69015963 1 --デビル・フランケン
75732622 1 --トーチ・ゴーレム
16226786 1 --深淵の暗殺者
28297833 1 --ネクロフェイス
69610326 1 --覇王眷竜ダークヴルム
83531441 1 --彼岸の旅人 ダンテ
70583986 1 --氷結界の虎王ドゥローレン
52687916 1 --氷結界の龍 トリシューラ
05043010 1 --ファイアウォール・ドラゴン
33396948 1 --封印されしエクゾディア
07902349 1 --封印されし者の左腕
70903634 1 --封印されし者の右腕
44519536 1 --封印されし者の左足
08124921 1 --封印されし者の右足
55623480 1 --妖精伝姫−シラユキ
09047460 1 --BF−隠れ蓑のスチーム
26674724 1 --ブリューナクの影霊衣
35272499 1 --捕食植物オフリス・スコーピオ
36042004 1 --ベビケラサウルス
10802915 1 --魔界発現世行きデスガイド
33508719 1 --メタモルポット
90809975 1 --餅カエル
89463537 1 --ユニコールの影霊衣
92746535 1 --竜剣士ラスターP
88264978 1 --レッドアイズ·ダークネスメタルドラゴン
48686504 1 --ローンファイア・ブロッサム
33782437 1 --一時休戦
66957584 1 --インフェルニティガン
81439173 1 --おろかな埋葬
23701465 1 --原初の種
99330325 1 --妨げられた壊獣の眠り
45305419 1 --継承の印
83764718 1 --死者蘇生
54631665 1 --SPYRAL RESORT
32807846 1 --増援
54447022 1 --ソウル・チャージ
48130397 1 --超融合
72892473 1 --手札抹殺
73628505 1 --テラ・フォーミング
97211663 1 --影霊衣の反魂術
18144506 1 --ハーピィの羽根帚
53208660 1 --ペンデュラム・コール
93600443 1 --マスク・チェンジ・セカンド
15854426 1 --霞の谷の神風
58577036 1 --名推理
23171610 1 --リミッター解除
14733538 1 --竜呼相打つ
23314220 1 --ルドラの魔導書
02295440 1 --ワン·フォー·ワン
05851097 1 --虚無空間
61740673 1 --王宮の勅命
35125879 1 --真竜皇の復活
36468556 1 --停戦協定
21076084 1 --トリックスター・リンカーネイション
83555666 1 --破壊輪
#semi limit
67723438 2 --緊急テレポート
56570271 2 --DHERO ディスクガイ
04474060 2 --SPYRAL GEAR−ドローン
81275020 2 --SRベイゴマックス
94977269 2 --エルシャドール・ミドラーシュ
20366274 2 --エルシャドール・ネフィリム
45222299 2 --イビリチュア·ガストクラーケ
40044918 2 --E·HERO エアーマン
86120751 2 --召喚師アレイスター
14558127 2 --灰流うらら
47325505 2 --化石調査
73915051 2 --スケープ・ゴート
91623717 2 --連鎖爆撃
66399653 2 --ユニオン格納庫
84749824 2 --神の警告
41420027 2 --神の宣告
40605147 2 --神の通告
!2018.4 !2018.4
#forbidden #forbidden
20663556 0 --イレカエル 20663556 0 --イレカエル
......
...@@ -8,7 +8,7 @@ android { ...@@ -8,7 +8,7 @@ android {
applicationId "cn.garymb.ygomobile" applicationId "cn.garymb.ygomobile"
minSdkVersion 16 minSdkVersion 16
targetSdkVersion 22 targetSdkVersion 22
versionCode 33020612 versionCode 33020615
versionName "3.3.2" versionName "3.3.2"
flavorDimensions "versionCode" flavorDimensions "versionCode"
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
......
...@@ -91,9 +91,9 @@ abstract class HomeActivity extends BaseActivity implements NavigationView.OnNav ...@@ -91,9 +91,9 @@ abstract class HomeActivity extends BaseActivity implements NavigationView.OnNav
public void onViewInitFinished(boolean arg0) { public void onViewInitFinished(boolean arg0) {
//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。 //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
if(arg0){ if(arg0){
Toast.makeText(getActivity(), "加载成功", Toast.LENGTH_LONG).show(); // Toast.makeText(getActivity(), "加载成功", Toast.LENGTH_LONG).show();
}else{ }else{
Toast.makeText(getActivity(), "失败", Toast.LENGTH_LONG).show(); Toast.makeText(getActivity(), "部分资源因机型原因加载错误,不影响使用", Toast.LENGTH_LONG).show();
} }
} }
@Override @Override
......
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