Commit f65a36ce authored by argon.sun's avatar argon.sun

fix

parent d1b1bc79
...@@ -444,7 +444,6 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -444,7 +444,6 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
case irr::EMIE_LMOUSE_LEFT_UP: { case irr::EMIE_LMOUSE_LEFT_UP: {
if(!is_draging) if(!is_draging)
break; break;
is_draging = false;
if(!mainGame->is_siding) { if(!mainGame->is_siding) {
if((hovered_pos == 1 && (draging_pointer->second.type & 0x802040)) || (hovered_pos == 2 && !(draging_pointer->second.type & 0x802040))) if((hovered_pos == 1 && (draging_pointer->second.type & 0x802040)) || (hovered_pos == 2 && !(draging_pointer->second.type & 0x802040)))
hovered_pos = 0; hovered_pos = 0;
...@@ -452,32 +451,47 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -452,32 +451,47 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(hovered_seq < deckManager.current_deck.main.size() && hovered_pos) if(hovered_seq < deckManager.current_deck.main.size() && hovered_pos)
deckManager.current_deck.main.insert(deckManager.current_deck.main.begin() + hovered_seq, draging_pointer); deckManager.current_deck.main.insert(deckManager.current_deck.main.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.main.push_back(draging_pointer); else deckManager.current_deck.main.push_back(draging_pointer);
is_draging = false;
} else if((hovered_pos == 2 || (hovered_pos == 0 && click_pos == 2)) && deckManager.current_deck.extra.size() < 15) { } else if((hovered_pos == 2 || (hovered_pos == 0 && click_pos == 2)) && deckManager.current_deck.extra.size() < 15) {
if(hovered_seq < deckManager.current_deck.extra.size() && hovered_pos) if(hovered_seq < deckManager.current_deck.extra.size() && hovered_pos)
deckManager.current_deck.extra.insert(deckManager.current_deck.extra.begin() + hovered_seq, draging_pointer); deckManager.current_deck.extra.insert(deckManager.current_deck.extra.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.extra.push_back(draging_pointer); else deckManager.current_deck.extra.push_back(draging_pointer);
is_draging = false;
} else if((hovered_pos == 3 || (hovered_pos == 0 && click_pos == 3)) && deckManager.current_deck.side.size() < 15) { } else if((hovered_pos == 3 || (hovered_pos == 0 && click_pos == 3)) && deckManager.current_deck.side.size() < 15) {
if(hovered_seq < deckManager.current_deck.side.size() && hovered_pos) if(hovered_seq < deckManager.current_deck.side.size() && hovered_pos)
deckManager.current_deck.side.insert(deckManager.current_deck.side.begin() + hovered_seq, draging_pointer); deckManager.current_deck.side.insert(deckManager.current_deck.side.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.side.push_back(draging_pointer); else deckManager.current_deck.side.push_back(draging_pointer);
is_draging = false;
} }
} else { } else {
if((hovered_pos == 1 && (draging_pointer->second.type & 0x802040)) || (hovered_pos == 2 && !(draging_pointer->second.type & 0x802040)) || hovered_pos == 4) if((hovered_pos == 1 && (draging_pointer->second.type & 0x802040)) || (hovered_pos == 2 && !(draging_pointer->second.type & 0x802040)) || hovered_pos == 4)
hovered_pos = 0; hovered_pos = 0;
if((hovered_pos == 1 || (hovered_pos == 0 && click_pos == 1)) && deckManager.current_deck.main.size() < 64) { if((hovered_pos == 1 || (hovered_pos == 0 && click_pos == 1)) && deckManager.current_deck.main.size() < 65) {
if(hovered_seq < deckManager.current_deck.main.size() && hovered_pos) if(hovered_seq < deckManager.current_deck.main.size() && hovered_pos)
deckManager.current_deck.main.insert(deckManager.current_deck.main.begin() + hovered_seq, draging_pointer); deckManager.current_deck.main.insert(deckManager.current_deck.main.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.main.push_back(draging_pointer); else deckManager.current_deck.main.push_back(draging_pointer);
is_draging = false;
} else if((hovered_pos == 2 || (hovered_pos == 0 && click_pos == 2)) && deckManager.current_deck.extra.size() < 20) { } else if((hovered_pos == 2 || (hovered_pos == 0 && click_pos == 2)) && deckManager.current_deck.extra.size() < 20) {
if(hovered_seq < deckManager.current_deck.extra.size() && hovered_pos) if(hovered_seq < deckManager.current_deck.extra.size() && hovered_pos)
deckManager.current_deck.extra.insert(deckManager.current_deck.extra.begin() + hovered_seq, draging_pointer); deckManager.current_deck.extra.insert(deckManager.current_deck.extra.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.extra.push_back(draging_pointer); else deckManager.current_deck.extra.push_back(draging_pointer);
is_draging = false;
} else if((hovered_pos == 3 || (hovered_pos == 0 && click_pos == 3)) && deckManager.current_deck.side.size() < 20) { } else if((hovered_pos == 3 || (hovered_pos == 0 && click_pos == 3)) && deckManager.current_deck.side.size() < 20) {
if(hovered_seq < deckManager.current_deck.side.size() && hovered_pos) if(hovered_seq < deckManager.current_deck.side.size() && hovered_pos)
deckManager.current_deck.side.insert(deckManager.current_deck.side.begin() + hovered_seq, draging_pointer); deckManager.current_deck.side.insert(deckManager.current_deck.side.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.side.push_back(draging_pointer); else deckManager.current_deck.side.push_back(draging_pointer);
is_draging = false;
} }
} }
if(is_draging) {
if(click_pos == 1)
deckManager.current_deck.main.push_back(draging_pointer);
else if(click_pos == 2)
deckManager.current_deck.extra.push_back(draging_pointer);
else if(click_pos == 3)
deckManager.current_deck.side.push_back(draging_pointer);
}
is_draging = false;
break; break;
} }
case irr::EMIE_RMOUSE_LEFT_UP: { case irr::EMIE_RMOUSE_LEFT_UP: {
......
...@@ -702,10 +702,14 @@ void Game::WaitFrameSignal(int frame) { ...@@ -702,10 +702,14 @@ void Game::WaitFrameSignal(int frame) {
signalFrame = frame; signalFrame = frame;
frameSignal.Wait(); frameSignal.Wait();
} }
void Game::DrawThumb(int code, position2di pos, std::unordered_map<int, int>* lflist) { void Game::DrawThumb(code_pointer cp, position2di pos, std::unordered_map<int, int>* lflist) {
int code = cp->first;
int lcode = cp->second.alias;
if(lcode == 0)
lcode = code;
driver->draw2DImage(imageManager.GetTextureThumb(code), pos); driver->draw2DImage(imageManager.GetTextureThumb(code), pos);
if(lflist->count(code)) { if(lflist->count(lcode)) {
switch((*lflist)[code]) { switch((*lflist)[lcode]) {
case 0: case 0:
driver->draw2DImage(imageManager.tLim, recti(pos.X, pos.Y, pos.X + 20, pos.Y + 20), recti(0, 0, 64, 64), 0, 0, true); driver->draw2DImage(imageManager.tLim, recti(pos.X, pos.Y, pos.X + 20, pos.Y + 20), recti(0, 0, 64, 64), 0, 0, true);
break; break;
...@@ -739,7 +743,7 @@ void Game::DrawDeckBd() { ...@@ -739,7 +743,7 @@ void Game::DrawDeckBd() {
dx = 436.0f / (lx - 1); dx = 436.0f / (lx - 1);
} }
for(int i = 0; i < deckManager.current_deck.main.size(); ++i) { for(int i = 0; i < deckManager.current_deck.main.size(); ++i) {
DrawThumb(deckManager.current_deck.main[i]->first, position2di(314 + (i % lx) * dx, 164 + (i / lx) * 68), deckBuilder.filterList); DrawThumb(deckManager.current_deck.main[i], position2di(314 + (i % lx) * dx, 164 + (i / lx) * 68), deckBuilder.filterList);
if(deckBuilder.hovered_pos == 1 && deckBuilder.hovered_seq == i) if(deckBuilder.hovered_pos == 1 && deckBuilder.hovered_seq == i)
driver->draw2DRectangleOutline(recti(313 + (i % lx) * dx, 163 + (i / lx) * 68, 359 + (i % lx) * dx, 228 + (i / lx) * 68)); driver->draw2DRectangleOutline(recti(313 + (i % lx) * dx, 163 + (i / lx) * 68, 359 + (i % lx) * dx, 228 + (i / lx) * 68));
} }
...@@ -756,7 +760,7 @@ void Game::DrawDeckBd() { ...@@ -756,7 +760,7 @@ void Game::DrawDeckBd() {
dx = 436.0f / 9; dx = 436.0f / 9;
else dx = 436.0f / (deckManager.current_deck.extra.size() - 1); else dx = 436.0f / (deckManager.current_deck.extra.size() - 1);
for(int i = 0; i < deckManager.current_deck.extra.size(); ++i) { for(int i = 0; i < deckManager.current_deck.extra.size(); ++i) {
DrawThumb(deckManager.current_deck.extra[i]->first, position2di(314 + i * dx, 466), deckBuilder.filterList); DrawThumb(deckManager.current_deck.extra[i], position2di(314 + i * dx, 466), deckBuilder.filterList);
if(deckBuilder.hovered_pos == 2 && deckBuilder.hovered_seq == i) if(deckBuilder.hovered_pos == 2 && deckBuilder.hovered_seq == i)
driver->draw2DRectangleOutline(recti(313 + i * dx, 465, 359 + i * dx, 531)); driver->draw2DRectangleOutline(recti(313 + i * dx, 465, 359 + i * dx, 531));
} }
...@@ -773,7 +777,7 @@ void Game::DrawDeckBd() { ...@@ -773,7 +777,7 @@ void Game::DrawDeckBd() {
dx = 436.0f / 9; dx = 436.0f / 9;
else dx = 436.0f / (deckManager.current_deck.side.size() - 1); else dx = 436.0f / (deckManager.current_deck.side.size() - 1);
for(int i = 0; i < deckManager.current_deck.side.size(); ++i) { for(int i = 0; i < deckManager.current_deck.side.size(); ++i) {
DrawThumb(deckManager.current_deck.side[i]->first, position2di(314 + i * dx, 564), deckBuilder.filterList); DrawThumb(deckManager.current_deck.side[i], position2di(314 + i * dx, 564), deckBuilder.filterList);
if(deckBuilder.hovered_pos == 3 && deckBuilder.hovered_seq == i) if(deckBuilder.hovered_pos == 3 && deckBuilder.hovered_seq == i)
driver->draw2DRectangleOutline(recti(313 + i * dx, 563, 359 + i * dx, 629)); driver->draw2DRectangleOutline(recti(313 + i * dx, 563, 359 + i * dx, 629));
} }
...@@ -789,7 +793,7 @@ void Game::DrawDeckBd() { ...@@ -789,7 +793,7 @@ void Game::DrawDeckBd() {
code_pointer ptr = deckBuilder.results[i + mainGame->scrFilter->getPos()]; code_pointer ptr = deckBuilder.results[i + mainGame->scrFilter->getPos()];
if(deckBuilder.hovered_pos == 4 && deckBuilder.hovered_seq == i) if(deckBuilder.hovered_pos == 4 && deckBuilder.hovered_seq == i)
driver->draw2DRectangle(0x80000000, recti(806, 164 + i * 66, 1019, 230 + i * 66)); driver->draw2DRectangle(0x80000000, recti(806, 164 + i * 66, 1019, 230 + i * 66));
DrawThumb(ptr->first, position2di(810, 165 + i * 66), deckBuilder.filterList); DrawThumb(ptr, position2di(810, 165 + i * 66), deckBuilder.filterList);
if(ptr->second.type & TYPE_MONSTER) { if(ptr->second.type & TYPE_MONSTER) {
myswprintf(textBuffer, L"%ls", dataManager.GetName(ptr->first)); myswprintf(textBuffer, L"%ls", dataManager.GetName(ptr->first));
textFont->draw(textBuffer, recti(859, 164 + i * 66, 955, 185 + i * 66), 0xff000000, false, false); textFont->draw(textBuffer, recti(859, 164 + i * 66, 955, 185 + i * 66), 0xff000000, false, false);
...@@ -827,7 +831,7 @@ void Game::DrawDeckBd() { ...@@ -827,7 +831,7 @@ void Game::DrawDeckBd() {
} }
} }
if(deckBuilder.is_draging) { if(deckBuilder.is_draging) {
DrawThumb(deckBuilder.draging_pointer->first, position2di(deckBuilder.dragx - 22, deckBuilder.dragy - 32), deckBuilder.filterList); DrawThumb(deckBuilder.draging_pointer, position2di(deckBuilder.dragx - 22, deckBuilder.dragy - 32), deckBuilder.filterList);
} }
} }
} }
...@@ -2447,6 +2447,7 @@ void DuelClient::BeginRefreshHost() { ...@@ -2447,6 +2447,7 @@ void DuelClient::BeginRefreshHost() {
if(is_refreshing) if(is_refreshing)
return; return;
is_refreshing = true; is_refreshing = true;
mainGame->btnLanRefresh->setEnabled(false);
mainGame->lstHostList->clear(); mainGame->lstHostList->clear();
remotes.clear(); remotes.clear();
hosts.clear(); hosts.clear();
...@@ -2466,7 +2467,7 @@ void DuelClient::BeginRefreshHost() { ...@@ -2466,7 +2467,7 @@ void DuelClient::BeginRefreshHost() {
closesocket(reply); closesocket(reply);
return; return;
} }
timeval timeout = {5, 0}; timeval timeout = {3, 0};
resp_event = event_new(broadev, reply, EV_TIMEOUT | EV_READ | EV_PERSIST, BroadcastReply, broadev); resp_event = event_new(broadev, reply, EV_TIMEOUT | EV_READ | EV_PERSIST, BroadcastReply, broadev);
event_add(resp_event, &timeout); event_add(resp_event, &timeout);
Thread::NewThread(RefreshThread, broadev); Thread::NewThread(RefreshThread, broadev);
...@@ -2510,7 +2511,10 @@ int DuelClient::RefreshThread(void* arg) { ...@@ -2510,7 +2511,10 @@ int DuelClient::RefreshThread(void* arg) {
} }
void DuelClient::BroadcastReply(evutil_socket_t fd, short events, void* arg) { void DuelClient::BroadcastReply(evutil_socket_t fd, short events, void* arg) {
if(events & EV_TIMEOUT) { if(events & EV_TIMEOUT) {
evutil_closesocket(fd);
event_base_loopbreak((event_base*)arg); event_base_loopbreak((event_base*)arg);
if(!is_closing)
mainGame->btnLanRefresh->setEnabled(true);
} else if(events & EV_READ) { } else if(events & EV_READ) {
sockaddr_in bc_addr; sockaddr_in bc_addr;
int sz = sizeof(sockaddr_in); int sz = sizeof(sockaddr_in);
...@@ -2518,7 +2522,7 @@ void DuelClient::BroadcastReply(evutil_socket_t fd, short events, void* arg) { ...@@ -2518,7 +2522,7 @@ void DuelClient::BroadcastReply(evutil_socket_t fd, short events, void* arg) {
int ret = recvfrom(fd, buf, 256, 0, (sockaddr*)&bc_addr, &sz); int ret = recvfrom(fd, buf, 256, 0, (sockaddr*)&bc_addr, &sz);
unsigned int ipaddr = bc_addr.sin_addr.s_addr; unsigned int ipaddr = bc_addr.sin_addr.s_addr;
HostPacket* pHP = (HostPacket*)buf; HostPacket* pHP = (HostPacket*)buf;
if(pHP->identifier == NETWORK_SERVER_ID && pHP->version == PRO_VERSION && remotes.find(ipaddr) == remotes.end() ) { if(!is_closing && pHP->identifier == NETWORK_SERVER_ID && pHP->version == PRO_VERSION && remotes.find(ipaddr) == remotes.end() ) {
mainGame->gMutex.Lock(); mainGame->gMutex.Lock();
remotes.insert(ipaddr); remotes.insert(ipaddr);
pHP->ipaddr = ipaddr; pHP->ipaddr = ipaddr;
......
...@@ -75,7 +75,7 @@ public: ...@@ -75,7 +75,7 @@ public:
void HideElement(irr::gui::IGUIElement* element, bool set_action = false); void HideElement(irr::gui::IGUIElement* element, bool set_action = false);
void PopupElement(irr::gui::IGUIElement* element, int hideframe = 0); void PopupElement(irr::gui::IGUIElement* element, int hideframe = 0);
void WaitFrameSignal(int frame); void WaitFrameSignal(int frame);
void DrawThumb(int code, position2di pos, std::unordered_map<int, int>* lflist); void DrawThumb(code_pointer cp, position2di pos, std::unordered_map<int, int>* lflist);
void DrawDeckBd(); void DrawDeckBd();
void LoadConfig(); void LoadConfig();
void SaveConfig(); void SaveConfig();
......
--侵食細胞「A」
function c2561856.initial_effect(c)
--counter
local e1=Effect.CreateEffect(c)
e1:SetCategory(CATEGORY_COUNTER)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetCode(EVENT_FREE_CHAIN)
e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
e1:SetTarget(c2561856.target)
e1:SetOperation(c2561856.operation)
c:RegisterEffect(e1)
end
function c2561856.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
if chkc then return chkc:IsControler(1-tp) and chkc:IsLocation(LOCATION_MZONE) and chkc:IsFaceup() end
if chk==0 then return Duel.IsExistingTarget(Card.IsFaceup,tp,0,LOCATION_MZONE,1,nil) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FACEUP)
local g=Duel.SelectTarget(tp,Card.IsFaceup,tp,0,LOCATION_MZONE,1,1,nil)
Duel.SetOperationInfo(0,CATEGORY_COUNTER,g,1,0xe,1)
end
function c2561856.operation(e,tp,eg,ep,ev,re,r,rp)
local tc=Duel.GetFirstTarget()
if tc:IsFaceup() and tc:IsRelateToEffect(e) then
tc:AddCounter(0xe,1)
end
end
--M·HERO ヴェイパー
function c30920352.initial_effect(c)
c:EnableReviveLimit()
--spsummon condition
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e1:SetCode(EFFECT_SPSUMMON_CONDITION)
e1:SetValue(aux.FALSE)
c:RegisterEffect(e1)
--indes
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_SINGLE)
e2:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e2:SetRange(LOCATION_MZONE)
e2:SetCode(EFFECT_INDESTRUCTABLE_EFFECT)
e2:SetValue(1)
c:RegisterEffect(e2)
end
...@@ -83,11 +83,11 @@ function c31829185.eqop(e,tp,eg,ep,ev,re,r,rp) ...@@ -83,11 +83,11 @@ function c31829185.eqop(e,tp,eg,ep,ev,re,r,rp)
e2:SetValue(tp) e2:SetValue(tp)
e2:SetReset(RESET_EVENT+0x1fc0000) e2:SetReset(RESET_EVENT+0x1fc0000)
e2:SetCondition(c31829185.con) e2:SetCondition(c31829185.con)
tc:RegisterEffect(e2) tc:RegisterEffect(e2,true)
end end
end end
function c31829185.con(e) function c31829185.con(e)
local c=e:GetOwner() local c=e:GetOwner()
local h=e:GetHandler() local h=e:GetHandler()
return not c:IsDisabled() and c:IsHasCardTarget(h) return not c:IsDisabled() and c:IsHasCardTarget(h) and not c:IsImmuneToEffect(e)
end end
...@@ -22,6 +22,7 @@ function c3900605.operation(e,tp,eg,ep,ev,re,r,rp) ...@@ -22,6 +22,7 @@ function c3900605.operation(e,tp,eg,ep,ev,re,r,rp)
local dg=Duel.GetOperatedGroup() local dg=Duel.GetOperatedGroup()
local ct1=dg:FilterCount(Card.IsControler,nil,tp) local ct1=dg:FilterCount(Card.IsControler,nil,tp)
local ct2=dg:GetCount()-ct1 local ct2=dg:GetCount()-ct1
Duel.BreakEffect()
if ct1~=0 then Duel.Draw(tp,ct1,REASON_EFFECT) end if ct1~=0 then Duel.Draw(tp,ct1,REASON_EFFECT) end
if ct2~=0 then Duel.Draw(1-tp,ct2,REASON_EFFECT) end if ct2~=0 then Duel.Draw(1-tp,ct2,REASON_EFFECT) end
--cannot set --cannot set
......
...@@ -3,7 +3,7 @@ function c41639001.initial_effect(c) ...@@ -3,7 +3,7 @@ function c41639001.initial_effect(c)
--spsummon --spsummon
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(41639001,0)) e1:SetDescription(aux.Stringid(41639001,0))
e1:SetType(EFFECT_TYPE_QUICK_O) e1:SetType(EFFECT_TYPE_QUICK_F)
e1:SetCategory(CATEGORY_SPECIAL_SUMMON) e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
e1:SetCode(EVENT_BECOME_TARGET) e1:SetCode(EVENT_BECOME_TARGET)
e1:SetRange(LOCATION_MZONE) e1:SetRange(LOCATION_MZONE)
......
...@@ -71,14 +71,14 @@ function c45247637.operation(e,tp,eg,ep,ev,re,r,rp) ...@@ -71,14 +71,14 @@ function c45247637.operation(e,tp,eg,ep,ev,re,r,rp)
e2:SetValue(tp) e2:SetValue(tp)
e2:SetReset(RESET_EVENT+0x1fc0000) e2:SetReset(RESET_EVENT+0x1fc0000)
e2:SetCondition(c45247637.con) e2:SetCondition(c45247637.con)
tc:RegisterEffect(e2) tc:RegisterEffect(e2,true)
e:SetLabelObject(e2) e:SetLabelObject(e2)
end end
end end
function c45247637.con(e) function c45247637.con(e)
local c=e:GetOwner() local c=e:GetOwner()
local h=e:GetHandler() local h=e:GetHandler()
return not c:IsDisabled() and c:IsHasCardTarget(h) return not c:IsDisabled() and c:IsHasCardTarget(h) and not c:IsImmuneToEffect(e)
end end
function c45247637.ccon(e,tp,eg,ep,ev,re,r,rp) function c45247637.ccon(e,tp,eg,ep,ev,re,r,rp)
return tp==Duel.GetTurnPlayer() return tp==Duel.GetTurnPlayer()
......
...@@ -56,13 +56,13 @@ function c45986603.operation(e,tp,eg,ep,ev,re,r,rp) ...@@ -56,13 +56,13 @@ function c45986603.operation(e,tp,eg,ep,ev,re,r,rp)
e2:SetValue(tp) e2:SetValue(tp)
e2:SetReset(RESET_EVENT+0x1fc0000) e2:SetReset(RESET_EVENT+0x1fc0000)
e2:SetCondition(c45986603.con) e2:SetCondition(c45986603.con)
tc:RegisterEffect(e2) tc:RegisterEffect(e2,true)
end end
end end
function c45986603.con(e) function c45986603.con(e)
local c=e:GetOwner() local c=e:GetOwner()
local h=e:GetHandler() local h=e:GetHandler()
return not c:IsDisabled() and c:IsHasCardTarget(h) return not c:IsDisabled() and c:IsHasCardTarget(h) and not c:IsImmuneToEffect(e)
end end
function c45986603.reccon(e,tp,eg,ep,ev,re,r,rp) function c45986603.reccon(e,tp,eg,ep,ev,re,r,rp)
return tp~=Duel.GetTurnPlayer() return tp~=Duel.GetTurnPlayer()
......
...@@ -60,7 +60,12 @@ function c4722253.negtg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -60,7 +60,12 @@ function c4722253.negtg(e,tp,eg,ep,ev,re,r,rp,chk)
Duel.SetOperationInfo(0,CATEGORY_DESTROY,eg,1,0,0) Duel.SetOperationInfo(0,CATEGORY_DESTROY,eg,1,0,0)
end end
end end
function c4722253.cfilter3(c)
return c:IsFaceup() and c:IsRace(RACE_WARRIOR)
end
function c4722253.negop(e,tp,eg,ep,ev,re,r,rp) function c4722253.negop(e,tp,eg,ep,ev,re,r,rp)
if Duel.IsExistingMatchingCard(c4722253.cfilter,tp,LOCATION_MZONE,0,1,nil)
or not Duel.IsExistingMatchingCard(c4722253.cfilter3,tp,LOCATION_MZONE,0,1,nil) then return end
Duel.NegateActivation(ev) Duel.NegateActivation(ev)
if re:GetHandler():IsRelateToEffect(re) then if re:GetHandler():IsRelateToEffect(re) then
Duel.Destroy(eg,REASON_EFFECT) Duel.Destroy(eg,REASON_EFFECT)
......
...@@ -37,14 +37,19 @@ function c48582558.activate(e,tp,eg,ep,ev,re,r,rp) ...@@ -37,14 +37,19 @@ function c48582558.activate(e,tp,eg,ep,ev,re,r,rp)
e3:SetType(EFFECT_TYPE_FIELD) e3:SetType(EFFECT_TYPE_FIELD)
e3:SetProperty(EFFECT_FLAG_SET_AVAILABLE) e3:SetProperty(EFFECT_FLAG_SET_AVAILABLE)
e3:SetCode(EFFECT_CANNOT_BE_BATTLE_TARGET) e3:SetCode(EFFECT_CANNOT_BE_BATTLE_TARGET)
e3:SetRange(LOCATION_MZONE)
e3:SetTargetRange(LOCATION_MZONE,0) e3:SetTargetRange(LOCATION_MZONE,0)
e3:SetCondition(c48582558.atkcon)
e3:SetTarget(c48582558.atktg) e3:SetTarget(c48582558.atktg)
e3:SetValue(1) e3:SetValue(1)
e3:SetReset(RESET_EVENT+0x1fe0000+RESET_PHASE+PHASE_END) e3:SetReset(RESET_PHASE+PHASE_END)
tc:RegisterEffect(e3) e3:SetLabelObject(tc)
e3:SetLabel(tc:GetRealFieldID())
Duel.RegisterEffect(e3,tp)
end end
end end
function c48582558.atkcon(e)
return e:GetLabelObject():GetRealFieldID()==e:GetLabel()
end
function c48582558.atktg(e,c) function c48582558.atktg(e,c)
return c~=e:GetHandler() return c:GetRealFieldID()~=e:GetLabel()
end end
...@@ -47,6 +47,7 @@ function c48868994.opa(e,tp,eg,ep,ev,re,r,rp) ...@@ -47,6 +47,7 @@ function c48868994.opa(e,tp,eg,ep,ev,re,r,rp)
end end
function c48868994.cond(e,tp,eg,ep,ev,re,r,rp) function c48868994.cond(e,tp,eg,ep,ev,re,r,rp)
return not e:GetHandler():IsDisabled() and e:GetHandler():IsDefence() return not e:GetHandler():IsDisabled() and e:GetHandler():IsDefence()
and not e:GetHandler():IsHasEffect(48868994)
end end
function c48868994.filter(c) function c48868994.filter(c)
return c:IsFaceup() and c:IsAttack() and c:IsAbleToChangeControler() return c:IsFaceup() and c:IsAttack() and c:IsAbleToChangeControler()
...@@ -77,6 +78,11 @@ function c48868994.opd(e,tp,eg,ep,ev,re,r,rp) ...@@ -77,6 +78,11 @@ function c48868994.opd(e,tp,eg,ep,ev,re,r,rp)
e1:SetReset(RESET_EVENT+0x1fe0000) e1:SetReset(RESET_EVENT+0x1fe0000)
e1:SetValue(c48868994.eqlimit) e1:SetValue(c48868994.eqlimit)
tc:RegisterEffect(e1) tc:RegisterEffect(e1)
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_EQUIP)
e2:SetCode(48868994)
e2:SetReset(RESET_EVENT+0x1fe0000)
tc:RegisterEffect(e2)
else Duel.SendtoGrave(tc,REASON_EFFECT) end else Duel.SendtoGrave(tc,REASON_EFFECT) end
end end
end end
...@@ -20,7 +20,7 @@ function c51549976.cost(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -20,7 +20,7 @@ function c51549976.cost(e,tp,eg,ep,ev,re,r,rp,chk)
Duel.SendtoGrave(g,REASON_COST) Duel.SendtoGrave(g,REASON_COST)
end end
function c51549976.target(e,tp,eg,ep,ev,re,r,rp,chk) function c51549976.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.IsExistingMatchingCard(Card.IsDestructable,tp,0,LOCATION_ONFIELD,1,nil) end if chk==0 then return true end
local g=Duel.GetMatchingGroup(Card.IsDestructable,tp,0,LOCATION_ONFIELD,nil) local g=Duel.GetMatchingGroup(Card.IsDestructable,tp,0,LOCATION_ONFIELD,nil)
Duel.SetOperationInfo(0,CATEGORY_DESTROY,g,g:GetCount(),0,0) Duel.SetOperationInfo(0,CATEGORY_DESTROY,g,g:GetCount(),0,0)
end end
......
...@@ -15,11 +15,14 @@ end ...@@ -15,11 +15,14 @@ end
function c52497105.condition(e,tp,eg,ep,ev,re,r,rp) function c52497105.condition(e,tp,eg,ep,ev,re,r,rp)
return Duel.GetCurrentPhase()~=PHASE_DAMAGE or not Duel.IsDamageCalculated() return Duel.GetCurrentPhase()~=PHASE_DAMAGE or not Duel.IsDamageCalculated()
end end
function c52497105.filter(c)
return c:IsFaceup() and (Duel.GetCurrentPhase()~=PHASE_DAMAGE or c~=Duel.GetAttacker() or Duel.GetAttackTarget())
end
function c52497105.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc) function c52497105.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
if chkc then return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(tp) and chkc:IsFaceup() end if chkc then return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(tp) and c52497105.filter(chkc) end
if chk==0 then return Duel.IsExistingTarget(Card.IsFaceup,tp,LOCATION_MZONE,0,1,nil) end if chk==0 then return Duel.IsExistingTarget(c52497105.filter,tp,LOCATION_MZONE,0,1,nil) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FACEUP) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FACEUP)
Duel.SelectTarget(tp,Card.IsFaceup,tp,LOCATION_MZONE,0,1,1,nil) Duel.SelectTarget(tp,c52497105.filter,tp,LOCATION_MZONE,0,1,1,nil)
end end
function c52497105.activate(e,tp,eg,ep,ev,re,r,rp) function c52497105.activate(e,tp,eg,ep,ev,re,r,rp)
local tc=Duel.GetFirstTarget() local tc=Duel.GetFirstTarget()
......
...@@ -35,10 +35,10 @@ function c53610653.initial_effect(c) ...@@ -35,10 +35,10 @@ function c53610653.initial_effect(c)
c:RegisterEffect(e4) c:RegisterEffect(e4)
end end
function c53610653.eqlimit(e,c) function c53610653.eqlimit(e,c)
return c:IsRace(RACE_SPELLCASTER) return c:IsRace(RACE_SPELLCASTER) and not c:IsType(TYPE_XYZ)
end end
function c53610653.filter(c) function c53610653.filter(c)
return c:IsFaceup() and c:IsRace(RACE_SPELLCASTER) return c:IsFaceup() and c:IsRace(RACE_SPELLCASTER) and not c:IsType(TYPE_XYZ)
end end
function c53610653.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc) function c53610653.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
if chkc then return chkc:IsLocation(LOCATION_MZONE) and c53610653.filter(chkc) end if chkc then return chkc:IsLocation(LOCATION_MZONE) and c53610653.filter(chkc) end
......
...@@ -31,7 +31,7 @@ function c66066482.initial_effect(c) ...@@ -31,7 +31,7 @@ function c66066482.initial_effect(c)
e3:SetDescription(aux.Stringid(66066482,1)) e3:SetDescription(aux.Stringid(66066482,1))
e3:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O) e3:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O)
e3:SetCode(EVENT_EQUIP) e3:SetCode(EVENT_EQUIP)
e3:SetProperty(EFFECT_FLAG_DELAY) e3:SetProperty(EFFECT_FLAG_DELAY+EFFECT_FLAG_DAMAGE_STEP)
e3:SetRange(LOCATION_MZONE) e3:SetRange(LOCATION_MZONE)
e3:SetCondition(c66066482.cfcon) e3:SetCondition(c66066482.cfcon)
e3:SetTarget(c66066482.cftg) e3:SetTarget(c66066482.cftg)
......
...@@ -18,23 +18,31 @@ function c85709845.activate(e,tp,eg,ep,ev,re,r,rp) ...@@ -18,23 +18,31 @@ function c85709845.activate(e,tp,eg,ep,ev,re,r,rp)
local tc=Duel.GetFirstTarget() local tc=Duel.GetFirstTarget()
if tc:IsRelateToEffect(e) and tc:IsDefence() then if tc:IsRelateToEffect(e) and tc:IsDefence() then
Duel.ChangePosition(tc,POS_FACEUP_ATTACK) Duel.ChangePosition(tc,POS_FACEUP_ATTACK)
local a=Duel.GetAttacker()
local e1=Effect.CreateEffect(e:GetHandler()) local e1=Effect.CreateEffect(e:GetHandler())
e1:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS) e1:SetDescription(aux.Stringid(85709845,0))
e1:SetCategory(CATEGORY_DAMAGE)
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_F)
e1:SetCode(EVENT_BATTLE_DESTROYED) e1:SetCode(EVENT_BATTLE_DESTROYED)
e1:SetCondition(c85709845.damcon)
e1:SetTarget(c85709845.damtg)
e1:SetOperation(c85709845.damop) e1:SetOperation(c85709845.damop)
e1:SetLabel(1-tp) e1:SetReset(RESET_PHASE+PHASE_DAMAGE)
e1:SetReset(RESET_EVENT+0x17a0000+RESET_PHASE+PHASE_DAMAGE) Duel.RegisterEffect(e1,tp)
a:RegisterEffect(e1)
end end
end end
function c85709845.damop(e,tp,eg,ep,ev,re,r,rp) function c85709845.damcon(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler() local tc=eg:GetFirst()
local atk=c:GetAttack() return tc==Duel.GetAttacker() and tc:IsLocation(LOCATION_GRAVE) and tc:IsReason(REASON_BATTLE)
end
function c85709845.damtg(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end
local atk=eg:GetFirst():GetBaseAttack()
if atk<0 then atk=0 end if atk<0 then atk=0 end
if atk>0 then Duel.SetTargetPlayer(1-tp)
Duel.Hint(HINT_CARD,tp,99004752) Duel.SetTargetParam(atk)
Duel.Hint(HINT_CARD,1-tp,99004752) Duel.SetOperationInfo(0,CATEGORY_DAMAGE,nil,0,1-tp,atk)
Duel.Damage(e:GetLabel(),atk,REASON_EFFECT) end
end function c85709845.damop(e,tp,eg,ep,ev,re,r,rp)
local p,d=Duel.GetChainInfo(0,CHAININFO_TARGET_PLAYER,CHAININFO_TARGET_PARAM)
Duel.Damage(p,d,REASON_EFFECT)
end end
--逆ギレパンダ
function c9817297.initial_effect(c)
--atk
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e1:SetRange(LOCATION_MZONE)
e1:SetCode(EFFECT_UPDATE_ATTACK)
e1:SetValue(c9817297.val)
c:RegisterEffect(e1)
--pierce
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_SINGLE)
e2:SetCode(EFFECT_PIERCE)
c:RegisterEffect(e2)
end
function c9817297.val(e,c)
return Duel.GetFieldGroupCount(c:GetControler(),0,LOCATION_MZONE)*500
end
...@@ -32,25 +32,32 @@ function c99004752.activate(e,tp,eg,ep,ev,re,r,rp) ...@@ -32,25 +32,32 @@ function c99004752.activate(e,tp,eg,ep,ev,re,r,rp)
e1:SetReset(RESET_EVENT+0x1fe0000+RESET_PHASE+PHASE_END) e1:SetReset(RESET_EVENT+0x1fe0000+RESET_PHASE+PHASE_END)
tc:RegisterEffect(e1) tc:RegisterEffect(e1)
local e2=Effect.CreateEffect(e:GetHandler()) local e2=Effect.CreateEffect(e:GetHandler())
e2:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS) e2:SetDescription(aux.Stringid(99004752,0))
e2:SetCategory(CATEGORY_DAMAGE)
e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_F)
e2:SetCode(EVENT_BATTLE_DESTROYED) e2:SetCode(EVENT_BATTLE_DESTROYED)
e2:SetCondition(c99004752.damcon) e2:SetCondition(c99004752.damcon)
e2:SetTarget(c99004752.damtg)
e2:SetOperation(c99004752.damop) e2:SetOperation(c99004752.damop)
e2:SetReset(RESET_EVENT+0x17a0000+RESET_PHASE+PHASE_END) e2:SetReset(RESET_PHASE+PHASE_END)
tc:RegisterEffect(e2) e2:SetLabelObject(tc)
Duel.RegisterEffect(e2,tp)
tc:RegisterFlagEffect(99004752,RESET_EVENT+0x17a0000+RESET_PHASE+PHASE_END,0,1)
end end
end end
function c99004752.damcon(e,tp,eg,ep,ev,re,r,rp) function c99004752.damcon(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler() local tc=eg:GetFirst()
return c:GetPreviousControler()==c:GetControler() return tc==e:GetLabelObject() and tc:GetFlagEffect(99004752)~=0
end end
function c99004752.damop(e,tp,eg,ep,ev,re,r,rp) function c99004752.damtg(e,tp,eg,ep,ev,re,r,rp,chk)
local c=e:GetHandler() if chk==0 then return true end
local atk=c:GetAttack() local atk=eg:GetFirst():GetBaseAttack()
if atk<0 then atk=0 end if atk<0 then atk=0 end
if atk>0 then Duel.SetTargetPlayer(1-tp)
Duel.Hint(HINT_CARD,tp,99004752) Duel.SetTargetParam(atk)
Duel.Hint(HINT_CARD,1-tp,99004752) Duel.SetOperationInfo(0,CATEGORY_DAMAGE,nil,0,1-tp,atk)
Duel.Damage(tp,atk,REASON_EFFECT) end
end function c99004752.damop(e,tp,eg,ep,ev,re,r,rp)
local p,d=Duel.GetChainInfo(0,CHAININFO_TARGET_PLAYER,CHAININFO_TARGET_PARAM)
Duel.Damage(p,d,REASON_EFFECT)
end end
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