私設SoS2オーナー応援BBS

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

スレッド

└◇1361:
Re:下の続きです [moon] 11/21 00:15

 └◇1362:Re[2]:下の続きです [cosmos] 11/21 15:12
  └◇1364:Re[3]:下の続きです [moon] 11/21 20:47
   └◇1365:Re[4]:下の続きです [cosmos] 11/21 21:43
    └◇1366:Re[5]:下の続きです [cosmos] 11/21 21:45
     └◇1367:Re[6]:下の続きです [moon] 11/21 23:20
      └◇1368:Re[7]:下の続きです [cosmos] 11/21 23:38
       └◇1369:Re[8]:下の続きです [moon] 11/22 00:10
        ├◇1370:Re[9]:下の続きです [cosmos] 11/22 00:26
        └◇1371:Re[9]:下の続きです [cosmos] 11/22 14:05
         └◇1372:Re[10]:下の続きです [moon] 11/22 23:23
          └◇1373:Re[11]:下の続きです [cosmos] 11/23 00:12
           └◇1374:Re[12]:下の続きです [moon] 11/23 01:12
            └◇1375:Re[13]:下の続きです [cosmos] 11/23 08:23<-last


1361● Re:下の続きです[ moon ] 2006 11/21 00:15
> についてですが(0,3)というのは武具、銀細工とわかるのですが
> int(rand(2))等の2や1や3というのは装備の数を表しているのでしょうか?物分り悪くてすいません

int(rand(2))の場合は0か1が得られます。
なので、ここでは武器を表す0と盾を表す1を得ようとしているだけです。
$trndに何が代入されるかを考えると、すんなりと理解できるようになるのではないかと思います。

> 兜を装備してみると兜で設定した知力7がabフラグに追加されており、+72(2というのは兜の防御力と武器の攻撃力が足されたもののようです)
> そして賢さが上昇した分を格納する$eitには0のままでした。

