私設SoS2オーナー応援BBS

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

スレッド

└◇1444:
スキルの発動対象指定について [矢神] 01/12 20:05

 └◇1445:追記 [矢神] 01/12 20:59
  └◇1446:Re:追記 [moon] 01/12 21:18
   └◇1447:ありがとうございました! [矢神] 01/12 22:58<-last


1444● スキルの発動対象指定について[ 矢神 ] 2008 01/12 20:05
すみません、今回少々ややこしいかも知れないんですが、どうにも手に負えなくなってしまったので助言を戴けますでしょうか

SOS2 Wikiに載っていた「戦闘関連強化・特技&魔法」とミッチーの散歩道様のサイトに載っていた「特殊スキルを持つ装備品を作る」を組み合わせて、追加効果を持つ装備品を導入しようとしたのですが
一応動作はしたものの、追加効果(武器に付属したスキル)の対象が、常に勝利者からの発動になってしまいます。
(追加ダメージ効果の装備を持って戦闘に敗北すると、自分に追加ダメージが発生してしまう)
原因が何処にあるのかよく判らないんですが、改造個所を全て貼り付けると長くなってしまうので、とりあえず関係ありそうなところだけを貼ります。
〜〜〜〜〜〜〜〜

># Sub Fight #に追加した記述
&splititem('iI');
foreach $item (@items) {
($item,$sts,$price) = split(/△/,$item);
if ($sts =~ /Q[swat]/) { $sp2 .= "$sts"; }
}
foreach $item (@pitems) {
($item,$sts,$price) = split(/△/,$item);
if ($sts =~ /Q[swat]/) { $psp2 .= "$sts"; }
}

〜〜〜〜〜〜〜〜
># Sub Fight #に追加した記述2

        if ($rw >= $def_rp && $psp2 =~ /X$_/) { $patk += $bcount }
        if ($prw >= $def_rp && $sp2 =~ /X$_/) { $uatk += $bcount }
    }

