私設SoS2オーナー応援BBS

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

スレッド

└◇966:
Re:置換 [ミル] 02/29 05:35

 └◇967:Re[2]:置換 [moon] 02/29 13:04
  └◇968:Re[3]:置換 [ミル] 02/29 21:56
   └◇969:Re[4]:置換 [ミル] 02/29 22:07
    └◇970:Re[5]:置換 [moon] 02/29 23:29
     └◇971:Re[6]:置換 [ミル] 03/01 13:21
      └◇972:Re[7]:置換 [ミル] 03/01 15:28
       └◇973:Re[8]:置換 [ミル] 03/01 15:33
        └◇974:Re[9]:置換 [moon] 03/01 19:14
         └◇975:Re[10]:置換 [moon] 03/01 22:25
          └◇976:Re[11]:置換 [ミル] 03/06 19:30
           └◇977:Re[12]:置換 [ミル] 03/06 19:39
            └◇978:Re[13]:置換 [moon] 03/06 20:26
             └◇993:うおおう [ミル] 03/20 20:29<-last


966● Re:置換[ ミル ] 2004 02/29 05:35
substr($sts,0,4);のように、ステータスのみを指定するのは分かったのですが、やはり『アイテムの指定』と『どうやってそのステータスに代入すればよいのか』が全く分かりません。
乱文で分かりづらいかもしれませんが、よければ教えて下さい。
スレッド一覧


967● Re[2]:置換[ moon ] 2004 02/29 13:04
> substr($sts,0,4);のように、ステータスのみを指定するのは分かったのですが、やはり『アイテムの指定』と『どうやってそのステータスに代入すればよいのか』が全く分かりません。
> 乱文で分かりづらいかもしれませんが、よければ教えて下さい。

アイテムを特定する処理は、
  &splititem('i');
  foreach(@items){
    ($item, $sts, $price) = split(/△/, $_);
    if(index($sts, 'Sw') != -1){ # 剣(Sw)の場合
      # ここに特定アイテムの処理(*)
    }
  }
  &joinitem('i');
で、$stsの構造は、
  00000000XxYyZz
    1桁から4桁:下取り価格
    5桁から6桁:攻撃力値
    7桁から8桁:防御力値
    9桁目以降:アイテム属性
です。

ステータスに代入するのは(*)の部分で、
  $pc = substr($sts, 0, 4); # 下取り価格の取得
  $atk = substr($sts, 4, 2); # 攻撃力値の取得
  $dfd = substr($sts, 6, 2); # 防御力値の取得
  $other = substr($sts, 8); # アイテム属性の取得
  # ここに$pc、$atk、$dfdの変更処理
  if($pc < -999){$pc = -999;}elsif($pc > 9999){$pc = 9999;} # 値の制限
  if($atk < -9){$atk = -9;}elsif($atk > 99){$atk = 99;} # 値の制限
  if($dfd < -9){$dfd = -9;}elsif($dfd > 99){$dfd = 99;} # 値の制限
  $sts = sprintf("%04d%02d%02d%s", $pc, $atk, $dfd, $other); # $stsの再構築
  $_ = "$item△$sts"; # アイテムデータの反映
  $_ .= "△$price" if($price > 0); # 価格の追加
とすれば良いと思います。
スレッド一覧


968● Re[3]:置換[ ミル ] 2004 02/29 21:56
なるほど……。と、もう一つ聞きたいのですが。
今の処理は、『特定の武具を装備している場合、あるアイテムを使うとその武具能力をあげることができる』というものなんです。

ですが、あるアイテムを消す処理が分かりません。二度アイテムを読み込ませたり、意味不明になってしまいました。


