珍走記を改造しよう

第六回:アイテムを追加しよう2

前回、アイテムを数値化したので、これでアイテムは追加し放題です。いろいろ追加してみましょう。

そのため、前回の改造をしていることが前提となります。また、人によって新しく追加するアイテムが何番目か違うこともあるので、そこは各自調節して下さい。

爆弾SP

今回はまず「爆弾SP」というアイテムを追加してみたいと思います。「爆弾」の全体化バージョンです。すでに「爆弾DX」はあるので、今回はSPということにしてみました。

もともとあるアイテムの全体化なので、これはそう難しくないでしょう。第三回のけむりだまDXと同じ感じですね。

まず、新しいアイテムのデータをmain.jsに追加します。 itemdata=...の3行目ですね。これについても、第三回で解説しました。

.....];のようになっているところに、

.....,['爆弾SP',200,'全員の車を破壊します。成功確率はそれぞれのプレイヤーにつき10%です。']]; のようにして追加してみます。ちなみに、価格が200となっていますが、これは爆弾DXと同じ価格です。好きなように設定しましょう。

さて、実際にアイテムの動作を作っていきます。アイテムの動作を司るのは、item.cgiでした。

まず、処理のもととなる爆弾・爆弾DXの処理を探します。 }elsif(&lib'matchitem($item, 29,56)){ if(&lib'matchitem($item, 56)){ $p=0.5; }else{ $p=0.1; } foreach(@target){ if(rand(1)<$p && $user{"${_}_move"}<=0 && $user{"${_}_status"}!~/b/ && $user{"${_}_car"}!="+9+"){ $user{"${_}_car"}="+9+"; $user{"${_}_work"}=~s/\(\+[0-9]+\+\)//g; $result.=$user{"${_}_name"}."の車を破壊しました。<br>"; $user{"${_}_alert"}.=$user{"${num}_name"}."に車を破壊されました。<br>"; &success(1,$_,"は車を壊されて<font color=\"red\">チャリンコ</font>になりました。"); } } こんな感じになっていると思います。「29番と56番」という指定になっていて、29番が爆弾、56番が爆弾DXです。実は、同じアイテムで対象が1人から全体に変わっただけなら、まったく同じ処理でできるようになっています。そこで、さらに爆弾SPの番号もここに追加します。 }elsif(&lib'matchitem($item, 29,56,番号)){ if(&lib'matchitem($item, 56)){ $p=0.5; }else{ $p=0.1; } foreach(@target){ if(rand(1)<$p && $user{"${_}_move"}<=0 && $user{"${_}_status"}!~/b/ && $user{"${_}_car"}!="+9+"){ $user{"${_}_car"}="+9+"; $user{"${_}_work"}=~s/\(\+[0-9]+\+\)//g; $result.=$user{"${_}_name"}."の車を破壊しました。<br>"; $user{"${_}_alert"}.=$user{"${num}_name"}."に車を破壊されました。<br>"; &success(1,$_,"は車を壊されて<font color=\"red\">チャリンコ</font>になりました。"); } } 「番号」と日本語が書いてありますが、実際にそう書くのではないです。人によって番号が違うので、番号は具体的には書きません。ちなみに、最後の「四次元ポケット」の番号が61なので、はじめてアイテムを追加する場合は、その次の62です。

ちなみに、破壊する確率は、 if(&lib'matchitem($item, 56)){ $p=0.5; }else{ $p=0.1; } の部分で設定されています。これは、「56番なら50%、そうでなければ10%」という意味です。56番は爆弾DXでしたね。「そうでなければ」といっても、この処理をするのは29番と56番だけだから、「56番なら50%、29番なら10%」といっているのと同じようなものでした。今回、新たに追加しても、56番ではないから、それは10%になります。50%にしたいなら56の他にその番号もmatchitemに追加したらいいですが、さすがに50%で全員は強いということで、自分は10%にします。

さて、対象を全体にするように設定します。これは、 if(&lib'matchitem($item, 11,13,15,31,61)){ for($j=1; $j<=$user{'lastnum'}; $j++){ push(@target,$j) if $user{"${j}_password"} ne '' && $j!=$num; } の部分です。ここのmatchitemに追加すれば、そのアイテムは(自分以外の)全員を対象にするようになります。つまり、 if(&lib'matchitem($item, 11,13,15,31,61,番号)){ for($j=1; $j<=$user{'lastnum'}; $j++){ push(@target,$j) if $user{"${j}_password"} ne '' && $j!=$num; } ということですね。これで、完成です。

しかし、実はただデータとして存在していても、それを出回るようにしなければなりません。アイテムショップで売れば出回りますが、他に道の駅で拾うという方法もあります。それには、main.cgiを修正する必要があります。 }else{ $value = "+" . int(rand(61-10)+10) . "+"; ($itemname)=&lib'getprice($value); ($tmp,$tmp,$tmp,$capacity)=&lib'getprice($user{"${num}_car"}); local(@my_item); @my_item = split(/\+\+/,$user{"${num}_item"}); if(@my_item<$capacity){ $user{"${num}_item"}.=$value; $user{"${num}_alert"}.=$itemname."を拾いました。<br>"; }else{ $user{"${num}_alert"}.=$itemname."を拾いましたが持ち切れないので捨てました。<br>"; } } コード中に「61」という数字があります。これはアイテムの最後の番号です。もともとは四次元ポケットが最後で、その番号が61だから、61と書いてあります。既に他のアイテムを追加したという人は、違うかもしれません。今回、この数字を変える必要がありますね。例えば、62番目のアイテムを追加したとしたら62、63番目のアイテムを追加したなら63・・・のようにします。

これが終われば、今度こそ完成です。