〜〜〜〜〜〜〜〜
># Sub Fight #に追加(変更)した記述3

    $result = $udice <=> $pdice;
    if ($result == 1) {
        $dmg = (1,1,$uddice - $pdfd) [($uddice <=> $pdfd) + 1];
        ($php,$pav,$pdt,$prw,$hp,$av,$dt)
            = &fight_sub($nm,$hp,$sp,$sp2,$ab,$bp,$ak,$av,$dt,$bn,$pnm,$php,$psp,$psp2,$pbp,$pav,$pdt,$prw,$pbn);
            require './sp_atk.pl';
($php,$pav,$hp,$dt) = &sp_atk($nm,$hp,$sp,$sp2,$av,$pnm,$php,$pav,$pdt,$dmg,$udice);

        $mn += $Wm; $plz++; $wn++; $itemchance = 1; $hp = $xp if $hp > $xp;
        if ($def_ar) { $rw += $def_ar };
    }
    if ($result == -1) {
        $dmg = (1,1,$pdice - $udfd) [($pdice <=> $udfd) + 1];
        ($hp,$av,$dt,$rw,$php,$pav,$pdt)
            = &fight_sub($pnm,$php,$psp,$psp2,$pab,$pbp,$pak,$pav,$pdt,$pbn,$nm,$hp,$sp,$sp2,$bp,$av,$dt,$rw,$bn);
            require './sp_atk.pl';
($hp,$av,$php,$pdt) = &sp_atk($pnm,$php,$psp,$psp2,$pav,$nm,$hp,$av,$dt,$dmg,$pdice);

〜〜〜〜〜〜〜〜
>sp_atk.plの設定部分($Ws2を追加、# 特技選定の$spを$sp2に変更)

sub sp_atk {
    ($Wn,$Wh,$Ws,$Ws2,$Wv,$Ln,$Lh,$Lv,$Lt,$Dg,$Dd) = @_;
    if ($Lv =~ /dead/) { return($Lh,$Lv,$Wh,$Wt) }

    undef @castlines;
    @splines = &opendat('special.cgi');
    foreach (0 .. $#splines) {
        ($sp_no,$sp_tp,$sp_rt,$sp_dg,$sp_ef,$sp_sp,$sp_nm,$sp_mg) = split(/<>/,$splines[$_]);

        push (@castlines,$splines[$_]) if $sp2 =~ /$sp_sp/; # 特技選定
    }
    if (!@castlines) { return($Lh,$Lv,$Wh,$Wt) }

    $cast_rnd = int(rand($#castlines)); # 特技確定
    ($sp_no,$sp_tp,$sp_rt,$sp_dg,$sp_ef,$sp_sp,$sp_nm,$sp_mg) = split(/<>/,$castlines[$cast_rnd]);

〜〜〜〜〜〜〜〜

かなりわかりにくいと思いますが(申し訳ありません…)
ぱっと見でおかしい個所などはありますでしょうか?
スレッド一覧


1445● 追記[ 矢神 ] 2008 01/12 20:59
今、sp_atk.plの

sub sp_atk {
    ($Wn,$Wh,$Ws,$Ws2,$Wv,$Ln,$Lh,$Lv,$Lt,$Dg,$Dd) = @_;
    if ($Lv =~ /dead/) { return($Lh,$Lv,$Wh,$Wt) }

    undef @castlines;
    @splines = &opendat('special.cgi');
    foreach (0 .. $#splines) {
        ($sp_no,$sp_tp,$sp_rt,$sp_dg,$sp_ef,$sp_sp,$sp_nm,$sp_mg) = split(/<>/,$splines[$_]);

        push (@castlines,$splines[$_]) if $sp2 =~ /$sp_sp/; # 特技選定

この一番下の$sp2 =~を$Ws2 =~にしてみたらなんとなく正しく動いてるようなんですが…。
これで問題ありませんでしょうか?

一度一番上の$Ws,$Ws2を$sp,$sp2にしても動いたんですが、対戦プレイヤー同士のスキルがごちゃごちゃになってしまい、大変な事になってしまいました。
スレッド一覧


1446● Re:追記[ moon ] 2008 01/12 21:18
> 今、sp_atk.plの
>
> sub sp_atk {
>     ($Wn,$Wh,$Ws,$Ws2,$Wv,$Ln,$Lh,$Lv,$Lt,$Dg,$Dd) = @_;
>     if ($Lv =~ /dead/) { return($Lh,$Lv,$Wh,$Wt) }
>
>     undef @castlines;
>     @splines = &opendat('special.cgi');
>     foreach (0 .. $#splines) {
>         ($sp_no,$sp_tp,$sp_rt,$sp_dg,$sp_ef,$sp_sp,$sp_nm,$sp_mg) = split(/<>/,$splines[$_]);
>
>         push (@castlines,$splines[$_]) if $sp2 =~ /$sp_sp/; # 特技選定
>
> この一番下の$sp2 =~を$Ws2 =~にしてみたらなんとなく正しく動いてるようなんですが…。
> これで問題ありませんでしょうか?

アイテムだけではなくスキルにも特技&魔法が付加されていることがある場合ですと、修正がこれだけだとスキルに付加されたものが発動しないと考えられます。

以下のように修正すれば上記の対策になると思います。
> ($php,$pav,$hp,$dt) = &sp_atk($nm,$hp,$sp,$sp2,$av,$pnm,$php,$pav,$pdt,$dmg,$udice);
($php,$pav,$hp,$dt) = &sp_atk($nm,$hp,$sp . $sp2,$av,$pnm,$php,$pav,$pdt,$dmg,$udice);

> ($hp,$av,$php,$pdt) = &sp_atk($pnm,$php,$psp,$psp2,$pav,$nm,$hp,$av,$dt,$dmg,$pdice);
($hp,$av,$php,$pdt) = &sp_atk($pnm,$php,$psp . $psp2,$pav,$nm,$hp,$av,$dt,$dmg,$pdice);

> ($Wn,$Wh,$Ws,$Ws2,$Wv,$Ln,$Lh,$Lv,$Lt,$Dg,$Dd) = @_;
($Wn,$Wh,$Ws,$Wv,$Ln,$Lh,$Lv,$Lt,$Dg,$Dd) = @_;

> push (@castlines,$splines[$_]) if $sp2 =~ /$sp_sp/; # 特技選定
push (@castlines,$splines[$_]) if $Ws =~ /$sp_sp/; # 特技選定
スレッド一覧


1447● ありがとうございました![ 矢神 ] 2008 01/12 22:58
スキルの方は最初から諦めようと思っていたのですが、そっちまで可能にして戴けるとは思いませんでした。
本当に助かりました。ありがとうございました。
スレッド一覧

CGIROOM