Fluorohydride / ygopro-scripts

scripts of official cards for ygopro.
GNU General Public License v2.0
142 stars 132 forks source link

fix アルカナコール #2755

Open salix5 opened 2 days ago

salix5 commented 2 days ago

https://www.db.yugioh-card.com/yugiohdb/faq_search.action?ope=4&cid=7642&request_locale=ja アルカナコール Arcana Call 自分フィールド上に表側表示で存在する「アルカナフォース」と名のついたモンスター1体を選択して発動する。墓地に存在する「アルカナフォース」と名のついたモンスター1体をゲームから除外する。エンドフェイズ時まで、選択したモンスターがコイントスによって得た効果は、ゲームから除外したモンスターがコイントスによって得る効果と同じ効果になる。

Old version Arcana Force monster get their effect from s.arcanareg The reset condition includes RESET_DISABLE, so they can be reset by Card.ResetEffect.

Arcana Call will change effects by:

local val=tc:GetFlagEffectLabel(FLAG_ID_ARCANA_COIN)
tc:ResetEffect(RESET_DISABLE,RESET_EVENT)
tc.arcanareg(tc,val)

Problem The granted effect will be reset when the card is negated by other effects. This is fixed in #605 But it also breaks the effect of Arcana Call.

New version

local cid=tc:ReplaceEffect(regc:GetOriginalCode(),RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END)

The coin effects of Arcana Force monsters must be put in initial_effect. s.arcanareg is removed.


舊版 秘儀之力怪獸的擲硬幣得到的效果 在s.arcanareg裡面註冊 這些效果包含RESET_DISABLE因此可被Card.ResetEffect重置 秘儀呼喚可以通過Card.ResetEffect消除舊的效果再註冊新的效果

local val=tc:GetFlagEffectLabel(FLAG_ID_ARCANA_COIN)
tc:ResetEffect(RESET_DISABLE,RESET_EVENT)
tc.arcanareg(tc,val)

已知問題 這會讓怪獸被無效時失去擲硬幣得到的效果 這個問題已在 #605修復 但是也讓秘儀呼喚從此不能正常使用

新版

local cid=tc:ReplaceEffect(regc:GetOriginalCode(),RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END)

現在秘儀呼喚使用ReplaceEffect 因此擲硬幣得到的效果必須放在initial_effect 移除s.arcanareg

Test

--[[message arcana]]
Debug.SetAIName("Bug")
Debug.ReloadFieldBegin(DUEL_ATTACK_FIRST_TURN+DUEL_SIMPLE_AI)
Debug.SetPlayerInfo(0,8000,0,0)
Debug.SetPlayerInfo(1,8000,0,0)

Debug.AddCard(61175706,0,0,LOCATION_HAND,0,POS_FACEDOWN_DEFENSE)
Debug.AddCard(73206827,0,0,LOCATION_HAND,1,POS_FACEDOWN_DEFENSE)
Debug.AddCard(69831560,0,0,LOCATION_HAND,2,POS_FACEDOWN_DEFENSE)
Debug.AddCard(19230407,0,0,LOCATION_HAND,3,POS_FACEDOWN_DEFENSE)

Debug.AddCard(89631139,0,0,LOCATION_MZONE,0,POS_FACEUP_ATTACK)
Debug.AddCard(89631139,0,0,LOCATION_MZONE,1,POS_FACEUP_ATTACK)
Debug.AddCard(89631139,0,0,LOCATION_MZONE,2,POS_FACEUP_ATTACK)
Debug.AddCard(99189322,0,0,LOCATION_SZONE,0,POS_FACEDOWN_DEFENSE)
Debug.AddCard(23846921,0,0,LOCATION_GRAVE,0,POS_FACEUP_ATTACK)

Debug.AddCard(89631139,0,0,LOCATION_DECK,0,POS_FACEDOWN_DEFENSE)
Debug.AddCard(89631139,0,0,LOCATION_DECK,1,POS_FACEDOWN_DEFENSE)

Debug.AddCard(89631139,1,1,LOCATION_MZONE,2,POS_FACEUP_ATTACK)
Debug.AddCard(89631139,1,1,LOCATION_MZONE,3,POS_FACEUP_ATTACK)
Debug.AddCard(89631139,1,1,LOCATION_MZONE,4,POS_FACEUP_ATTACK)
Debug.AddCard(89631139,1,1,LOCATION_GRAVE,0,POS_FACEUP_ATTACK)

Debug.ReloadFieldEnd()

@mercury233 @purerosefallen @Wind2009-Louse @fallenstardust