▼スレッド
│
└◇331:Re[4]:ランダム [moon] 02/03 19:07
├◇332:追加 [moon] 02/04 09:06
└◇333:Re[5]:ランダム [ナム〜ン] 02/04 09:32
└◇334:原因解明! [ナム〜ン] 02/04 14:30
└◇335:Re:原因解明! [moon] 02/04 19:33<-last
> 間違えました・・・。スレッド一覧
>
> とりあえずbuy_beforeに変えてみたのですが
> エラーの為○○は買えませんでした。
> とでました。
> たぶん、買う時にキャラデータが入れ代わってるような気がします(IDが一番若いやつに)。
>
> あとこれは探索中の処理です。
> 最後にpartneroutはcontact_checkで相手を発見した時に
> 入ってましたので入れてみました・・・。
> このpartneroutはどんな意味があるのですか?
> またどんな時に使えばいいのでしょうか?
実際問題として、$Fm{'pd'}がちゃんと設定されていなければID:0000にさえ会えずにエラーが出ると思うのですがね〜。(get_partnerにより)
そういう理由から$Fm{'pd'}を設定してある、もしくは何も設定されていない、にも関わらずID:0000に会えるというのは原因の見当がつかないのが現状です。
なので、もう少し確認をお願いします。
・buy_before(デフォルト)の実行後に表示される相手は正常な相手なのか?
・buy_beforeの実行後のHTMLソースを見て、販売アイテム周辺のhiddenのname=pd value=????はどうなっているか?
・最初のIDが0000だとして話をしてきましたが実際は?
・ID:0000を一時的になくしてテストするとどうなるか?
partneroutはuseroutのパートナー版です。
示されたソース中では、相手のIDを取得してから何も変更を加えていないのに保存しているので無駄ということですね。(笑)
(1)スレッド一覧
if (@npclines) {
$npcrand = int(rand($npccount));
@prclines = &get_partner("$vid[$npcrand]");
push (@msg,"『$pnm』が現れた!!"); &partnerout;
$NPCFlag = 1; &userout; return;
}
}
(2)
sub contact_npc {
@rcdlines = &get_user("$Fm{'id'}");
print qq|<tr><td valign=top>\n|;
&partner_data;
&form('start');
if ($psp =~ /Tv/) {
&input('radio','mode','npcbuy',' checked',"買う<br>\n");
&input('radio','mode','goodbye','',"別れる\n");
}
&NOKbuttoninform("$vid[$npcrand]");
&form('end');
print qq|</td>|;
}
思い当たることがあるのですが、(1)と(2)の$npcrandは同一ですか?
つまり、(1)と(2)が別サブルーチンであり、(1)の$npcrandがmyとかlocalになっていて、(2)との繋がりがないのではないか?ということです。
この場合、(1)では正常にget_partnerされているので正しい相手が表示されますが、(2)では&NOKbuttoninform("$vid[$npcrand]");の$nccrandが0と判定され先頭のIDが入ることになります。
ただし、この場合はbuy_beforeの実行後も相手が違うということになりますが。
症状とは一致しないので違うかな?
一番上にも書いていますがまずスレッド一覧
elsif ($wana <= $def_npc) {
require 'trap.pl'; &creatnpcs;
・
・
・Aへ
によりtrap.pl内の&creatnpcsが呼び出されます。
そして
sub creatnpcs {
&get_file; &list_in;
foreach $line (@lstlines) {
($vid,・・・,$others) = split(/<>/,$line);
push(@npclines,$line);
}
ここでまずキャラデータを一通り認識して実際はnextを使っているので
該当しないキャラデータは飛ばします。
次に
if (@npclines) {
$npccount = $#npclines + 1;
foreach (0 .. $#npclines) {
($vid[$_],$others) = split(/<>/,$npclines[$_]);
}
}
return($npccount)
}
$vid[$_]とはキャラクターのIDです。
これが$Fm{'pd'}の変わりです。
・A
・
・
if (@npclines) {
$npcrand = int(rand($npccount));
@prclines = &get_partner("$vid[$npcrand]");
push (@msg,"『$pnm』が現れた!!");
$NPCFlag = 1; &userout; last; return;
}
}
となりキャラクターが呼び出されます。
ここまでは問題なくID0000だろうが、0005だろうがNNNNだろうが
呼び出されます。
問題はこのあとのbuy_beforeとbuy_afterの
@prclines = &get_partner("$vid[$npcrand]");という
呼び出し方がいまいち・・・。
("この中")を$Fm{'pd'}にしようが$vid[$npcrand]しようが
呼び出してくれないのです。
ここがどうにかなればできると思うのですが・・・。
あとpartneroutの意味わかりました・・・。たしかに意味が・・・。
まず初めに# Sub Contact Check #の流れを一度見直してスレッド一覧
データを一から作り直しました。
ちなみに$vid[$npcrand]の$npcrandは途中から
数字さえ呼び込まなくなってたみたいです。
そして極めつけが・・・。
スイマセン・・・。テスト用キャラデータがバグってました・・・。
エラーが出るはずだ・・・。お手数をおかけしました。
またなにかあった際はよろしくお願いします。
> まず初めに# Sub Contact Check #の流れを一度見直してスレッド一覧
> データを一から作り直しました。
> ちなみに$vid[$npcrand]の$npcrandは途中から
> 数字さえ呼び込まなくなってたみたいです。
>
> そして極めつけが・・・。
> スイマセン・・・。テスト用キャラデータがバグってました・・・。
> エラーが出るはずだ・・・。お手数をおかけしました。
> またなにかあった際はよろしくお願いします。
まさに、思わぬところに落とし穴ですね。(笑)