Commit 9b0c8181 authored by argon.sun's avatar argon.sun

new scripts

parent fbe3539d
...@@ -37,9 +37,11 @@ ClientCard::ClientCard() { ...@@ -37,9 +37,11 @@ ClientCard::ClientCard() {
equipTarget = 0; equipTarget = 0;
} }
void ClientCard::SetCode(int code) { void ClientCard::SetCode(int code) {
if(location == LOCATION_HAND && this->code != code) if((location == LOCATION_HAND) && (this->code != code)) {
this->code = code;
mainGame->dField.MoveCard(this, 5); mainGame->dField.MoveCard(this, 5);
this->code = code; } else
this->code = code;
} }
void ClientCard::UpdateInfo(char* buf) { void ClientCard::UpdateInfo(char* buf) {
int flag = BufferIO::ReadInt32(buf); int flag = BufferIO::ReadInt32(buf);
...@@ -48,9 +50,11 @@ void ClientCard::UpdateInfo(char* buf) { ...@@ -48,9 +50,11 @@ void ClientCard::UpdateInfo(char* buf) {
int pdata; int pdata;
if(flag & QUERY_CODE) { if(flag & QUERY_CODE) {
pdata = BufferIO::ReadInt32(buf); pdata = BufferIO::ReadInt32(buf);
if(location == LOCATION_HAND && pdata != code) if((location == LOCATION_HAND) && (pdata != code)) {
code = pdata;
mainGame->dField.MoveCard(this, 5); mainGame->dField.MoveCard(this, 5);
code = pdata; } else
code = pdata;
} }
if(flag & QUERY_POSITION) if(flag & QUERY_POSITION)
pdata = BufferIO::ReadInt32(buf); pdata = BufferIO::ReadInt32(buf);
......
...@@ -15,6 +15,7 @@ ClientField::ClientField() { ...@@ -15,6 +15,7 @@ ClientField::ClientField() {
grave_act = false; grave_act = false;
remove_act = false; remove_act = false;
extra_act = false; extra_act = false;
deck_reversed = false;
for(int p = 0; p < 2; ++p) { for(int p = 0; p < 2; ++p) {
for(int i = 0; i < 5; ++i) for(int i = 0; i < 5; ++i)
mzone[p].push_back(0); mzone[p].push_back(0);
...@@ -23,40 +24,43 @@ ClientField::ClientField() { ...@@ -23,40 +24,43 @@ ClientField::ClientField() {
} }
} }
void ClientField::Clear() { void ClientField::Clear() {
std::vector<ClientCard*>::iterator cit;
for(int i = 0; i < 2; ++i) { for(int i = 0; i < 2; ++i) {
for(cit = deck[i].begin(); cit != deck[i].end(); ++cit) for(auto cit = deck[i].begin(); cit != deck[i].end(); ++cit)
delete *cit; delete *cit;
deck[i].clear(); deck[i].clear();
for(cit = hand[i].begin(); cit != hand[i].end(); ++cit) for(auto cit = hand[i].begin(); cit != hand[i].end(); ++cit)
delete *cit; delete *cit;
hand[i].clear(); hand[i].clear();
for(cit = mzone[i].begin(); cit != mzone[i].end(); ++cit) { for(auto cit = mzone[i].begin(); cit != mzone[i].end(); ++cit) {
if(*cit) if(*cit)
delete *cit; delete *cit;
*cit = 0; *cit = 0;
} }
for(cit = szone[i].begin(); cit != szone[i].end(); ++cit) { for(auto cit = szone[i].begin(); cit != szone[i].end(); ++cit) {
if(*cit) if(*cit)
delete *cit; delete *cit;
*cit = 0; *cit = 0;
} }
for(cit = grave[i].begin(); cit != grave[i].end(); ++cit) for(auto cit = grave[i].begin(); cit != grave[i].end(); ++cit)
delete *cit; delete *cit;
grave[i].clear(); grave[i].clear();
for(cit = remove[i].begin(); cit != remove[i].end(); ++cit) for(auto cit = remove[i].begin(); cit != remove[i].end(); ++cit)
delete *cit; delete *cit;
remove[i].clear(); remove[i].clear();
for(cit = extra[i].begin(); cit != extra[i].end(); ++cit) for(auto cit = extra[i].begin(); cit != extra[i].end(); ++cit)
delete *cit; delete *cit;
extra[i].clear(); extra[i].clear();
} }
std::set<ClientCard*>::iterator sit; for(auto sit = overlay_cards.begin(); sit != overlay_cards.end(); ++sit)
for(sit = overlay_cards.begin(); sit != overlay_cards.end(); ++sit)
delete *sit; delete *sit;
overlay_cards.clear(); overlay_cards.clear();
chains.clear(); chains.clear();
disabled_field = 0; disabled_field = 0;
deck_act = false;
grave_act = false;
remove_act = false;
extra_act = false;
deck_reversed = false;
} }
void ClientField::Initial(int player, int deckc, int extrac) { void ClientField::Initial(int player, int deckc, int extrac) {
ClientCard* pcard; ClientCard* pcard;
...@@ -564,16 +568,28 @@ void ClientField::GetCardLocation(ClientCard* pcard, irr::core::vector3df* t, ir ...@@ -564,16 +568,28 @@ void ClientField::GetCardLocation(ClientCard* pcard, irr::core::vector3df* t, ir
t->X = 7.3f; t->X = 7.3f;
t->Y = 3.0f; t->Y = 3.0f;
t->Z = 0.01f + 0.01f * sequence; t->Z = 0.01f + 0.01f * sequence;
r->X = 0.0f; if(!deck_reversed) {
r->Y = 3.1415926f; r->X = 0.0f;
r->Z = 0.0f; r->Y = 3.1415926f;
r->Z = 0.0f;
} else {
r->X = 0.0f;
r->Y = 0.0f;
r->Z = 0.0f;
}
} else { } else {
t->X = 0.6f; t->X = 0.6f;
t->Y = -3.0f; t->Y = -3.0f;
t->Z = 0.01f + 0.01f * sequence; t->Z = 0.01f + 0.01f * sequence;
r->X = 0.0f; if(!deck_reversed) {
r->Y = 3.1415926f; r->X = 0.0f;
r->Z = 3.1415926f; r->Y = 3.1415926f;
r->Z = 3.1415926f;
} else {
r->X = 0.0f;
r->Y = 0.0f;
r->Z = 3.1415926f;
}
} }
break; break;
} }
......
...@@ -65,6 +65,7 @@ public: ...@@ -65,6 +65,7 @@ public:
bool extra_act; bool extra_act;
ChainInfo current_chain; ChainInfo current_chain;
bool last_chain; bool last_chain;
bool deck_reversed;
ClientField(); ClientField();
void Clear(); void Clear();
......
...@@ -1327,6 +1327,13 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) { ...@@ -1327,6 +1327,13 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
} }
case MSG_SHUFFLE_DECK: { case MSG_SHUFFLE_DECK: {
int player = mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf)); int player = mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf));
bool rev = mainGame->dField.deck_reversed;
mainGame->dField.deck_reversed = false;
if(rev) {
for (int i = 0; i < mainGame->dField.deck[player].size(); ++i)
mainGame->dField.MoveCard(mainGame->dField.deck[player][i], 10);
mainGame->WaitFrameSignal(10);
}
for (int i = 0; i < mainGame->dField.deck[player].size(); ++i) for (int i = 0; i < mainGame->dField.deck[player].size(); ++i)
mainGame->dField.deck[player][i]->code = 0; mainGame->dField.deck[player][i]->code = 0;
for (int i = 0; i < 5; ++i) { for (int i = 0; i < 5; ++i) {
...@@ -1341,6 +1348,11 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) { ...@@ -1341,6 +1348,11 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
mainGame->dField.MoveCard(*cit, 3); mainGame->dField.MoveCard(*cit, 3);
mainGame->WaitFrameSignal(3); mainGame->WaitFrameSignal(3);
} }
mainGame->dField.deck_reversed = rev;
if(rev) {
for (int i = 0; i < mainGame->dField.deck[player].size(); ++i)
mainGame->dField.MoveCard(mainGame->dField.deck[player][i], 10);
}
return true; return true;
} }
case MSG_SHUFFLE_HAND: { case MSG_SHUFFLE_HAND: {
...@@ -1399,6 +1411,25 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) { ...@@ -1399,6 +1411,25 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
mainGame->WaitFrameSignal(11); mainGame->WaitFrameSignal(11);
return true; return true;
} }
case MSG_REVERSE_DECK: {
mainGame->dField.deck_reversed = !mainGame->dField.deck_reversed;
for(int i = 0; i < mainGame->dField.deck[0].size(); ++i)
mainGame->dField.MoveCard(mainGame->dField.deck[0][i], 10);
for(int i = 0; i < mainGame->dField.deck[1].size(); ++i)
mainGame->dField.MoveCard(mainGame->dField.deck[1][i], 10);
return true;
}
case MSG_DECK_TOP: {
int p0 = mainGame->LocalPlayer(0);
int p1 = mainGame->LocalPlayer(1);
int code0 = BufferIO::ReadInt32(pbuf);
int code1 = BufferIO::ReadInt32(pbuf);
if(code0)
mainGame->dField.GetCard(p0, LOCATION_DECK, mainGame->dField.deck[p0].size() - 1)->SetCode(code0);
if(code1)
mainGame->dField.GetCard(p1, LOCATION_DECK, mainGame->dField.deck[p1].size() - 1)->SetCode(code1);
return true;
}
case MSG_SHUFFLE_SET_CARD: { case MSG_SHUFFLE_SET_CARD: {
std::vector<ClientCard*>::iterator cit; std::vector<ClientCard*>::iterator cit;
int count = BufferIO::ReadInt8(pbuf); int count = BufferIO::ReadInt8(pbuf);
......
...@@ -769,8 +769,8 @@ void Game::CloseDuelWindow() { ...@@ -769,8 +769,8 @@ void Game::CloseDuelWindow() {
wPhase->setVisible(false); wPhase->setVisible(false);
wPosSelect->setVisible(false); wPosSelect->setVisible(false);
wQuery->setVisible(false); wQuery->setVisible(false);
wReplay->setVisible(false);
wReplayControl->setVisible(false); wReplayControl->setVisible(false);
wReplaySave->setVisible(false);
stHintMsg->setVisible(false); stHintMsg->setVisible(false);
btnSideOK->setVisible(false); btnSideOK->setVisible(false);
btnLeaveGame->setVisible(false); btnLeaveGame->setVisible(false);
......
#include "image_manager.h" #include "image_manager.h"
namespace ygo { namespace ygo {
ImageManager imageManager; ImageManager imageManager;
bool ImageManager::Initial() { bool ImageManager::Initial() {
tCover = driver->getTexture("textures/cover.jpg"); tCover = driver->getTexture("textures/cover.jpg");
tUnknown = driver->getTexture("textures/unknown.jpg");
tAct = driver->getTexture("textures/act.png"); tAct = driver->getTexture("textures/act.png");
tAttack = driver->getTexture("textures/attack.png"); tAttack = driver->getTexture("textures/attack.png");
tChain = driver->getTexture("textures/chain.png"); tChain = driver->getTexture("textures/chain.png");
...@@ -49,7 +50,7 @@ void ImageManager::RemoveTexture(int code) { ...@@ -49,7 +50,7 @@ void ImageManager::RemoveTexture(int code) {
} }
irr::video::ITexture* ImageManager::GetTexture(int code) { irr::video::ITexture* ImageManager::GetTexture(int code) {
if(code == 0) if(code == 0)
return 0; return tUnknown;
auto tit = tMap.find(code); auto tit = tMap.find(code);
if(tit == tMap.end()) { if(tit == tMap.end()) {
char file[256]; char file[256];
...@@ -58,7 +59,10 @@ irr::video::ITexture* ImageManager::GetTexture(int code) { ...@@ -58,7 +59,10 @@ irr::video::ITexture* ImageManager::GetTexture(int code) {
tMap[code] = img; tMap[code] = img;
return img; return img;
} }
return tit->second; if(tit->second)
return tit->second;
else
return tUnknown;
} }
irr::video::ITexture* ImageManager::GetTextureThumb(int code) { irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
if(code == 0) if(code == 0)
......
...@@ -21,6 +21,7 @@ public: ...@@ -21,6 +21,7 @@ public:
irr::IrrlichtDevice* device; irr::IrrlichtDevice* device;
irr::video::IVideoDriver* driver; irr::video::IVideoDriver* driver;
irr::video::ITexture* tCover; irr::video::ITexture* tCover;
irr::video::ITexture* tUnknown;
irr::video::ITexture* tAct; irr::video::ITexture* tAct;
irr::video::ITexture* tAttack; irr::video::ITexture* tAttack;
irr::video::ITexture* tNegated; irr::video::ITexture* tNegated;
......
...@@ -274,6 +274,15 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) { ...@@ -274,6 +274,15 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
ReplayRefreshGrave(player); ReplayRefreshGrave(player);
break; break;
} }
case MSG_REVERSE_DECK: {
DuelClient::ClientAnalyze(offset, pbuf - offset);
break;
}
case MSG_DECK_TOP: {
pbuf += 8;
DuelClient::ClientAnalyze(offset, pbuf - offset);
break;
}
case MSG_SHUFFLE_SET_CARD: { case MSG_SHUFFLE_SET_CARD: {
count = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf);
pbuf += count * 8; pbuf += count * 8;
......
...@@ -772,6 +772,21 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -772,6 +772,21 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
RefreshGrave(player); RefreshGrave(player);
break; break;
} }
case MSG_REVERSE_DECK: {
NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, offset, pbuf - offset);
NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break;
}
case MSG_DECK_TOP: {
pbuf += 8;
NetServer::SendBufferToPlayer(players[0], STOC_GAME_MSG, offset, pbuf - offset);
NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
break;
}
case MSG_SHUFFLE_SET_CARD: { case MSG_SHUFFLE_SET_CARD: {
count = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf);
pbuf += count * 8; pbuf += count * 8;
...@@ -788,6 +803,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -788,6 +803,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
RefreshSzone(1); RefreshSzone(1);
RefreshHand(0);
RefreshHand(1);
pbuf++; pbuf++;
time_limit[0] = host_info.time_limit; time_limit[0] = host_info.time_limit;
time_limit[1] = host_info.time_limit; time_limit[1] = host_info.time_limit;
...@@ -807,6 +824,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -807,6 +824,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
RefreshSzone(1); RefreshSzone(1);
RefreshHand(0);
RefreshHand(1);
break; break;
} }
case MSG_MOVE: { case MSG_MOVE: {
...@@ -954,6 +973,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -954,6 +973,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
RefreshSzone(1); RefreshSzone(1);
RefreshHand(0);
RefreshHand(1);
break; break;
} }
case MSG_CHAIN_SOLVING: { case MSG_CHAIN_SOLVING: {
...@@ -974,6 +995,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -974,6 +995,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
RefreshSzone(1); RefreshSzone(1);
RefreshHand(0);
RefreshHand(1);
break; break;
} }
case MSG_CHAIN_END: { case MSG_CHAIN_END: {
...@@ -985,6 +1008,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -985,6 +1008,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
RefreshMzone(1); RefreshMzone(1);
RefreshSzone(0); RefreshSzone(0);
RefreshSzone(1); RefreshSzone(1);
RefreshHand(0);
RefreshHand(1);
break; break;
} }
case MSG_CHAIN_NEGATED: { case MSG_CHAIN_NEGATED: {
...@@ -993,10 +1018,6 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -993,10 +1018,6 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::ReSendToPlayer(players[1]); NetServer::ReSendToPlayer(players[1]);
for(auto oit = observers.begin(); oit != observers.end(); ++oit) for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit); NetServer::ReSendToPlayer(*oit);
RefreshMzone(0);
RefreshMzone(1);
RefreshSzone(0);
RefreshSzone(1);
break; break;
} }
case MSG_CHAIN_DISABLED: { case MSG_CHAIN_DISABLED: {
...@@ -1332,8 +1353,20 @@ void SingleDuel::RefreshHand(int player, int flag, int use_cache) { ...@@ -1332,8 +1353,20 @@ void SingleDuel::RefreshHand(int player, int flag, int use_cache) {
BufferIO::WriteInt8(qbuf, MSG_UPDATE_DATA); BufferIO::WriteInt8(qbuf, MSG_UPDATE_DATA);
BufferIO::WriteInt8(qbuf, player); BufferIO::WriteInt8(qbuf, player);
BufferIO::WriteInt8(qbuf, LOCATION_HAND); BufferIO::WriteInt8(qbuf, LOCATION_HAND);
int len = query_field_card(pduel, player, LOCATION_HAND, flag, (unsigned char*)qbuf, use_cache); int len = query_field_card(pduel, player, LOCATION_HAND, flag | QUERY_IS_PUBLIC, (unsigned char*)qbuf, use_cache);
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, query_buffer, len + 3); NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, query_buffer, len + 3);
int qlen = 0, slen, qflag;
while(qlen < len) {
slen = BufferIO::ReadInt32(qbuf);
qflag = *(int*)qbuf;
if(!qbuf[slen - 8])
memset(qbuf, 0, slen - 4);
qbuf += slen - 4;
qlen += slen;
}
NetServer::SendBufferToPlayer(players[1 - player], STOC_GAME_MSG, query_buffer, len + 3);
for(auto pit = observers.begin(); pit != observers.end(); ++pit)
NetServer::ReSendToPlayer(*pit);
} }
void SingleDuel::RefreshGrave(int player, int flag, int use_cache) { void SingleDuel::RefreshGrave(int player, int flag, int use_cache) {
char query_buffer[0x1000]; char query_buffer[0x1000];
......
...@@ -30,11 +30,11 @@ public: ...@@ -30,11 +30,11 @@ public:
void DuelEndProc(); void DuelEndProc();
void WaitforResponse(int playerid); void WaitforResponse(int playerid);
void RefreshMzone(int player, int flag = 0x181fff, int use_cache = 1); void RefreshMzone(int player, int flag = 0x81fff, int use_cache = 1);
void RefreshSzone(int player, int flag = 0x181fff, int use_cache = 1); void RefreshSzone(int player, int flag = 0x81fff, int use_cache = 1);
void RefreshHand(int player, int flag = 0x181fff, int use_cache = 1); void RefreshHand(int player, int flag = 0x181fff, int use_cache = 1);
void RefreshGrave(int player, int flag = 0x181fff, int use_cache = 1); void RefreshGrave(int player, int flag = 0x81fff, int use_cache = 1);
void RefreshExtra(int player, int flag = 0x181fff, int use_cache = 1); void RefreshExtra(int player, int flag = 0x81fff, int use_cache = 1);
void RefreshSingle(int player, int location, int sequence, int flag = 0x181fff); void RefreshSingle(int player, int location, int sequence, int flag = 0x181fff);
static int MessageHandler(long fduel, int type); static int MessageHandler(long fduel, int type);
......
...@@ -159,19 +159,16 @@ uint32 card::get_infos(byte* buf, int32 query_flag, int32 use_cache) { ...@@ -159,19 +159,16 @@ uint32 card::get_infos(byte* buf, int32 query_flag, int32 use_cache) {
} }
if(query_flag & QUERY_OWNER) if(query_flag & QUERY_OWNER)
*p++ = owner; *p++ = owner;
if(!use_cache) { if(query_flag & QUERY_IS_DISABLED) {
if(query_flag & QUERY_IS_DISABLED) *p++ = (status & STATUS_DISABLED) ? 1 : 0; tdata = (status & STATUS_DISABLED) ? 1 : 0;
if(query_flag & QUERY_IS_PUBLIC) *p++ = is_affected_by_effect(EFFECT_PUBLIC) ? 1 : 0; if(!use_cache || (tdata != q_cache.is_disabled)) {
} else {
if((query_flag & QUERY_IS_DISABLED) && ((tdata = (status & STATUS_DISABLED) ? 1 : 0) != q_cache.is_disabled)) {
q_cache.is_disabled = tdata; q_cache.is_disabled = tdata;
*p++ = tdata; *p++ = tdata;
} else query_flag &= ~QUERY_IS_DISABLED; } else
if((query_flag & QUERY_IS_PUBLIC) && ((tdata = is_affected_by_effect(EFFECT_PUBLIC) ? 1 : 0) != q_cache.is_public)) { query_flag &= ~QUERY_IS_DISABLED;
q_cache.is_public = tdata;
*p++ = tdata;
} else query_flag &= ~QUERY_IS_PUBLIC;
} }
if(query_flag & QUERY_IS_PUBLIC)
*p++ = (status & STATUS_IS_PUBLIC) ? 1 : 0;
*(uint32*)buf = (byte*)p - buf; *(uint32*)buf = (byte*)p - buf;
*(uint32*)(buf + 4) = query_flag; *(uint32*)(buf + 4) = query_flag;
return (byte*)p - buf; return (byte*)p - buf;
......
...@@ -367,6 +367,7 @@ public: ...@@ -367,6 +367,7 @@ public:
#define STATUS_ACTIVATED 0x800000 #define STATUS_ACTIVATED 0x800000
#define STATUS_JUST_POS 0x1000000 #define STATUS_JUST_POS 0x1000000
#define STATUS_CONTINUOUS_POS 0x2000000 #define STATUS_CONTINUOUS_POS 0x2000000
#define STATUS_IS_PUBLIC 0x4000000
//Counter //Counter
#define COUNTER_NEED_PERMIT 0x1000 #define COUNTER_NEED_PERMIT 0x1000
#define COUNTER_NEED_ENABLE 0x2000 #define COUNTER_NEED_ENABLE 0x2000
......
...@@ -326,6 +326,7 @@ public: ...@@ -326,6 +326,7 @@ public:
#define EFFECT_NECRO_VALLEY 291 #define EFFECT_NECRO_VALLEY 291
#define EFFECT_FORBIDDEN 292 #define EFFECT_FORBIDDEN 292
#define EFFECT_NECRO_VALLEY_IM 293 #define EFFECT_NECRO_VALLEY_IM 293
#define EFFECT_REVERSE_DECK 294
#define EVENT_STARTUP 1000 #define EVENT_STARTUP 1000
#define EVENT_FLIP 1001 #define EVENT_FLIP 1001
......
...@@ -47,6 +47,8 @@ field::field(duel* pduel) { ...@@ -47,6 +47,8 @@ field::field(duel* pduel) {
player[i].list_mzone.push_back(0); player[i].list_mzone.push_back(0);
for(int j = 0; j < 6; ++j) for(int j = 0; j < 6; ++j)
player[i].list_szone.push_back(0); player[i].list_szone.push_back(0);
core.shuffle_deck_check[i] = FALSE;
core.shuffle_hand_check[i] = FALSE;
} }
for (int i = 0; i < 5; ++i) for (int i = 0; i < 5; ++i)
core.pre_field[i] = 0; core.pre_field[i] = 0;
...@@ -68,6 +70,7 @@ field::field(duel* pduel) { ...@@ -68,6 +70,7 @@ field::field(duel* pduel) {
core.duel_options = 0; core.duel_options = 0;
core.attacker = 0; core.attacker = 0;
core.attack_target = 0; core.attack_target = 0;
core.deck_reversed = FALSE;
nil_event.event_code = 0; nil_event.event_code = 0;
nil_event.event_cards = 0; nil_event.event_cards = 0;
nil_event.event_player = PLAYER_NONE; nil_event.event_player = PLAYER_NONE;
...@@ -493,6 +496,16 @@ void field::swap_deck_and_grave(uint8 playerid) { ...@@ -493,6 +496,16 @@ void field::swap_deck_and_grave(uint8 playerid) {
pduel->write_buffer8(playerid); pduel->write_buffer8(playerid);
shuffle(playerid, LOCATION_DECK); shuffle(playerid, LOCATION_DECK);
} }
void field::reverse_deck(uint8 playerid) {
int32 count = player[playerid].list_main.size();
if(count == 0)
return;
for(int i = 0; i < count / 2; ++i) {
card* tmp = player[playerid].list_main[i];
player[playerid].list_main[i] = player[playerid].list_main[count - 1 - i];
player[playerid].list_main[count - 1 - i] = tmp;
}
}
void field::add_effect(effect* peffect, uint8 owner_player) { void field::add_effect(effect* peffect, uint8 owner_player) {
if (!peffect->handler) { if (!peffect->handler) {
peffect->flag |= EFFECT_FLAG_FIELD_ONLY; peffect->flag |= EFFECT_FLAG_FIELD_ONLY;
...@@ -1374,6 +1387,8 @@ int32 field::is_player_can_discard_deck_as_cost(uint8 playerid, int32 count) { ...@@ -1374,6 +1387,8 @@ int32 field::is_player_can_discard_deck_as_cost(uint8 playerid, int32 count) {
return FALSE; return FALSE;
if(is_player_affected_by_effect(playerid, EFFECT_CANNOT_DISCARD_DECK)) if(is_player_affected_by_effect(playerid, EFFECT_CANNOT_DISCARD_DECK))
return FALSE; return FALSE;
if((count == 1) && core.deck_reversed)
return (*player[playerid].list_grave.rbegin())->is_capable_cost_to_grave(playerid);
effect_set eset; effect_set eset;
filter_field_effect(EFFECT_TO_GRAVE_REDIRECT, &eset); filter_field_effect(EFFECT_TO_GRAVE_REDIRECT, &eset);
for(int32 i = 0; i < eset.count; ++i) { for(int32 i = 0; i < eset.count; ++i) {
...@@ -1383,7 +1398,7 @@ int32 field::is_player_can_discard_deck_as_cost(uint8 playerid, int32 count) { ...@@ -1383,7 +1398,7 @@ int32 field::is_player_can_discard_deck_as_cost(uint8 playerid, int32 count) {
} }
return TRUE; return TRUE;
} }
int32 field::is_player_can_discard_hand(uint8 playerid, card* pcard, effect* peffect, uint32 reason) { int32 field::is_player_can_discard_hand(uint8 playerid, card * pcard, effect * peffect, uint32 reason) {
if(pcard->current.location != LOCATION_HAND) if(pcard->current.location != LOCATION_HAND)
return FALSE; return FALSE;
effect_set eset; effect_set eset;
...@@ -1416,7 +1431,7 @@ int32 field::is_player_can_summon(uint32 sumtype, uint8 playerid, card * pcard) ...@@ -1416,7 +1431,7 @@ int32 field::is_player_can_summon(uint32 sumtype, uint8 playerid, card * pcard)
} }
return TRUE; return TRUE;
} }
int32 field::is_player_can_mset(uint32 sumtype, uint8 playerid, card* pcard) { int32 field::is_player_can_mset(uint32 sumtype, uint8 playerid, card * pcard) {
effect_set eset; effect_set eset;
sumtype |= SUMMON_TYPE_NORMAL; sumtype |= SUMMON_TYPE_NORMAL;
filter_player_effect(playerid, EFFECT_CANNOT_MSET, &eset); filter_player_effect(playerid, EFFECT_CANNOT_MSET, &eset);
...@@ -1432,7 +1447,7 @@ int32 field::is_player_can_mset(uint32 sumtype, uint8 playerid, card* pcard) { ...@@ -1432,7 +1447,7 @@ int32 field::is_player_can_mset(uint32 sumtype, uint8 playerid, card* pcard) {
} }
return TRUE; return TRUE;
} }
int32 field::is_player_can_sset(uint8 playerid, card* pcard) { int32 field::is_player_can_sset(uint8 playerid, card * pcard) {
effect_set eset; effect_set eset;
filter_player_effect(playerid, EFFECT_CANNOT_SSET, &eset); filter_player_effect(playerid, EFFECT_CANNOT_SSET, &eset);
for(int32 i = 0; i < eset.count; ++i) { for(int32 i = 0; i < eset.count; ++i) {
...@@ -1446,7 +1461,7 @@ int32 field::is_player_can_sset(uint8 playerid, card* pcard) { ...@@ -1446,7 +1461,7 @@ int32 field::is_player_can_sset(uint8 playerid, card* pcard) {
} }
return TRUE; return TRUE;
} }
int32 field::is_player_can_spsummon(effect* peffect, uint32 sumtype, uint8 sumpos, uint8 playerid, uint8 toplayer, card * pcard) { int32 field::is_player_can_spsummon(effect * peffect, uint32 sumtype, uint8 sumpos, uint8 playerid, uint8 toplayer, card * pcard) {
effect_set eset; effect_set eset;
sumtype |= SUMMON_TYPE_SPECIAL; sumtype |= SUMMON_TYPE_SPECIAL;
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))
...@@ -1521,7 +1536,7 @@ int32 field::is_player_can_remove_counter(uint8 playerid, card * pcard, uint8 s, ...@@ -1521,7 +1536,7 @@ int32 field::is_player_can_remove_counter(uint8 playerid, card * pcard, uint8 s,
} }
return FALSE; return FALSE;
} }
int32 field::is_player_can_remove_overlay_card(uint8 playerid, card* pcard, uint8 s, uint8 o, uint16 min, uint32 reason) { int32 field::is_player_can_remove_overlay_card(uint8 playerid, card * pcard, uint8 s, uint8 o, uint16 min, uint32 reason) {
if((pcard && pcard->xyz_materials.size() >= min) || (!pcard && get_overlay_count(playerid, s, o) >= min)) if((pcard && pcard->xyz_materials.size() >= min) || (!pcard && get_overlay_count(playerid, s, o) >= min))
return TRUE; return TRUE;
pair<effect_container::iterator, effect_container::iterator> pr; pair<effect_container::iterator, effect_container::iterator> pr;
...@@ -1635,7 +1650,7 @@ int32 field::is_chain_disablable(uint8 chaincount) { ...@@ -1635,7 +1650,7 @@ int32 field::is_chain_disablable(uint8 chaincount) {
} }
return TRUE; return TRUE;
} }
int32 field::check_chain_target(uint8 chaincount, card* pcard) { int32 field::check_chain_target(uint8 chaincount, card * pcard) {
if(chaincount < 0 && chaincount > core.current_chain.size()) if(chaincount < 0 && chaincount > core.current_chain.size())
return FALSE; return FALSE;
chain* pchain; chain* pchain;
......
...@@ -239,6 +239,7 @@ struct processor { ...@@ -239,6 +239,7 @@ struct processor {
uint8 shuffle_check_disabled; uint8 shuffle_check_disabled;
uint8 shuffle_hand_check[2]; uint8 shuffle_hand_check[2];
uint8 shuffle_deck_check[2]; uint8 shuffle_deck_check[2];
uint8 deck_reversed;
uint8 flip_delayed; uint8 flip_delayed;
uint8 damage_calculated; uint8 damage_calculated;
uint8 summon_state[2]; uint8 summon_state[2];
...@@ -290,7 +291,8 @@ public: ...@@ -290,7 +291,8 @@ public:
void shuffle(uint8 playerid, uint8 location); void shuffle(uint8 playerid, uint8 location);
void reset_sequence(uint8 playerid, uint8 location); void reset_sequence(uint8 playerid, uint8 location);
void swap_deck_and_grave(uint8 playerid); void swap_deck_and_grave(uint8 playerid);
void reverse_deck(uint8 playerid);
void add_effect(effect* peffect, uint8 owner_player = 2); void add_effect(effect* peffect, uint8 owner_player = 2);
void remove_effect(effect* peffect); void remove_effect(effect* peffect);
void remove_oath_effect(effect* reason_effect); void remove_oath_effect(effect* reason_effect);
...@@ -660,6 +662,8 @@ public: ...@@ -660,6 +662,8 @@ public:
#define MSG_REFRESH_DECK 34 #define MSG_REFRESH_DECK 34
#define MSG_SWAP_GRAVE_DECK 35 #define MSG_SWAP_GRAVE_DECK 35
#define MSG_SHUFFLE_SET_CARD 36 #define MSG_SHUFFLE_SET_CARD 36
#define MSG_REVERSE_DECK 37
#define MSG_DECK_TOP 38
#define MSG_NEW_TURN 40 #define MSG_NEW_TURN 40
#define MSG_NEW_PHASE 41 #define MSG_NEW_PHASE 41
#define MSG_MOVE 50 #define MSG_MOVE 50
......
...@@ -1377,7 +1377,7 @@ int32 scriptlib::card_is_public(lua_State *L) { ...@@ -1377,7 +1377,7 @@ int32 scriptlib::card_is_public(lua_State *L) {
check_param_count(L, 1); check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1); check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1); card* pcard = *(card**) lua_touserdata(L, 1);
if(pcard->is_affected_by_effect(EFFECT_PUBLIC)) if(pcard->is_status(STATUS_IS_PUBLIC))
lua_pushboolean(L, 1); lua_pushboolean(L, 1);
else else
lua_pushboolean(L, 0); lua_pushboolean(L, 0);
......
...@@ -4396,11 +4396,55 @@ int32 field::adjust_step(uint16 step) { ...@@ -4396,11 +4396,55 @@ int32 field::adjust_step(uint16 step) {
return FALSE; return FALSE;
} }
case 11: { case 11: {
//shuffle check
for(int32 i = 0; i < player[0].list_hand.size(); ++i) {
card* pcard = player[0].list_hand[i];
int32 pub = pcard->is_affected_by_effect(EFFECT_PUBLIC) ? TRUE : FALSE;
if(!pub && (pcard->status & STATUS_IS_PUBLIC))
core.shuffle_hand_check[0] = TRUE;
pcard->set_status(STATUS_IS_PUBLIC, pub);
}
for(int32 i = 0; i < player[1].list_hand.size(); ++i) {
card* pcard = player[1].list_hand[i];
int32 pub = pcard->is_affected_by_effect(EFFECT_PUBLIC) ? TRUE : FALSE;
if(!pub && (pcard->status & STATUS_IS_PUBLIC))
core.shuffle_hand_check[1] = TRUE;
pcard->set_status(STATUS_IS_PUBLIC, pub);
}
if(core.shuffle_hand_check[infos.turn_player])
shuffle(infos.turn_player, LOCATION_HAND);
if(core.shuffle_hand_check[1 - infos.turn_player])
shuffle(1 - infos.turn_player, LOCATION_HAND);
return FALSE;
}
case 12: {
//reverse_deck
effect_set eset;
filter_field_effect(EFFECT_REVERSE_DECK, &eset, FALSE);
uint8 rv = eset.count ? TRUE : FALSE;
if(core.deck_reversed ^ rv) {
reverse_deck(0);
reverse_deck(1);
pduel->write_buffer8(MSG_REVERSE_DECK);
}
core.deck_reversed = rv;
if(core.deck_reversed) {
pduel->write_buffer8(MSG_DECK_TOP);
if(player[0].list_main.size())
pduel->write_buffer32((*player[0].list_main.rbegin())->data.code);
else pduel->write_buffer32(0);
if(player[1].list_main.size())
pduel->write_buffer32((*player[1].list_main.rbegin())->data.code);
else pduel->write_buffer32(0);
}
return FALSE;
}
case 13: {
raise_event((card*)0, EVENT_ADJUST, 0, 0, PLAYER_NONE, PLAYER_NONE, 0); raise_event((card*)0, EVENT_ADJUST, 0, 0, PLAYER_NONE, PLAYER_NONE, 0);
process_instant_event(); process_instant_event();
return FALSE; return FALSE;
} }
case 12: { case 14: {
if(core.re_adjust || core.units.begin()->arg1) { if(core.re_adjust || core.units.begin()->arg1) {
core.units.begin()->step = -1; core.units.begin()->step = -1;
return FALSE; return FALSE;
......
--ヒエログリフの石版
function c10248192.initial_effect(c)
--Activate
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetCode(EVENT_FREE_CHAIN)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e1:SetCost(c10248192.cost)
e1:SetOperation(c10248192.activate)
c:RegisterEffect(e1)
end
function c10248192.cost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.CheckLPCost(tp,1000) end
Duel.PayLPCost(tp,1000)
end
function c10248192.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end
Duel.SetTargetPlayer(tp)
end
function c10248192.activate(e,tp,eg,ep,ev,re,r,rp)
local p=Duel.GetChainInfo(0,CHAININFO_TARGET_PLAYER)
local e1=Effect.CreateEffect(e:GetHandler())
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_HAND_LIMIT)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e1:SetTargetRange(1,0)
e1:SetValue(7)
Duel.RegisterEffect(e1,p)
end
--検閲
function c16227556.initial_effect(c)
--Activate
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetCode(EVENT_FREE_CHAIN)
c:RegisterEffect(e1)
--
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(16227556,0))
e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O)
e2:SetCode(EVENT_PHASE+PHASE_STANDBY)
e2:SetRange(LOCATION_SZONE)
e2:SetCondition(c16227556.cfcon)
e2:SetCost(c16227556.cfcost)
e2:SetOperation(c16227556.cfop)
c:RegisterEffect(e2)
end
function c16227556.cfcon(e,tp,eg,ep,ev,re,r,rp)
return Duel.GetTurnPlayer()==tp and Duel.GetFieldGroupCount(tp,0,LOCATION_HAND)~=0
end
function c16227556.cfcost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.CheckLPCost(tp,500) end
Duel.PayLPCost(tp,500)
end
function c16227556.cfop(e,tp,eg,ep,ev,re,r,rp)
if not e:GetHandler():IsRelateToEffect(e) then return end
local g=Duel.GetFieldGroup(tp,0,LOCATION_HAND):RandomSelect(tp,1)
if g:GetCount()~=0 then
Duel.ConfirmCards(tp,g)
Duel.ShuffleHand(1-tp)
end
end
--セレモニーベル
function c20228463.initial_effect(c)
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_PUBLIC)
e1:SetRange(LOCATION_MZONE)
e1:SetTargetRange(LOCATION_HAND,LOCATION_HAND)
c:RegisterEffect(e1)
end
--衰弱の霧
function c26022485.initial_effect(c)
--Activate
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetCode(EVENT_FREE_CHAIN)
c:RegisterEffect(e1)
--
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_FIELD)
e2:SetCode(EFFECT_HAND_LIMIT)
e2:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e2:SetRange(LOCATION_SZONE)
e2:SetTargetRange(0,1)
e2:SetValue(5)
c:RegisterEffect(e2)
end
--真実の眼
function c34694160.initial_effect(c)
--Activate
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetCode(EVENT_FREE_CHAIN)
c:RegisterEffect(e1)
--
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_FIELD)
e2:SetCode(EFFECT_PUBLIC)
e2:SetRange(LOCATION_SZONE)
e2:SetTargetRange(0,LOCATION_HAND)
c:RegisterEffect(e2)
--recover
local e3=Effect.CreateEffect(c)
e3:SetDescription(aux.Stringid(34694160,0))
e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_F)
e3:SetCategory(CATEGORY_RECOVER)
e3:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_REPEAT)
e3:SetCode(EVENT_PHASE+PHASE_STANDBY)
e3:SetRange(LOCATION_SZONE)
e3:SetCountLimit(1)
e3:SetCondition(c34694160.reccon)
e3:SetTarget(c34694160.rectg)
e3:SetOperation(c34694160.recop)
c:RegisterEffect(e3)
end
function c34694160.reccon(e,tp,eg,ep,ev,re,r,rp)
return Duel.GetTurnPlayer()~=tp and Duel.IsExistingMatchingCard(Card.IsType,tp,0,LOCATION_HAND,1,nil,TYPE_SPELL)
end
function c34694160.rectg(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end
Duel.SetTargetPlayer(1-tp)
Duel.SetTargetParam(1000)
Duel.SetOperationInfo(0,CATEGORY_RECOVER,nil,0,1-tp,1000)
end
function c34694160.recop(e,tp,eg,ep,ev,re,r,rp)
if not e:GetHandler():IsRelateToEffect(e) then return end
local p,d=Duel.GetChainInfo(0,CHAININFO_TARGET_PLAYER,CHAININFO_TARGET_PARAM)
Duel.Recover(p,d,REASON_EFFECT)
end
...@@ -43,7 +43,7 @@ function c39272762.negcon(e,tp,eg,ep,ev,re,r,rp) ...@@ -43,7 +43,7 @@ function c39272762.negcon(e,tp,eg,ep,ev,re,r,rp)
end end
function c39272762.negop(e,tp,eg,ep,ev,re,r,rp) function c39272762.negop(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler() local c=e:GetHandler()
local g=Duel.GetMatchingGroup(Card.IsFaceup,tp,LOCATION_ONFIELD,LOCATION_MZONE,c) local g=Duel.GetMatchingGroup(Card.IsFaceup,tp,LOCATION_ONFIELD,LOCATION_ONFIELD,c)
local tc=g:GetFirst() local tc=g:GetFirst()
while tc do while tc do
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
......
--天変地異
function c62966332.initial_effect(c)
--Activate
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetCode(EVENT_FREE_CHAIN)
c:RegisterEffect(e1)
--
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_FIELD)
e2:SetCode(EFFECT_REVERSE_DECK)
e2:SetRange(LOCATION_SZONE)
c:RegisterEffect(e2)
end
--マインド·オン·エア
function c66690511.initial_effect(c)
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_PUBLIC)
e1:SetRange(LOCATION_MZONE)
e1:SetTargetRange(0,LOCATION_HAND)
c:RegisterEffect(e1)
end
--闇の訪れ
function c80168720.initial_effect(c)
--Activate
local e1=Effect.CreateEffect(c)
e1:SetCategory(CATEGORY_POSITION)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
e1:SetCode(EVENT_FREE_CHAIN)
e1:SetCost(c80168720.cost)
e1:SetTarget(c80168720.target)
e1:SetOperation(c80168720.activate)
c:RegisterEffect(e1)
end
function c80168720.cost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.IsExistingMatchingCard(Card.IsDiscardable,tp,LOCATION_HAND,0,2,e:GetHandler()) end
Duel.DiscardHand(tp,Card.IsDiscardable,2,2,REASON_COST+REASON_DISCARD)
end
function c80168720.filter(c)
return c:IsFaceup() and c:IsCanTurnSet()
end
function c80168720.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
if chkc then return chkc:IsLocation(LOCATION_MZONE) and c80168720.filter(chkc) end
if chk==0 then return Duel.IsExistingTarget(c80168720.filter,tp,LOCATION_MZONE,LOCATION_MZONE,1,nil) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FACEUP)
local g=Duel.SelectTarget(tp,c80168720.filter,tp,LOCATION_MZONE,LOCATION_MZONE,1,1,nil)
Duel.SetOperationInfo(0,CATEGORY_POSITION,g,1,0,0)
end
function c80168720.activate(e,tp,eg,ep,ev,re,r,rp)
local tc=Duel.GetFirstTarget()
if tc:IsRelateToEffect(e) and tc:IsFaceup() then
Duel.ChangePosition(tc,POS_FACEDOWN_ATTACK,0,POS_FACEDOWN_DEFENCE,0)
end
end
--黄金の天道虫
function c87102774.initial_effect(c)
--recover
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(87102774,0))
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O)
e1:SetCategory(CATEGORY_RECOVER)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e1:SetCode(EVENT_PHASE+PHASE_STANDBY)
e1:SetRange(LOCATION_HAND)
e1:SetCountLimit(1)
e1:SetCondition(c87102774.reccon)
e1:SetCost(c87102774.reccost)
e1:SetTarget(c87102774.rectg)
e1:SetOperation(c87102774.recop)
c:RegisterEffect(e1)
end
function c87102774.reccon(e,tp,eg,ep,ev,re,r,rp)
return Duel.GetTurnPlayer()==tp
end
function c87102774.reccost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return not e:GetHandler():IsPublic() end
local e1=Effect.CreateEffect(e:GetHandler())
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_PUBLIC)
e1:SetReset(RESET_EVENT+0x1fe0000+RESET_PHASE+PHASE_END)
e:GetHandler():RegisterEffect(e1)
end
function c87102774.rectg(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end
Duel.SetTargetPlayer(tp)
Duel.SetTargetParam(500)
Duel.SetOperationInfo(0,CATEGORY_RECOVER,nil,0,tp,500)
end
function c87102774.recop(e,tp,eg,ep,ev,re,r,rp)
local p,d=Duel.GetChainInfo(0,CHAININFO_TARGET_PLAYER,CHAININFO_TARGET_PARAM)
Duel.Recover(p,d,REASON_EFFECT)
end
--正々堂々
function c8951260.initial_effect(c)
--Activate
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetCode(EVENT_FREE_CHAIN)
c:RegisterEffect(e1)
--
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_FIELD)
e2:SetCode(EFFECT_PUBLIC)
e2:SetRange(LOCATION_SZONE)
e2:SetTargetRange(LOCATION_HAND,0)
e2:SetCondition(c8951260.con1)
c:RegisterEffect(e2)
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_FIELD)
e3:SetCode(EFFECT_PUBLIC)
e3:SetRange(LOCATION_SZONE)
e3:SetTargetRange(0,LOCATION_HAND)
e3:SetCondition(c8951260.con2)
c:RegisterEffect(e3)
end
function c8951260.con1(e)
return Duel.GetTurnPlayer()==e:GetHandlerPlayer()
end
function c8951260.con2(e)
return Duel.GetTurnPlayer()~=e:GetHandlerPlayer()
end
--無限の手札
function c94163677.initial_effect(c)
--Activate
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetCode(EVENT_FREE_CHAIN)
c:RegisterEffect(e1)
--
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_FIELD)
e2:SetCode(EFFECT_HAND_LIMIT)
e2:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e2:SetRange(LOCATION_SZONE)
e2:SetTargetRange(1,1)
e2:SetValue(100)
c:RegisterEffect(e2)
end
...@@ -407,6 +407,7 @@ EFFECT_CHANGE_ENVIRONMENT =290 ...@@ -407,6 +407,7 @@ EFFECT_CHANGE_ENVIRONMENT =290
EFFECT_NECRO_VALLEY =291 EFFECT_NECRO_VALLEY =291
EFFECT_FORBIDDEN =292 EFFECT_FORBIDDEN =292
EFFECT_NECRO_VALLEY_IM =293 EFFECT_NECRO_VALLEY_IM =293
EFFECT_REVERSE_DECK =294
EVENT_STARTUP =1000 EVENT_STARTUP =1000
EVENT_FLIP =1001 EVENT_FLIP =1001
......
...@@ -7,5 +7,5 @@ lastdeck = test ...@@ -7,5 +7,5 @@ lastdeck = test
textfont = c:/windows/fonts/simsun.ttc 14 textfont = c:/windows/fonts/simsun.ttc 14
numfont = c:/windows/fonts/arialbd.ttf numfont = c:/windows/fonts/arialbd.ttf
serverport = 7911 serverport = 7911
lastip = 192.168.2.100 lastip = 192.168.3.235
lastport = 7911 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