私設SoS2オーナー応援BBS

新規発言一覧最新記事過去一覧検索ダウンロードページHOME

スレッド

└◇1021:
Re:アイテムの破壊判定 [moon] 05/01 16:49

 └◇1022:Re[2]:アイテムの破壊判定 [まいる] 05/01 18:07
  └◇1023:Re[3]:アイテムの破壊判定 [moon] 05/01 18:55
   └◇1024:Re[4]:アイテムの破壊判定 [まいる] 05/01 20:26
    └◇1025:Re[5]:アイテムの破壊判定 [moon] 05/01 21:34
     └◇1026:Re[6]:アイテムの破壊判定 [まいる] 05/01 23:10<-last


1021● Re:アイテムの破壊判定[ moon ] 2004 05/01 16:49
> またお邪魔致します
>
> 新装備品を追加してその破壊判定を追加したのですが、どうも上手く機能していないようなのです
>
> if ($result == 1 && $sts =~ /Qw/ && $sts !~ /Ie/) { $breakitem = 1 }
> elsif ($result == 1 && $sts =~ /Qt/ && $sts !~ /Ie/) { $breakitem = 1 }
> elsif ($result == 1 && $sts =~ /Qi/ && $sts !~ /Ie/) { $breakitem = 1 }
> if ($result == -1 && $sts =~ /Qs/ && $sts !~ /Qw/ && $sts !~ /Ie/)
>                                                              { $breakitem = 1 }
> elsif ($result == -1 && $sts =~ /Qa/ && $sts !~ /Ie/) { $breakitem = 1 }
> elsif ($result == -1 && $sts =~ /Qu/ && $sts !~ /Ie/) { $breakitem = 1 }
>
> 単純にelsif ($result == ○ && $sts =~ /○/ && $sts !~ /Ie/) { $breakitem = 1 }を追加するだけだと思うのですが、どこか間違っていますでしょうか?

まず、基本的なことから確認してみましょうか。
その新しい装備品を装備したときにアイテムステータスにQiまたはQuがちゃんと追加されていますか?
このif文の前後に対して間違った変更をしていませんか?(オリジナルVer.1.10のスクリプトだと誤解しやすいような書き方がされているので・・・。)
スレッド一覧


1022● Re[2]:アイテムの破壊判定[ まいる ] 2004 05/01 18:07
> まず、基本的なことから確認してみましょうか。
> その新しい装備品を装備したときにアイテムステータスにQiまたはQuがちゃんと追加されていますか?


全てのQ[swat]の部分をQ[swatui]に置き換えしたのと、use afterに
elsif ($sts =~ /(Eg|Eh|Yi)/)               { &arm($1,'Qu') }
elsif ($sts =~ /(Ek|Yu)/)      { &arm($1,'Qi') }
を追加してありますので、装備そのものについては問題無いと思います

機能していないという表現がまずかったかもしれません
全く機能していないわけではなく、壊れる順番がおかしかったので書き方に問題があるのかと思いました

> if ($result == 1 && $sts =~ /Qw/ && $sts !~ /Ie/) { $breakitem = 1 }
> elsif ($result == 1 && $sts =~ /Qt/ && $sts !~ /Ie/) { $breakitem = 1 }
> elsif ($result == 1 && $sts =~ /Qi/ && $sts !~ /Ie/) { $breakitem = 1 }

例えばこの部分、勝利時に最初にQwを装備しているか調べて、装備してなければQtを装備しているか調べる
Qwを装備していればQtは壊れることは無い と理解していたのですが、何故か先にQtが壊れたり敗北時に壊れるはずのQuが壊れたりと・・・


> このif文の前後に対して間違った変更をしていませんか?(オリジナルVer.1.10のスクリプトだと誤解しやすいような書き方がされているので・・・。)

戦闘後のアイテム破壊部分については、これを追加した以外には特にいじった記憶はありませんが、一応こんな感じです

    &splititem('i');
    if (!$Bidice) {
        foreach (0 .. $#items) {
            ($item,$sts,$price) = split(/△/,$items[$_]);
            if ($sts =~ /Li/ && $Bldice) { next }
            if ($result == 1 && $sts =~ /Qw/ && $sts !~ /Ie/) { $breakitem = 1 }
            elsif ($result == 1 && $sts =~ /Qt/ && $sts !~ /Ie/) { $breakitem = 1 }
            elsif ($result == 1 && $sts =~ /Qi/ && $sts !~ /Ie/) { $breakitem = 1 }
            if ($result == -1 && $sts =~ /Qs/ && $sts !~ /Qw/ && $sts !~ /Ie/)
                                                             { $breakitem = 1 }
         elsif ($result == -1 && $sts =~ /Qa/ && $sts !~ /Ie/) { $breakitem = 1 }
            elsif ($result == -1 && $sts =~ /Qu/ && $sts !~ /Ie/) { $breakitem = 1 }
            if ($result == 0 && $sts =~ /Qz/ && $sts !~ /Ie/) { $breakitem = 1 }
            if ($breakitem) {
                $ab -= substr($sts,4,2); $db -= substr($sts,6,2);
                splice(@items,$_,1); &joinitem('i');
                $sp =~ s/Qb//g if $sts =~ /Bw/;
                $sp =~ s/Qk//g if $sts =~ /Kt/;
                $sp =~ s/Qx//g if $sts =~ /Ax/;
                $sp =~ s/Qm//g if $sts =~ /Sw/;
                push (@msg,"装備が壊れました"); last;
            }
        }
    }