if ($sts =~ /CbNsPeQp/) {
    &splititem('i');
        foreach(@items){
        ($item, $sts, $price) = split(/△/, $_);
        if(index($sts, 'CbNsPeQp') != -1){ # 剣(Sw)の場合
#特定アイテムの処理(*)
$pc = substr($sts, 0, 4); # 下取り価格の取得
$atk = substr($sts, 4, 2); # 攻撃力値の取得
$dfd = substr($sts, 6, 2); # 防御力値の取得
$other = substr($sts, 8); # アイテム属性の取得
$pc += 2;# ここに$pc、$atk、$dfdの変更処理
if($pc < -999){$pc = -999;}elsif($pc > 9999){$pc = 9999;} # 値の制限
if($atk < -9){$atk = -9;}elsif($atk > 99){$atk = 99;} # 値の制限
if($dfd < -9){$dfd = -9;}elsif($dfd > 99){$dfd = 99;} # 値の制限
$sts = sprintf("%04d%02d%02d%s", $pc, $atk, $dfd, $other); # $stsの再構築
$_ = "$item△$sts"; # アイテムデータの反映
$_ .= "△$price" if($price > 0); # 価格の追加
#特定アイテムの処理
    }
    }
  &joinitem('i');
    &splititem('i');
        if($sts, 'ApCb'){ # 強化アイテムの指定
#恐らくここに消す処理を加える($gn = 1;かな)
    }
    }
  &joinitem('i');
        push (@msg,"武具を強化しました");
} else { push (@msg,"$itemは強化アイテムではありません") ;return}
}

汚い……のは置いといて、どうすれば指定武具ステータスを変更した後にアイテムを消すことができるでしょうか……?
本当に他力本願で申し訳ないのですが……。
スレッド一覧


969● Re[4]:置換[ ミル ] 2004 02/29 22:07
}
}
  &joinitem('i');
    &splititem('i');
        if($sts, 'ApCb'){ # 強化アイテムの指定
#恐らくここに消す処理を加える($gn = 1;かな)
    }
    }
  &joinitem('i');
ここの部分は
}
        if($sts, 'ApCb'){ # 強化アイテムの指定
#恐らくここに消す処理を加える($gn = 1;かな)
    }
    }
  &joinitem('i');

これでいいですね^^;
あぁ、なんだかもうメチャクチャに……
スレッド一覧


970● Re[5]:置換[ moon ] 2004 02/29 23:29
> 今の処理は、『特定の武具を装備している場合、あるアイテムを使うとその武具能力をあげることができる』というものなんです。

能力アップアイテムを一時使用にせず直接使用するようにしようとされているようですが、オリジナル版のようなアイテム使用方法のままでは出来なくは無いですが処理が難しいですよ。
一時使用にしてからsub armで$bpを判定して、能力アップするようにしたほうが良いと思います。
スレッド一覧


971● Re[6]:置換[ ミル ] 2004 03/01 13:21
なるほど……。
分かりました。やってみますね。
スレッド一覧


972● Re[7]:置換[ ミル ] 2004 03/01 15:28
強化アイテムは平常時に使用すると別の効果もあるようにしたので……。
Use Afterで強化アイテムのスキルフラグが付いていたら、優先的に一時使用にするようにして分岐を捻じ曲げ、sub armを通ってアイテムを強化するルーチンを通させました。

1、プレイヤーが強化アイテムを使用(特定のスキルフラグの付いている武具を消費していない場合は別の効果)



2、sub armへ移動。一時使用に入る



3、アイテム強化ルーチンのitm upを通り、特定武具のアイテム修正処理

と行くようにしたのですが……。ローカルで試しても全くアイテムに反映されないのです。
一応、分岐の通し方に問題はないのです。一番最後の『武具を強化しました!』は表示されるので、(アイテムは修正されず)修正処理に問題があると思うのですが。

# Sub Item Up #
sub itm up {
    if ($av eq 'dead') { &umsg('死') }
&splititem('i');
foreach(@items){
($item, $sts, $price) = split(/△/, $_);
if(index($sts, 'CbNsPeQp') != -1){ # 剣(Sw)の場合
$pcc = substr($sts, 0, 4); # 下取り価格の取得
$atkk = substr($sts, 4, 2); # 攻撃力値の取得
$dfdd = substr($sts, 6, 2); # 防御力値の取得
$otherr = substr($sts, 8); # アイテム属性の取得

$atkk += 5;#ここに変更処理

if($pcc < -999){$pcc = -999;}elsif($pcc > 9999){$pcc = 9999;} # 値の制限
if($atkk < -9){$atkk = -9;}elsif($atkk > 99){$atkk = 99;} # 値の制限
if($dfdd < -9){$dfdd = -9;}elsif($dfdd > 99){$dfdd = 99;} # 値の制限
$sts = sprintf("%04d%02d%02d%s", $pcc, $atkk, $dfdd, $otherr); # $stsの再構築
$_ = "$item△$sts"; # アイテムデータの反映
$_ .= "△$price" if($price > 0); # 価格の追加
}
}
&joinitem('i');

        push (@msg,"武具を強化しました!"); $bp = $bn = '';
}
1;