「変更」と書いたのが誤解を与えてしまったのかもしれませんが、以下の箇所の「$ab += $iak; $db += $idd;」は必要ありません。
> if ($ch !~ /Q[sw]/) {
>          $ab += $iak; $db += $idd;
> #-------新装備

あと、「$ab += $iak; $db += $idd;」は2箇所ありますので残りのほうも変更が必要です。
スレッド一覧


1362● Re[2]:下の続きです[ cosmos ] 2006 11/21 15:12
# Sub Arm #
sub arm {
local($a1,$a2) = @_;
if ($sts =~ /Li/ && $sp !~ /Li/) { &umsg('レ') }
    elsif ($sp =~ /$a1/) {
if ($sts =~ /Dh/ && $sp !~ /Oh/) {
if ($ch !~ /Q[sw]/) {
#          $ab += $iak; $db += $idd;
#-------新装備
if($a1 eq 'Rp' || $a1 eq 'Yr' || $a1 eq 'Sa' || $a1 eq 'Ya' ||$a1 eq 'Hr' || $a1 eq 'Yh'){
$eit += $iak;
$db += $idd;
}
elsif($a1 eq 'He' || $a1 eq 'Ye' || $a1 eq 'Mt' || $a1 eq 'Yt' ){
$bspeed += $iak;
$db += $idd;
}
elsif($a1 eq 'Wd' || $a1 eq 'Yd'){
$ab += $iak;
$eit += $idd;
}
else{
$ab += $iak;
$db += $idd;
}
#-------END
        &umsg('装') if !$nomsg;
if ($a1 eq 'Bw') { $sp .= 'Qb' }
if ($a1 eq 'Kt') { $sp .= 'Qk' }
if ($a1 eq 'Ax') { $sp .= 'Qx' }
if ($a1 eq 'Sw' && $sts =~ /Li/) { $sp .= 'Qm' }
    foreach (@ele_ak) { if ($sts =~ /$_([0-9])/) { $sp .= $_; $sp .= $1 } }
    foreach (@ele_df) { if ($sts =~ /$_([0-9])/) { $sp .= $_; $sp .= $1 } }
$ch .= 'QwQs'; $sts .= 'QwQs';
} else { &umsg('両') }
} elsif ($ch !~ /$a2/) {
#         $ab += $iak; $db += $idd;
#-------新装備
if($a2 eq 'Rp' || $a2 eq 'Yr' || $a2 eq 'Sa' || $a2 eq 'Ya' ||$a2 eq 'Hr' || $a2 eq 'Yh'){
$eit += $iak;
$db += $idd;
}
elsif($a2 eq 'He' || $a2 eq 'Ye' || $a2 eq 'Mt' || $a2 eq 'Yt' ){
$bspeed += $iak;
$db += $idd;
}
elsif($a2 eq 'Wd' || $a2 eq 'Yd'){
$ab += $iak;
$eit += $idd;
}
else{
$ab += $iak;
$db += $idd;
}
#-------END
        &umsg('装') if !$nomsg;
if ($a1 eq 'Bw') { $sp .= 'Qb' }
if ($a1 eq 'Kt') { $sp .= 'Qk' }
if ($a1 eq 'Ax') { $sp .= 'Qx' }
if ($a1 eq 'Sw' && $sts =~ /Li/) { $sp .= 'Qm' }
    foreach (@ele_ak) { if ($sts =~ /$_([0-9])/) { $sp .= $_; $sp .= $1 } }
    foreach (@ele_df) { if ($sts =~ /$_([0-9])/) { $sp .= $_; $sp .= $1 } }
$ch .= $a2; $sts .= $a2;
} else { &umsg('別') }
    } else { &umsg('職') }
}
に変更したのですが、これでも兜(Hr)を装備すると賢さ$eitに格納されるべく数値が攻撃力のほうに加算されてしまいます。
2箇所変更したのですが・・


elsif ($sp =~ /Ws/ && $sp =~ /Sc/) { $trnd = (0,3)[int(rand(2))] }のrandの2が武器の0と盾の1を得ようとしているということは
elsif ($sp =~ /As/) { $trnd = int(rand(2)) + 1 }の+1は何を表しているのでしょうか?
すみません;正直ですが全くこの辺りのスクリプトをどう改造すればいいのかわかりません;
スレッド一覧


1364● Re[3]:下の続きです[ moon ] 2006 11/21 20:47
> if($a2 eq 'Rp' || $a2 eq 'Yr' || $a2 eq 'Sa' || $a2
略...
> に変更したのですが、これでも兜(Hr)を装備すると賢さ$eitに格納されるべく数値が攻撃力のほうに加算されてしまいます。
> 2箇所変更したのですが・・

2つ目も比較するのは$a1です。

> elsif ($sp =~ /Ws/ && $sp =~ /Sc/) { $trnd = (0,3)[int(rand(2))] }のrandの2が武器の0と盾の1を得ようとしているということは
> elsif ($sp =~ /As/) { $trnd = int(rand(2)) + 1 }の+1は何を表しているのでしょうか?

int(rand(2))では0か1が得られます。それに1を加えると1か2が得られます。
つまり、ここでは盾か鎧の値を得るために+1しているということになります。

> すみません;正直ですが全くこの辺りのスクリプトをどう改造すればいいのかわかりません;

この形式で書いていくと種類を多くした時に組み合わせが多くなり大変です。
種類の追加を簡単にするためには以下のような形式で作成する種類を得るようにすれば良いです。(以下の概念はあくまで一例です。)
my @skills = ('Ws', 'As', 'As', 'Sc', 〜追加分〜); # 0:武器、1:盾、2:鎧、3:銀細工、4以降:追加分
my $max = scalar(@skills); # @skillsの要素数
my @types = ();
for(my $i = 0; $i < $max; $i++){
    push(@types, $i) if(index($sp, $skills[$i]) != -1); # 作成スキルを習得している場合はインデックスをリストに追加
}
if(!@types){
    # 作成スキルがない場合
    push(@msg, '作成スキルを習得していません。');
    return;
}
my $trnd = $types[int(rand(@types))]; # リストから1つ選択
スレッド一覧


1365● Re[4]:下の続きです[ cosmos ] 2006 11/21 21:43
できました!ありがとうございます!

my @skills = ('Ws', 'As', 'As', 'Sc', 〜追加分〜); # 0:武器、1:盾、2:鎧、3:銀細工、4以降:追加分
my $max = scalar(@skills); # @skillsの要素数
my @types = ();
for(my $i = 0; $i < $max; $i++){
    push(@types, $i) if(index($sp, $skills[$i]) != -1); # 作成スキルを習得している場合はインデックスをリストに追加
}
if(!@types){
    # 作成スキルがない場合
    push(@msg, '作成スキルを習得していません。');
    return;
}
my $trnd = $types[int(rand(@types))]; # リストから1つ選択
はどの辺りに追加すればいいのでしょうか?

一様ローブと兜とサークレットとマントは鎧作成スキルで、賢さを追加できる杖は武器作成スキルでいいので追加は必要ないかもしれません。
あと杖でもWdのスキルにしているのですがデフォルトの杖(Wd)は変更しなくても問題ないのでしょうか?
スレッド一覧


1366● Re[5]:下の続きです[ cosmos ] 2006 11/21 21:45
追記で上の杖というのは賢さを追加できる杖とSOS2配布時の杖です
スレッド一覧


1367● Re[6]:下の続きです[ moon ] 2006 11/21 23:20
> はどの辺りに追加すればいいのでしょうか?

$trndを求める処理なので、$trndに代入しているif文全体を置換すれば良いです。

> あと杖でもWdのスキルにしているのですがデフォルトの杖(Wd)は変更しなくても問題ないのでしょうか?
> 追記で上の杖というのは賢さを追加できる杖とSOS2配布時の杖です

デフォルトの杖の場合にもアイテムの防御値を賢さ増加値として扱うのでしたら変更しなくても大丈夫です。
ですが、オリジナルのように防御増加値として扱う場合は別にする必要があります。
スレッド一覧


1368● Re[7]:下の続きです[ cosmos ] 2006 11/21 23:38
    if ($sp =~ /Ws|As|Sc/) {
        srand(time | $$);
        $rnd = int(rand(100)) + 1;
if ($sp =~ /Ws/ && $sp =~ /As/ && $sp =~ /Sc/) {
$trndに代入しているif文全体といのは

$trnd = int(rand(8)) }
elsif ($sp =~ /Ws/ && $sp =~ /As/) { $trnd = int(rand(3)) }
elsif ($sp =~ /Ws/ && $sp =~ /Sc/) { $trnd = (0,3)[int(rand(2))] }
elsif ($sp =~ /As/ && $sp =~ /Sc/) { $trnd = int(rand(3)) + 1 }
elsif ($sp =~ /Ws/) { $trnd = int(rand(1)) }
elsif ($sp =~ /As/) { $trnd = int(rand(2)) + 1 }
elsif ($sp =~ /Sc/) { $trnd = 3 }

でしょうか?それとも
        $rnd = 0 if $sp =~ /Bp/;
        if ($rnd <= $def_pr) {
            if ($trnd == 0) {
                $sts = sprintf("%04d%04d",$def_pc1,$def_bn1);
$sts .= 'Yw'; $item = $def_yw;
            }
            if ($trnd == 1) {
                $sts = sprintf("%04d%04d",$def_pc2,$def_bn2);
$sts .= 'Ys'; $item = $def_ys;
            }
            if ($trnd == 2) {
                $sts = sprintf("%04d%04d",$def_pc3,$def_bn3);
$sts .= 'Ya'; $item = $def_ya;
            }
            if ($trnd == 3) {
                $sts = sprintf("%04d%04d",$def_pc4,$def_bn4);
$sts .= 'Yt'; $item = $def_yt;
            }
        if ($trnd == 4) {
            $sts = sprintf("%04d%04d",$def_pc5,$def_bn5);
            $sts .= 'Yh'; $item = $def_yh;
            }
        if ($trnd == 5) {
            $sts = sprintf("%04d%04d",$def_pc6,$def_bn6);
            $sts .= 'Yr'; $item = $def_yr;
            }
        if ($trnd == 6) {
            $sts = sprintf("%04d%04d",$def_pc7,$def_bn7);
            $sts .= 'Ya'; $item = $def_ya;
            }
        if ($trnd == 7) {
            $sts = sprintf("%04d%04d",$def_pc8,$def_bn8);
            $sts .= 'Yt'; $item = $def_ym;
            }
        if ($trnd == 8) {
        $sts = sprintf("%04d%04d",$def_pc9,$def_bn9);
        $sts .= 'Ye'; $item = $def_ye;
            }
        $item =~ s/○○/$nm/;
            &umsg('作');
        }
        else { $gn = 1; &umsg('失') }
    } else { &umsg('加') }
}
でしょうか?
スレッド一覧


1369● Re[8]:下の続きです[ moon ] 2006 11/22 00:10
> $trndに代入しているif文全体といのは
> でしょうか?

前者です。
スレッド一覧


1370● Re[9]:下の続きです[ cosmos ] 2006 11/22 00:26
ありがとうございます。やってみます
スレッド一覧


1371● Re[9]:下の続きです[ cosmos ] 2006 11/22 14:05
以下のような変更の仕方でいいのでしょうか?

# Sub Blacksmith #
sub blacksmith {
#    if ($sp =~ /Ws|As|Sc/) {
#        srand(time | $$);
#        $rnd = int(rand(100)) + 1;
# if ($sp =~ /Ws/ && $sp =~ /As/ && $sp =~ /Sc/) { $trnd = int(rand(8)) }
# elsif ($sp =~ /Ws/ && $sp =~ /As/) { $trnd = int(rand(3)) }
# elsif ($sp =~ /Ws/ && $sp =~ /Sc/) { $trnd = (0,3)[int(rand(2))] }
# elsif ($sp =~ /As/ && $sp =~ /Sc/) { $trnd = int(rand(3)) + 1 }
# elsif ($sp =~ /Ws/) { $trnd = int(rand(1)) }
# elsif ($sp =~ /As/) { $trnd = int(rand(2)) + 1 }
# elsif ($sp =~ /Sc/) { $trnd = 3 }
my @skills = ('Ws', 'As', 'As', 'Sc');
# 0:武器、1:盾、2:鎧、3:銀細工、4以降:追加分
my $max = scalar(@skills);
# @skillsの要素数
my @types = ();
for(my $i = 0; $i < $max; $i++){
push(@types, $i) if(index($sp, $skills[$i]) != -1);
# 作成スキルを習得している場合はインデックスをリストに追加
}
if(!@types){
# 作成スキルがない場合
push(@msg, '作成スキルを習得していません。');
return;
}
my $trnd = $types[int(rand(@types))];
# リストから1つ選択


        $rnd = 0 if $sp =~ /Bp/;
        if ($rnd <= $def_pr) {
            if ($trnd == 0) {
                $sts = sprintf("%04d%04d",$def_pc1,$def_bn1);
$sts .= 'Yw'; $item = $def_yw;
            }
            if ($trnd == 1) {
                $sts = sprintf("%04d%04d",$def_pc2,$def_bn2);
$sts .= 'Ys'; $item = $def_ys;
            }
            if ($trnd == 2) {
                $sts = sprintf("%04d%04d",$def_pc3,$def_bn3);
$sts .= 'Ya'; $item = $def_ya;
            }
            if ($trnd == 3) {
                $sts = sprintf("%04d%04d",$def_pc4,$def_bn4);
$sts .= 'Yt'; $item = $def_yt;
            }
        if ($trnd == 4) {
            $sts = sprintf("%04d%04d",$def_pc5,$def_bn5);
            $sts .= 'Yh'; $item = $def_yh;
            }
        if ($trnd == 5) {
            $sts = sprintf("%04d%04d",$def_pc6,$def_bn6);
            $sts .= 'Yr'; $item = $def_yr;
            }
        if ($trnd == 6) {
            $sts = sprintf("%04d%04d",$def_pc7,$def_bn7);
            $sts .= 'Ya'; $item = $def_ya;
            }
        if ($trnd == 7) {
            $sts = sprintf("%04d%04d",$def_pc8,$def_bn8);
            $sts .= 'Yt'; $item = $def_ym;
            }
        if ($trnd == 8) {
        $sts = sprintf("%04d%04d",$def_pc9,$def_bn9);
        $sts .= 'Ye'; $item = $def_ye;
            }
        $item =~ s/○○/$nm/;
            &umsg('作');
        }
        else { $gn = 1; &umsg('失') }
    } else { &umsg('加') }
}