push (@msg,"$itemが壊れました")をpush (@msg,"装備が壊れました")に変更したくらいです
引き分け部分については先に書いた記事では割愛しました
elsifを使ってませんので特に関係無いと思いましたが、実際はQ[swatuiz]でuse afterにも修正を加えてあります
スレッド一覧


1023● Re[3]:アイテムの破壊判定[ moon ] 2004 05/01 18:55
> 機能していないという表現がまずかったかもしれません
> 全く機能していないわけではなく、壊れる順番がおかしかったので書き方に問題があるのかと思いました
〜 省略 〜
> 例えばこの部分、勝利時に最初にQwを装備しているか調べて、装備してなければQtを装備しているか調べる
> Qwを装備していればQtは壊れることは無い と理解していたのですが、何故か先にQtが壊れたり敗北時に壊れるはずのQuが壊れたりと・・・

これは違います。
レアやIe付きを除く装備品は実際はアイテムの上のほうにある物から壊れますので、おそらくは正常な動作だと思います。
ただ、
> 敗北時に壊れるはずのQuが壊れたり
こちらはスクリプトには問題無さそうなので、本当にそういう動作が起こるのかをもう一度確認してください。
スレッド一覧


1024● Re[4]:アイテムの破壊判定[ まいる ] 2004 05/01 20:26
> これは違います。
> レアやIe付きを除く装備品は実際はアイテムの上のほうにある物から壊れますので、おそらくは正常な動作だと思います。

なるほど、そういうことでしたか
では、次のように変更すれば必ずこの順番通りに壊れるようになるのでしょうか?

if ($result == 1 && $sts =~ /Qw/ && $sts !~ /Qt/ && $sts !~ /Qi/ && $sts !~ /Ie/) { $breakitem = 1 }
elsif ($result == 1 && $sts =~ /Qt/ && $sts !~ /Qi/ && $sts !~ /Ie/) { $breakitem = 1 }
elsif ($result == 1 && $sts =~ /Qi/ && $sts !~ /Ie/) { $breakitem = 1 }


> ただ、
> > 敗北時に壊れるはずのQuが壊れたり
> こちらはスクリプトには問題無さそうなので、本当にそういう動作が起こるのかをもう一度確認してください。

こちらについてはプレイヤーの1人からしか報告を受けておらず、ローカルテストでは確認出来ませんでした

後、直接関係ありませんが
if ($result == -1 && $sts =~ /Qs/ && $sts !~ /Qw/ && $sts !~ /Ie/)
この&& $sts !~ /Qw/の部分はデフォルトからありますが、意味があるのでしょうか?
デフォルトでは盾を装備していれば鎧は壊れないとなっていますのでQwではなくQaの間違いなのかなと思いましたが
スレッド一覧


1025● Re[5]:アイテムの破壊判定[ moon ] 2004 05/01 21:34
> では、次のように変更すれば必ずこの順番通りに壊れるようになるのでしょうか?
>
> if ($result == 1 && $sts =~ /Qw/ && $sts !~ /Qt/ && $sts !~ /Qi/ && $sts !~ /Ie/) { $breakitem = 1 }
> elsif ($result == 1 && $sts =~ /Qt/ && $sts !~ /Qi/ && $sts !~ /Ie/) { $breakitem = 1 }
> elsif ($result == 1 && $sts =~ /Qi/ && $sts !~ /Ie/) { $breakitem = 1 }

いえ、これでもアイテムを先頭からループさせて最初に条件に合ったものを破壊の対象にしていることには変わりが無いので順番通りには壊れません。
もし、どうしても順番通りに壊れるようにしたいのであればループを増やしての再判定が必要となります。

> > ただ、
> > > 敗北時に壊れるはずのQuが壊れたり
> > こちらはスクリプトには問題無さそうなので、本当にそういう動作が起こるのかをもう一度確認してください。
>
> こちらについてはプレイヤーの1人からしか報告を受けておらず、ローカルテストでは確認出来ませんでした

そういうことでしたら、勘違いとも考えられるので再報告があるまではそのままにしておいても良いのではないでしょうか。(もちろんプレイヤーの方にそういうことがあるかを聞いてからですが。)

> 後、直接関係ありませんが
> if ($result == -1 && $sts =~ /Qs/ && $sts !~ /Qw/ && $sts !~ /Ie/)
> この&& $sts !~ /Qw/の部分はデフォルトからありますが、意味があるのでしょうか?

両手持ち用武器だとQwQsが付きます。
なので、Qsだけで判定すると盾が壊れて欲しいのに武器が壊れてしまうことがあることになります。

> デフォルトでは盾を装備していれば鎧は壊れないとなっていますのでQwではなくQaの間違いなのかなと思いましたが

これはマニュアル(およびオーナーマニュアル)の間違いで実際はやはり上にある物から壊れます。
スレッド一覧


1026● Re[6]:アイテムの破壊判定[ まいる ] 2004 05/01 23:10
わかりやすい説明有難うございました
プレイヤーの皆さんにはその旨の説明をして理解して頂こうと思います
個人的には順番が決まっているよりも何が壊れるかわからないほうが、適度に需要が出来て販売職が活躍出来ると思っていますので

度々ご迷惑おかけしますが、今後も宜しくお願い致します
スレッド一覧

CGIROOM