何がいけないのか……。分かりませんか? 見た限りでは全く問題はないと思うのですが。
スレッド一覧


973● Re[8]:置換[ ミル ] 2004 03/01 15:33
sub armでは無いです。
Set Itemでした。申し訳ない。

            elsif ($sts =~ /ApCb|FdCb/ && $sp =~ /Qp/) {
                if ($av eq 'dead') { &umsg('死') }
                else { &set_item; require './pl/itm_up.pl';&itm up; }
            }
Use Afterの設定はこんな感じです。Qpは装備フラグで、特定武具を装備した場合プレイヤースキルに追加されます。外したときは消えます。
FdCb、ApCbは強化アイテムフラグです。
つまり、強化アイテムフラグがあり、特定武具が装備されていた場合はset itemを通りitm upを通って強化されるわけです。
何も装備していない場合は別の処理がされます。
スレッド一覧


974● Re[9]:置換[ moon ] 2004 03/01 19:14
> Use Afterの設定はこんな感じです。Qpは装備フラグで、特定武具を装備した場合プレイヤースキルに追加されます。外したときは消えます。
> FdCb、ApCbは強化アイテムフラグです。
> つまり、強化アイテムフラグがあり、特定武具が装備されていた場合はset itemを通りitm upを通って強化されるわけです。
> 何も装備していない場合は別の処理がされます。

直接使用する場合では少なくともsplititemとjoinitemの処理はあるとまずいです。(No.967のスクリプトはuse_afterで処理するなんて思っていなかったので完全に独立させた場合を書きました。)
また、foreach(@items)の部分も変える必要があります。
スレッド一覧


975● Re[10]:置換[ moon ] 2004 03/01 22:25
> 直接使用する場合では少なくともsplititemとjoinitemの処理はあるとまずいです。(No.967のスクリプトはuse_afterで処理するなんて思っていなかったので完全に独立させた場合を書きました。)
> また、foreach(@items)の部分も変える必要があります。

No.968とNo.969のスクリプトで、
・splititem('i');とjoinitem('i')を削除。
・foreach(@items)をforeach(@bag, @items[$_ + 1 .. $#items])に置換。
・if(index($sts, 'CbNsPeQp') != -1){〜}の{}内の最後に$gn = 1; last;を追加。
スレッド一覧


976● Re[11]:置換[ ミル ] 2004 03/06 19:30
申し訳ありません。ちょっと私情でゴタゴタしてまして……。
すぐやってみますね。
スレッド一覧


977● Re[12]:置換[ ミル ] 2004 03/06 19:39
う〜ん。やっぱりできませんでした。アイテムデータに反映されません。

何がいけないのかさっぱり……。
何がいけないのか分からない以上、お手上げ状態ですよね?
スレッド一覧


978● Re[13]:置換[ moon ] 2004 03/06 20:26
> う〜ん。やっぱりできませんでした。アイテムデータに反映されません。
>
> 何がいけないのかさっぱり……。
> 何がいけないのか分からない以上、お手上げ状態ですよね?

ソースが散乱して分かりにくくなっていると思うので、なんならソースを直に見ても良いですが。
見るとしたらNo.968の、
if ($sts =~ /CbNsPeQp/) {
}
の部分でしょうか。
スレッド一覧


993● うおおう[ ミル ] 2004 03/20 20:29
返信したつもりが、できていませんでした……。
ええと、「last;」の置くべき場所を間違っていました。
修正したら正常に作動されました。長々と付き合って下さってありがとうございました!
スレッド一覧

CGIROOM