あと、追加するとエラーになってしまいました
スレッド一覧


1372● Re[10]:下の続きです[ moon ] 2006 11/22 23:23
> 以下のような変更の仕方でいいのでしょうか?
>
> あと、追加するとエラーになってしまいました

必要な部分もコメントアウトされています。
そのせいで、{}のペアが合わなくなりエラーとなります。
スレッド一覧


1373● Re[11]:下の続きです[ cosmos ] 2006 11/23 00:12
下のようにするとエラーは消えたのですが
        srand(time | $$);
        $rnd = int(rand(100)) + 1;
もコメントアウトしないほうがいいのですか?
あと兜等を鎧として扱う場合は何もしなくていいのですか?
追加する場合は単にスキルを追加すればいいのでしょうか?
# Sub Blacksmith #
sub blacksmith {
    if ($sp =~ /Ws|As|Sc/) {
        srand(time | $$);
        $rnd = int(rand(100)) + 1;
# if ($sp =~ /Ws/ && $sp =~ /As/ && $sp =~ /Sc/) { $trnd = int(rand(8)) }
# elsif ($sp =~ /Ws/ && $sp =~ /As/) { $trnd = int(rand(3)) }
# elsif ($sp =~ /Ws/ && $sp =~ /Sc/) { $trnd = (0,3)[int(rand(2))] }
# elsif ($sp =~ /As/ && $sp =~ /Sc/) { $trnd = int(rand(3)) + 1 }
# elsif ($sp =~ /Ws/) { $trnd = int(rand(1)) }
# elsif ($sp =~ /As/) { $trnd = int(rand(2)) + 1 }
# elsif ($sp =~ /Sc/) { $trnd = 3 }
my @skills = ('Ws', 'As', 'As', 'Sc');
# 0:武器、1:盾、2:鎧、3:銀細工、4以降:追加分
my $max = scalar(@skills);
# @skillsの要素数
my @types = ();
for(my $i = 0; $i < $max; $i++){
push(@types, $i) if(index($sp, $skills[$i]) != -1);
# 作成スキルを習得している場合はインデックスをリストに追加
}
if(!@types){
# 作成スキルがない場合
push(@msg, '作成スキルを習得していません。');
return;
}
my $trnd = $types[int(rand(@types))];
# リストから1つ選択
スレッド一覧


1374● Re[12]:下の続きです[ moon ] 2006 11/23 01:12
> 下のようにするとエラーは消えたのですが
>         srand(time | $$);
>         $rnd = int(rand(100)) + 1;
> もコメントアウトしないほうがいいのですか?

はい、少なくとも$rndのほうは必要な処理です。

> あと兜等を鎧として扱う場合は何もしなくていいのですか?
> 追加する場合は単にスキルを追加すればいいのでしょうか?

鎧として扱うというのは兜等を防具作成スキルで作成できるようにするということでしょうか?
それでしたら、@skillsに'As'を必要なだけ追加して、あとは追加したインデックスに対応するif文を後ろのほうにif($trnd == 値){}の形式で追加すれば良いです。
スレッド一覧


1375● Re[13]:下の続きです[ cosmos ] 2006 11/23 08:23
やっと意味がわかりました。ご回答ありがとうございました。
また不明なところがあれば質問するかもしれませんがその時はどうかよろしくおねがいします。
スレッド一覧

CGIROOM