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

fix

parent d1b1bc79
......@@ -444,7 +444,6 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
case irr::EMIE_LMOUSE_LEFT_UP: {
if(!is_draging)
break;
is_draging = false;
if(!mainGame->is_siding) {
if((hovered_pos == 1 && (draging_pointer->second.type & 0x802040)) || (hovered_pos == 2 && !(draging_pointer->second.type & 0x802040)))
hovered_pos = 0;
......@@ -452,32 +451,47 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(hovered_seq < deckManager.current_deck.main.size() && hovered_pos)
deckManager.current_deck.main.insert(deckManager.current_deck.main.begin() + hovered_seq, 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) {
if(hovered_seq < deckManager.current_deck.extra.size() && hovered_pos)
deckManager.current_deck.extra.insert(deckManager.current_deck.extra.begin() + hovered_seq, 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) {
if(hovered_seq < deckManager.current_deck.side.size() && hovered_pos)
deckManager.current_deck.side.insert(deckManager.current_deck.side.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.side.push_back(draging_pointer);
is_draging = false;
}
} else {
if((hovered_pos == 1 && (draging_pointer->second.type & 0x802040)) || (hovered_pos == 2 && !(draging_pointer->second.type & 0x802040)) || hovered_pos == 4)
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)
deckManager.current_deck.main.insert(deckManager.current_deck.main.begin() + hovered_seq, 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) {
if(hovered_seq < deckManager.current_deck.extra.size() && hovered_pos)
deckManager.current_deck.extra.insert(deckManager.current_deck.extra.begin() + hovered_seq, 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) {
if(hovered_seq < deckManager.current_deck.side.size() && hovered_pos)
deckManager.current_deck.side.insert(deckManager.current_deck.side.begin() + hovered_seq, 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;
}
case irr::EMIE_RMOUSE_LEFT_UP: {
......
......@@ -702,10 +702,14 @@ void Game::WaitFrameSignal(int frame) {
signalFrame = frame;
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);
if(lflist->count(code)) {
switch((*lflist)[code]) {
if(lflist->count(lcode)) {
switch((*lflist)[lcode]) {
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);
break;
......@@ -739,7 +743,7 @@ void Game::DrawDeckBd() {
dx = 436.0f / (lx - 1);
}
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)
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() {
dx = 436.0f / 9;
else dx = 436.0f / (deckManager.current_deck.extra.size() - 1);
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)
driver->draw2DRectangleOutline(recti(313 + i * dx, 465, 359 + i * dx, 531));
}
......@@ -773,7 +777,7 @@ void Game::DrawDeckBd() {
dx = 436.0f / 9;
else dx = 436.0f / (deckManager.current_deck.side.size() - 1);
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)
driver->draw2DRectangleOutline(recti(313 + i * dx, 563, 359 + i * dx, 629));
}
......@@ -789,7 +793,7 @@ void Game::DrawDeckBd() {
code_pointer ptr = deckBuilder.results[i + mainGame->scrFilter->getPos()];
if(deckBuilder.hovered_pos == 4 && deckBuilder.hovered_seq == i)
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) {
myswprintf(textBuffer, L"%ls", dataManager.GetName(ptr->first));
textFont->draw(textBuffer, recti(859, 164 + i * 66, 955, 185 + i * 66), 0xff000000, false, false);
......@@ -827,7 +831,7 @@ void Game::DrawDeckBd() {
}
}
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() {
if(is_refreshing)
return;
is_refreshing = true;
mainGame->btnLanRefresh->setEnabled(false);
mainGame->lstHostList->clear();
remotes.clear();
hosts.clear();
......@@ -2466,7 +2467,7 @@ void DuelClient::BeginRefreshHost() {
closesocket(reply);
return;
}
timeval timeout = {5, 0};
timeval timeout = {3, 0};
resp_event = event_new(broadev, reply, EV_TIMEOUT | EV_READ | EV_PERSIST, BroadcastReply, broadev);
event_add(resp_event, &timeout);
Thread::NewThread(RefreshThread, broadev);
......@@ -2510,7 +2511,10 @@ int DuelClient::RefreshThread(void* arg) {
}
void DuelClient::BroadcastReply(evutil_socket_t fd, short events, void* arg) {
if(events & EV_TIMEOUT) {
evutil_closesocket(fd);
event_base_loopbreak((event_base*)arg);
if(!is_closing)
mainGame->btnLanRefresh->setEnabled(true);
} else if(events & EV_READ) {
sockaddr_in bc_addr;
int sz = sizeof(sockaddr_in);
......@@ -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);
unsigned int ipaddr = bc_addr.sin_addr.s_addr;
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();
remotes.insert(ipaddr);
pHP->ipaddr = ipaddr;
......
......@@ -75,7 +75,7 @@ public:
void HideElement(irr::gui::IGUIElement* element, bool set_action = false);
void PopupElement(irr::gui::IGUIElement* element, int hideframe = 0);
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 LoadConfig();
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)
e2:SetValue(tp)
e2:SetReset(RESET_EVENT+0x1fc0000)
e2:SetCondition(c31829185.con)
tc:RegisterEffect(e2)
tc:RegisterEffect(e2,true)
end
end
function c31829185.con(e)
local c=e:GetOwner()
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
......@@ -22,6 +22,7 @@ function c3900605.operation(e,tp,eg,ep,ev,re,r,rp)
local dg=Duel.GetOperatedGroup()
local ct1=dg:FilterCount(Card.IsControler,nil,tp)
local ct2=dg:GetCount()-ct1
Duel.BreakEffect()
if ct1~=0 then Duel.Draw(tp,ct1,REASON_EFFECT) end
if ct2~=0 then Duel.Draw(1-tp,ct2,REASON_EFFECT) end
--cannot set
......
......@@ -3,7 +3,7 @@ function c41639001.initial_effect(c)
--spsummon
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(41639001,0))
e1:SetType(EFFECT_TYPE_QUICK_O)
e1:SetType(EFFECT_TYPE_QUICK_F)
e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
e1:SetCode(EVENT_BECOME_TARGET)
e1:SetRange(LOCATION_MZONE)
......
......@@ -71,14 +71,14 @@ function c45247637.operation(e,tp,eg,ep,ev,re,r,rp)
e2:SetValue(tp)
e2:SetReset(RESET_EVENT+0x1fc0000)
e2:SetCondition(c45247637.con)
tc:RegisterEffect(e2)
tc:RegisterEffect(e2,true)
e:SetLabelObject(e2)
end
end
function c45247637.con(e)
local c=e:GetOwner()
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
function c45247637.ccon(e,tp,eg,ep,ev,re,r,rp)
return tp==Duel.GetTurnPlayer()
......
......@@ -56,13 +56,13 @@ function c45986603.operation(e,tp,eg,ep,ev,re,r,rp)
e2:SetValue(tp)
e2:SetReset(RESET_EVENT+0x1fc0000)
e2:SetCondition(c45986603.con)
tc:RegisterEffect(e2)
tc:RegisterEffect(e2,true)
end
end
function c45986603.con(e)
local c=e:GetOwner()
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
function c45986603.reccon(e,tp,eg,ep,ev,re,r,rp)
return tp~=Duel.GetTurnPlayer()
......
......@@ -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)
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)
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)
if re:GetHandler():IsRelateToEffect(re) then
Duel.Destroy(eg,REASON_EFFECT)
......
......@@ -37,14 +37,19 @@ function c48582558.activate(e,tp,eg,ep,ev,re,r,rp)
e3:SetType(EFFECT_TYPE_FIELD)
e3:SetProperty(EFFECT_FLAG_SET_AVAILABLE)
e3:SetCode(EFFECT_CANNOT_BE_BATTLE_TARGET)
e3:SetRange(LOCATION_MZONE)
e3:SetTargetRange(LOCATION_MZONE,0)
e3:SetCondition(c48582558.atkcon)
e3:SetTarget(c48582558.atktg)
e3:SetValue(1)
e3:SetReset(RESET_EVENT+0x1fe0000+RESET_PHASE+PHASE_END)
tc:RegisterEffect(e3)
e3:SetReset(RESET_PHASE+PHASE_END)
e3:SetLabelObject(tc)
e3:SetLabel(tc:GetRealFieldID())
Duel.RegisterEffect(e3,tp)
end
end
function c48582558.atkcon(e)
return e:GetLabelObject():GetRealFieldID()==e:GetLabel()
end
function c48582558.atktg(e,c)
return c~=e:GetHandler()
return c:GetRealFieldID()~=e:GetLabel()
end
......@@ -47,6 +47,7 @@ function c48868994.opa(e,tp,eg,ep,ev,re,r,rp)
end
function c48868994.cond(e,tp,eg,ep,ev,re,r,rp)
return not e:GetHandler():IsDisabled() and e:GetHandler():IsDefence()
and not e:GetHandler():IsHasEffect(48868994)
end
function c48868994.filter(c)
return c:IsFaceup() and c:IsAttack() and c:IsAbleToChangeControler()
......@@ -77,6 +78,11 @@ function c48868994.opd(e,tp,eg,ep,ev,re,r,rp)
e1:SetReset(RESET_EVENT+0x1fe0000)
e1:SetValue(c48868994.eqlimit)
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
end
end
......@@ -20,7 +20,7 @@ function c51549976.cost(e,tp,eg,ep,ev,re,r,rp,chk)
Duel.SendtoGrave(g,REASON_COST)
end
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)
Duel.SetOperationInfo(0,CATEGORY_DESTROY,g,g:GetCount(),0,0)
end
......
......@@ -15,11 +15,14 @@ end
function c52497105.condition(e,tp,eg,ep,ev,re,r,rp)
return Duel.GetCurrentPhase()~=PHASE_DAMAGE or not Duel.IsDamageCalculated()
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)
if chkc then return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(tp) and chkc:IsFaceup() end
if chk==0 then return Duel.IsExistingTarget(Card.IsFaceup,tp,LOCATION_MZONE,0,1,nil) 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(c52497105.filter,tp,LOCATION_MZONE,0,1,nil) end
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
function c52497105.activate(e,tp,eg,ep,ev,re,r,rp)
local tc=Duel.GetFirstTarget()
......
......@@ -35,10 +35,10 @@ function c53610653.initial_effect(c)
c:RegisterEffect(e4)
end
function c53610653.eqlimit(e,c)
return c:IsRace(RACE_SPELLCASTER)
return c:IsRace(RACE_SPELLCASTER) and not c:IsType(TYPE_XYZ)
end
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
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
......
......@@ -31,7 +31,7 @@ function c66066482.initial_effect(c)
e3:SetDescription(aux.Stringid(66066482,1))
e3:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O)
e3:SetCode(EVENT_EQUIP)
e3:SetProperty(EFFECT_FLAG_DELAY)
e3:SetProperty(EFFECT_FLAG_DELAY+EFFECT_FLAG_DAMAGE_STEP)
e3:SetRange(LOCATION_MZONE)
e3:SetCondition(c66066482.cfcon)
e3:SetTarget(c66066482.cftg)
......
......@@ -18,23 +18,31 @@ function c85709845.activate(e,tp,eg,ep,ev,re,r,rp)
local tc=Duel.GetFirstTarget()
if tc:IsRelateToEffect(e) and tc:IsDefence() then
Duel.ChangePosition(tc,POS_FACEUP_ATTACK)
local a=Duel.GetAttacker()
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:SetCondition(c85709845.damcon)
e1:SetTarget(c85709845.damtg)
e1:SetOperation(c85709845.damop)
e1:SetLabel(1-tp)
e1:SetReset(RESET_EVENT+0x17a0000+RESET_PHASE+PHASE_DAMAGE)
a:RegisterEffect(e1)
e1:SetReset(RESET_PHASE+PHASE_DAMAGE)
Duel.RegisterEffect(e1,tp)
end
end
function c85709845.damop(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
local atk=c:GetAttack()
function c85709845.damcon(e,tp,eg,ep,ev,re,r,rp)
local tc=eg:GetFirst()
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
Duel.Hint(HINT_CARD,tp,99004752)
Duel.Hint(HINT_CARD,1-tp,99004752)
Duel.Damage(e:GetLabel(),atk,REASON_EFFECT)
end
Duel.SetTargetPlayer(1-tp)
Duel.SetTargetParam(atk)
Duel.SetOperationInfo(0,CATEGORY_DAMAGE,nil,0,1-tp,atk)
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
--逆ギレパンダ
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)
e1:SetReset(RESET_EVENT+0x1fe0000+RESET_PHASE+PHASE_END)
tc:RegisterEffect(e1)
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:SetCondition(c99004752.damcon)
e2:SetTarget(c99004752.damtg)
e2:SetOperation(c99004752.damop)
e2:SetReset(RESET_EVENT+0x17a0000+RESET_PHASE+PHASE_END)
tc:RegisterEffect(e2)
e2:SetReset(RESET_PHASE+PHASE_END)
e2:SetLabelObject(tc)
Duel.RegisterEffect(e2,tp)
tc:RegisterFlagEffect(99004752,RESET_EVENT+0x17a0000+RESET_PHASE+PHASE_END,0,1)
end
end
function c99004752.damcon(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
return c:GetPreviousControler()==c:GetControler()
local tc=eg:GetFirst()
return tc==e:GetLabelObject() and tc:GetFlagEffect(99004752)~=0
end
function c99004752.damop(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
local atk=c:GetAttack()
function c99004752.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
Duel.Hint(HINT_CARD,tp,99004752)
Duel.Hint(HINT_CARD,1-tp,99004752)
Duel.Damage(tp,atk,REASON_EFFECT)
end
Duel.SetTargetPlayer(1-tp)
Duel.SetTargetParam(atk)
Duel.SetOperationInfo(0,CATEGORY_DAMAGE,nil,0,1-tp,atk)
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
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