▼スレッド
│
└◇1703:Re:アイテム消失 [moon] 05/04 22:29
└◇1704:Re[2]:アイテム消失 [rien] 05/04 23:32
└◇1705:Re[3]:アイテム消失 [moon] 05/05 00:07
└◇1706:Re[4]:アイテム消失 [rien] 05/05 00:40
└◇1707:Re[5]:アイテム消失 [moon] 05/05 00:52
└◇1708:Re[6]:アイテム消失 [rien] 05/05 08:33
└◇1709:Re[7]:アイテム消失 [moon] 05/05 14:22
└◇1710:Re[8]:アイテム消失 [rien] 05/05 18:02
└◇1711:Re[9]:アイテム消失 [moon] 05/05 19:09
└◇1712:Re[10]:アイテム消失 [rien] 05/05 22:04
└◇1713:Re[11]:アイテム消失 [moon] 05/05 22:53
└◇1714:Re[12]:アイテム消失 [rien] 05/05 23:21
└◇1715:Re[13]:アイテム消失 [moon] 05/05 23:43
└◇1716:Re[14]:アイテム消失 [rien] 05/06 00:04
> またまたお世話になります。スレッド一覧
> ここの過去ログでタイトルが同じようなものがあったのですが・・
> どれも違うようで・・見ても分からなかったもので新しく書き込みさせていただきました。
>
> 対人戦闘によって武器が壊れた時に
> 仕掛けた側のアイテムが全て消失してしまったのですが・・
> これは一体どこを直せばよいのでしょうか・・・。
> 普通の戦闘(そのほかの事象)では消失することはなかったと思います。
> 装備品も所持アイテムも全部消えてしまいました・・。
原因となる動作がわかっているのですからその処理(「push (@msg,"$itemが壊れました");」周辺)を中心に修正する箇所を探せば良いです。
おそらくif文の条件か場所が原因で「push(@bag,$newitem);」が実行されていないのだと思います。
> それともう1つ質問なのですが
> スキルの1つとして体力を回復できる(白魔法のようなもの)のを取り入れています
> これの利用を時間制限を設けるような事をしたいのですが・・
> 今の時点だと何度も繰り返し利用できてしまってるので
> 戦闘時間枠のように(〜時間後に利用できますみたいな)制限をつけるにはどうしたらよいのでしょうか・・・
>
> いつも初歩的な質問ですみません・・よろしくお願いします。
最後に使用した時間を保持するための新しいパラメータを用意するのが単純だと思います。
例えばパラメータを$wmtmとした場合、該当スキルの発動判定に「&& $Wwmtm + 86400 <= time」(制限が1日の場合。$Wwmtmはsub fight_subへの引数名)を追加して発動後に「$wmtm = time;」を行うようにすれば良いです。(敗者の発動も同様。)
> 原因となる動作がわかっているのですからその処理(「push (@msg,"$itemが壊れました");」周辺)を中心に修正する箇所を探せば良いです。スレッド一覧
> おそらくif文の条件か場所が原因で「push(@bag,$newitem);」が実行されていないのだと思います。
お早いお返事いつもありがとうございます。
間違ってそうな箇所はなんとかわかったのですが・・
果たして直ってるのかどうか・・分からなく・・
>>
if ($pc > 0) {
$sts = sprintf("%04d%02d%02d",$pc,$iak,$idd) . "$skill";
$newitem = "$item△$sts";$newitem .= "△$price" if $price;
push(@bag,$newitem);
}
これではうまく実行されてないような気がして・・。
$newitem .= "△$price" if $price;この部分がおかしいのでしょうか・・。
> 最後に使用した時間を保持するための新しいパラメータを用意するのが単純だと思います。
> 例えばパラメータを$wmtmとした場合、該当スキルの発動判定に「&& $Wwmtm + 86400 <= time」(制限が1日の場合。$Wwmtmはsub fight_subへの引数名)を追加して発動後に「$wmtm = time;」を行うようにすれば良いです。(敗者の発動も同様。)
パラメーター追加ということはフラグ足しをしていけばいいということですよね。
ありがとうございます。
試してみます。
> > 原因となる動作がわかっているのですからその処理(「push (@msg,"$itemが壊れました");」周辺)を中心に修正する箇所を探せば良いです。スレッド一覧
> > おそらくif文の条件か場所が原因で「push(@bag,$newitem);」が実行されていないのだと思います。
>
> お早いお返事いつもありがとうございます。
> 間違ってそうな箇所はなんとかわかったのですが・・
> 果たして直ってるのかどうか・・分からなく・・
> >>
> if ($pc > 0) {
> $sts = sprintf("%04d%02d%02d",$pc,$iak,$idd) . "$skill";
> $newitem = "$item△$sts";$newitem .= "△$price" if $price;
> push(@bag,$newitem);
> }
このifブロックはマシマロさんのオリジナルそのままのようですが、変更を元に戻したということなのでしょうか?
それでしたらifブロックの場所もオリジナルと同一なら問題無いはずです。
> これではうまく実行されてないような気がして・・。
> $newitem .= "△$price" if $price;この部分がおかしいのでしょうか・・。
「newitem .= "△$price" if $price;」自体は問題無いです。
実行されていないかどうかは実際に動作(必要に応じてpush(@msg,〜)で変数を表示)させてみれば良いと思います。(確認しませんでしたが現象は必ず起こるのですよね?)
> このifブロックはマシマロさんのオリジナルそのままのようですが、変更を元に戻したということなのでしょうか?スレッド一覧
> それでしたらifブロックの場所もオリジナルと同一なら問題無いはずです。
> 「newitem .= "△$price" if $price;」自体は問題無いです。
> 実行されていないかどうかは実際に動作(必要に応じてpush(@msg,〜)で変数を表示)させてみれば良いと思います。(確認しませんでしたが現象は必ず起こるのですよね?)
えっと・・そうですね
いろいろ場所が悪いのかと直してみたりしたのですが
サーバーエラー(500)になったりして
貼り付けたのは元に戻した方でした・・すみません。
なので、この状態でアイテム消失が起こったということなのですが・・。
・・見間違えということではないと思いますが・・動作が起こる原因が他にはないか確認してみることにします。
> > このifブロックはマシマロさんのオリジナルそのままのようですが、変更を元に戻したということなのでしょうか?スレッド一覧
> > それでしたらifブロックの場所もオリジナルと同一なら問題無いはずです。
>
> > 「newitem .= "△$price" if $price;」自体は問題無いです。
> > 実行されていないかどうかは実際に動作(必要に応じてpush(@msg,〜)で変数を表示)させてみれば良いと思います。(確認しませんでしたが現象は必ず起こるのですよね?)
>
> えっと・・そうですね
> いろいろ場所が悪いのかと直してみたりしたのですが
> サーバーエラー(500)になったりして
> 貼り付けたのは元に戻した方でした・・すみません。
> なので、この状態でアイテム消失が起こったということなのですが・・。
> ・・見間違えということではないと思いますが・・動作が起こる原因が他にはないか確認してみることにします。
オリジナルの処理で現象が起こるということでしたらNo.1703に書いた
> おそらくif文の条件か場所が原因で「push(@bag,$newitem);」が実行されていないのだと思います。
の可能性が高くなりますので周辺箇所に「push(@msg,〜)」とif文の前に「push(@msg, "pc=$pc");」を追加して現象を再現させてみて、どこまで処理されているのかと$pcの値がどうなっているのかを確認したほうが良いと思います。
> オリジナルの処理で現象が起こるということでしたらNo.1703に書いたスレッド一覧
> > おそらくif文の条件か場所が原因で「push(@bag,$newitem);」が実行されていないのだと思います。
> の可能性が高くなりますので周辺箇所に「push(@msg,〜)」とif文の前に「push(@msg, "pc=$pc");」を追加して現象を再現させてみて、どこまで処理されているのかと$pcの値がどうなっているのかを確認したほうが良いと思います。
ありがとうございます。
if ($pc > 0) {
〜
の部分の前に記述してみると
戦闘メッセージの後に
pc=0047
pc=0300
pc=0200
pc=0050
pc=0300
pc=0050
pc=0030
と表示されるのですが、記述する場所を間違えたでしょうか・・・。
> > オリジナルの処理で現象が起こるということでしたらNo.1703に書いたスレッド一覧
> > > おそらくif文の条件か場所が原因で「push(@bag,$newitem);」が実行されていないのだと思います。
> > の可能性が高くなりますので周辺箇所に「push(@msg,〜)」とif文の前に「push(@msg, "pc=$pc");」を追加して現象を再現させてみて、どこまで処理されているのかと$pcの値がどうなっているのかを確認したほうが良いと思います。
>
> ありがとうございます。
> if ($pc > 0) {
> 〜
> の部分の前に記述してみると
> 戦闘メッセージの後に
> pc=0047
>
> pc=0300
>
> pc=0200
>
> pc=0050
>
> pc=0300
>
> pc=0050
>
> pc=0030
>
> と表示されるのですが、記述する場所を間違えたでしょうか・・・。
場所はそこで合っています。
7回表示されたようなので7個のアイテムが残っていると考えられるのですがすべて消失したのですよね?
そうすると、このifブロックは問題無いと考えられますのでこの後の処理(サブルーチンの中も含む)で「@items=〜」や「$bg=〜」を行っている箇所がありましたらその周辺が怪しいです。
> 7回表示されたようなので7個のアイテムが残っていると考えられるのですがすべて消失したのですよね?スレッド一覧
> そうすると、このifブロックは問題無いと考えられますのでこの後の処理(サブルーチンの中も含む)で「@items=〜」や「$bg=〜」を行っている箇所がありましたらその周辺が怪しいです。
そうですね、1度アイテムが1つもなくなって
また増やして・・確認を取っていたので
現在は7個になっていました。
戦闘時であって強奪時には特に問題はないようでした。
武器が壊れるときに全て消えたということで・・(恐らく勝利時だったのでしょうか?)
fight.pl以外で直すべきところはありますか?
sos.cgiの方もチェックをしてはいるのですが・・どうもうまくいきません。
上の処理の下に@items〜があったのですが
マシマロさんのデフォルトと同じ記述のようでした・・
@items = @bag;&joinitem('i');
(こうなってました。)
設定を変え壊れる確率を多くしてやってはいるのですが
1/2や1/1にしてもなかなかうまくいかず・・。
確認が取れていない状態です。
それともSidiceの部分がおかしいのでしょうか?
> > 7回表示されたようなので7個のアイテムが残っていると考えられるのですがすべて消失したのですよね?スレッド一覧
> > そうすると、このifブロックは問題無いと考えられますのでこの後の処理(サブルーチンの中も含む)で「@items=〜」や「$bg=〜」を行っている箇所がありましたらその周辺が怪しいです。
>
> そうですね、1度アイテムが1つもなくなって
> また増やして・・確認を取っていたので
> 現在は7個になっていました。
> 戦闘時であって強奪時には特に問題はないようでした。
> 武器が壊れるときに全て消えたということで・・(恐らく勝利時だったのでしょうか?)
>
> fight.pl以外で直すべきところはありますか?
> sos.cgiの方もチェックをしてはいるのですが・・どうもうまくいきません。
> 上の処理の下に@items〜があったのですが
> マシマロさんのデフォルトと同じ記述のようでした・・
> @items = @bag;&joinitem('i');
> (こうなってました。)
>
> 設定を変え壊れる確率を多くしてやってはいるのですが
> 1/2や1/1にしてもなかなかうまくいかず・・。
> 確認が取れていない状態です。
>
> それともSidiceの部分がおかしいのでしょうか?
破壊時に現象が再現するということが確認できていないのでしょうか?
マシマロさんの場合は確率で壊れるわけではないですので装備品の下取り価格部分のステータスを0001にすれば1度の勝利で壊れます。
所々に「push(@msg, '(1) items=' . scalar(@items) . ', bg=' . ($bg ne '' ? 'あり' : 'なし'));」を追加してみてどこで@itemsの個数が0もしくは$bgが空になっているかどうかを突き止めてみてください。
> マシマロさんの場合は確率で壊れるわけではないですので装備品の下取り価格部分のステータスを0001にすれば1度の勝利で壊れます。スレッド一覧
ありがとうございます。
確認できました。
やはり壊れるとアイテムが全てなくなりました。
設定部分に戦闘中に装備品が壊れる確率というのがあったので
そこを直しておりました・・;
> 所々に「push(@msg, '(1) items=' . scalar(@items) . ', bg=' . ($bg ne '' ? 'あり' : 'なし'));」を追加してみてどこで@itemsの個数が0もしくは$bgが空になっているかどうかを突き止めてみてください。
fight.pl内で調べてみると
Sub fight
のすぐ下に追加したものが
(1) items=0, bg=なし
>>srand(time | $$);
if ($sp =~ /Qb/) { $uw = (-2,-1,0,1,2) [int(rand(5))] }
この直後に追加したものが
(1) items=0, bg=あり
>>foreach (0 .. $#items) {
$break = 0;
($item,$sts,$price) = split(/△/,$items[$_]);
$iak = substr($sts,4,2); $idd = substr($sts,6,2);
$pc = substr($sts,0,4); $skill = substr($sts,8,1000);
これ以降が
(1) items=3, bg=あり(所持3だった場合)
となっておりました。
どちらかでも0又はなしである範囲で探したほうがよいのでしょうか・・。
それとも両方0である箇所がおかしいのでしょうか・・。
「(1)」の部分は場所がわかりやすいように連番でも付けていただければ、と思って一応書いていたのですが、まあ場所がわかったのでしたら構いません。スレッド一覧
> fight.pl内で調べてみると
> Sub fight
> のすぐ下に追加したものが
> (1) items=0, bg=なし
get_userが実行されていないのでこの表示で問題無いです。
> >>srand(time | $$);
> if ($sp =~ /Qb/) { $uw = (-2,-1,0,1,2) [int(rand(5))] }
> この直後に追加したものが
> (1) items=0, bg=あり
splititemが実行されていないのでこの表示で問題無いです。
> >>foreach (0 .. $#items) {
> $break = 0;
> ($item,$sts,$price) = split(/△/,$items[$_]);
> $iak = substr($sts,4,2); $idd = substr($sts,6,2);
> $pc = substr($sts,0,4); $skill = substr($sts,8,1000);
> これ以降が
> (1) items=3, bg=あり(所持3だった場合)
>
> となっておりました。
useroutの直前までこの表示なのでしたら問題無い(消失していない)はずです。
> どちらかでも0又はなしである範囲で探したほうがよいのでしょうか・・。
> それとも両方0である箇所がおかしいのでしょうか・・。
表示内容としては動作に問題があるようには見えませんので、今度は「push(@msg, '(1) items=' . scalar(@items) . ', bg=' . $bg);」で試してみてください。
見方としてはsplititemからuseroutの間で表示に変化がある部分に注目してください。
スレッド一覧
> 表示内容としては動作に問題があるようには見えませんので、今度は「push(@msg, '(1) items=' . scalar(@items) . ', bg=' . $bg);」で試してみてください。
> 見方としてはsplititemからuseroutの間で表示に変化がある部分に注目してください。
splititemからuseroutの間で
4つくらい追加してみたのですが
どれも同じ表示でした。
>>(1) items=3, bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
(1) items=3, bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
(1) items=3, bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
(1) items=3, bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
(1) items=3, bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
(1) items=3, bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
異常はないということでしょうか・・・?
何度もすみません・・。
>スレッド一覧
> > 表示内容としては動作に問題があるようには見えませんので、今度は「push(@msg, '(1) items=' . scalar(@items) . ', bg=' . $bg);」で試してみてください。
> > 見方としてはsplititemからuseroutの間で表示に変化がある部分に注目してください。
>
> splititemからuseroutの間で
> 4つくらい追加してみたのですが
> どれも同じ表示でした。
> >>(1) items=3, bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
> (1) items=3, bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
> (1) items=3, bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
> (1) items=3, bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
> (1) items=3, bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
> (1) items=3, bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
>
> 異常はないということでしょうか・・・?
> 何度もすみません・・。
少なくともuseroutの直前までは問題ないようです。
ですので、useroutの中および以降に原因があるのだと思います。
今度は以下の処理をuseroutの直前に1回と直後以降にいくつか追加して試してみてください。
if(open(FILE, '<', "$usrdir$id.dat")){my @data = <FILE>; close(FILE); push(@msg, 'bg=' . (split(/<>/, $data[0]))[19]);}else{push(@msg, 'error');}
スレッド一覧
> 少なくともuseroutの直前までは問題ないようです。
> ですので、useroutの中および以降に原因があるのだと思います。
> 今度は以下の処理をuseroutの直前に1回と直後以降にいくつか追加して試してみてください。
> if(open(FILE, '<', "$usrdir$id.dat")){my @data = <FILE>; close(FILE); push(@msg, 'bg=' . (split(/<>/, $data[0]))[19]);}else{push(@msg, 'error');}
userout直前直後と
それ以降のSub Fight内に2つ追加しました。
表示は全て同じになりました。
bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd
bg=リュート△00010100Mi,アップルグミ△00100100Fd,ピーチグミ△00300200Fd