バグ:スキンでアクションカードに使用時イベントを追加した時の不具合

Issue #1056 resolved
どもしペッテ created an issue

使用エンジン:Py5β1、Py5β3

アクションカード「攻撃」「渾身の一撃」「会心の一撃」に、使用時イベントで「敵を対象にして効果を与える効果コンテント」を追加したものを含むスキンを適用し、Py5βで戦闘時に上記のカードを使用した時エラーとなってしまいました。

Version : 5.0 Beta 3 (64-bit) / 2021-09-04 22:41:21
DateTime: 2021-09-15 10:22:51
Traceback (most recent call last):
File ".\cw\thread.py", line 981, in run
File ".\cw\thread.py", line 1034, in _run
File ".\cw\thread.py", line 1050, in main_loop
File ".\cw\eventhandler.py", line 114, in run
File ".\cw\eventhandler.py", line 399, in lclick_event
File ".\cw\sprite\statusbar.py", line 1272, in lclick_event
File ".\cw\battle.py", line 103, in start
File ".\cw\battle.py", line 175, in run
File ".\cw\character.py", line 1163, in action
File ".\cw\character.py", line 1078, in use_card
File ".\cw\event.py", line 1465, in start
File ".\cw\event.py", line 892, in start
File ".\cw\event.py", line 952, in run
File ".\cw\event.py", line 1163, in action
File ".\cw\content.py", line 2776, in action
AssertionError

Py4.3で同じ効果のカードを含むスキンを作って、同じように戦闘で使用した時にはエラーは発生しませんでした。

また同じスキンで、アクションカード「手札交換」に使用時イベントで「使用者を対象に技能カードを1枚配布する効果コンテント」を追加した物は、Py5βエンジンでも問題無く動作しました。

Comments (8)

  1. k4nagatsuki repo owner

    ご報告ありがとうございます。

    手もとでスキンを改造して確認してみたところ再現できなかったので、何点か確認させてください。

    1. 「敵を対象にして効果を与える」とは具体的にどのようなイベントなのでしょうか?
    2. エラーは常に発生するのでしょうか?

  2. どもしペッテ reporter

    返信ありがとうございます。

    「攻撃」などの元々敵単体を対象とするカードで、使用時イベントで効果コンテントを追加し、その効果の適用範囲を「称号所有者:@効果対象」もしくは「カードの使用対象」に設定して使用した場合、エラーとなりました。

    また、上記の設定をしたカードを使用した場合、私の環境では必ずエラーが発生しました。

  3. k4nagatsuki repo owner

    ありがとうございます。

    以下のような攻撃カードで試してみましたが再現できません(@効果対象を使用するようにしたり、効果属性を変えても同様)。

    そちらの環境ではこのカードで問題が再現できるでしょうか? もし再現できない場合、どの部分が違うかわかるでしょうか?

    <?xml version="1.0" encoding="utf-8" ?>
    <ActionCard dataVersion="5">
      <Property>
        <Id>1</Id>
      <Name>攻撃</Name>
      <ImagePath>Resource/Image/Card/ACTION1.bmp</ImagePath>
      <Description></Description>
      <Scenario />
      <Author />
      <Level>0</Level>
      <Ability mental="Brave" physical="Str" />
      <Target allrange="False">Enemy</Target>
      <EffectType spell="False">Physic</EffectType>
      <ResistType>Avoid</ResistType>
      <SuccessRate>0</SuccessRate>
      <VisualEffect>Horizontal</VisualEffect>
      <Enhance avoid="0" defense="0" resist="0" />
      <SoundPath>Material/素振り(攻撃).wav</SoundPath>
      <SoundPath2>Material/効果(攻撃).wav</SoundPath2>
      <KeyCodes>攻撃\n一撃\n\n\n</KeyCodes>
      <Premium>Normal</Premium>
      <UseLimit>40</UseLimit>
      <Hold>False</Hold>
      </Property>
     <Motions>
        <Motion damagetype="LevelRatio" element="All" type="Damage" value="2" />
      </Motions>
     <Events>
    <Event>
    <Ignitions>
    <Number>1</Number>
    <KeyCodes/>
    </Ignitions>
    <Contents>
    <ContentsLine>
    <Start name="使用時イベント"/>
    <Effect sound="効果(会心).ogg" volume="100" loopcount="1" mental="Aggressive" physical="Dex" targetm="CardTarget" visual="Horizontal" effecttype="Physic" resisttype="Avoid" level="0" successrate="4" ignite="True" holdingcoupon="@効果対象">
    <Motions>
    <Motion type="Damage" element="All" damagetype="LevelRatio" value="2"/>
    </Motions>
    <KeyCodes>攻撃</KeyCodes>
    </Effect>
    </ContentsLine>
    </Contents>
    </Event>
     </Events>
     </ActionCard>
    

  4. どもしペッテ reporter

    スキンの攻撃のxmlを記述されたものをコピペして上書きしたところ、エラーを吐く無く動作しました。

    多分、所謂おま環のようなものだったと思います。

  5. k4nagatsuki repo owner

    pull request #294

    原因が分かりました。カードのデータバージョンがWsn.1の時に限り発生する状況で、プログラムが正しく動いているかチェックするコードに引っかかってエラーになっていました。

    Wsn.1で称号所有者やカードの使用対象を効果コンテントの対象にとる事はできないので(cwxeditorは警告する)、チェック内容としてはある意味妥当ではありますが、存在しうるデータなのでエラーで落ちるべきではありませんでした。

    アクションカードは現在のところ手動で編集するしかないため、データバージョンとイベント内容の不整合が起きやすくなっており、そのためこの不具合に遭遇したのではないでしょうか。

    おそらく問題のデータは冒頭部分に<ActionCard dataVersion=”1”>というところがあると思います。この"1”がWsn.1を示しています。編集するのであれば、最新の"5”にしてしまった方が安全かもしれません。

  6. どもしペッテ reporter

    カードの該当部分を提示された記述に上書きしてみたところ、問題無く動作するようになりました。

    ありがとうございます。お手間を取らせてしまい申し訳ありませんでした。

  7. BlinkOpera

    @k4nagatsuki
    本件、報告者の動作確認が行われたため、クローズ可能です。

  8. Log in to comment