▼スレッド
│
└◇882:Re[3]:初歩の質問です……。 [moon] 01/17 21:35
└◇883:Re[4]:初歩の質問です……。 [ミル] 01/17 21:55
└◇884:Re[5]:初歩の質問です……。 [moon] 01/17 22:07
└◇885:Re[6]:初歩の質問です……。 [ミル] 01/17 22:27
├◇886:Re[7]:初歩の質問です……。 [ミル] 01/17 22:37
└◇887:Re[7]:初歩の質問です……。 [moon] 01/17 22:39
└◇888:Re[8]:初歩の質問です……。 [ミル] 01/17 22:53
└◇889:Re[9]:初歩の質問です……。 [moon] 01/18 00:58
└◇890:Re[10]:初歩の質問です……。 [ミル] 01/18 10:57
└◇891:Re[11]:初歩の質問です……。 [ミル] 01/18 14:28
└◇892:Re[12]:初歩の質問です……。 [moon] 01/18 14:53
└◇894:Re[13]:初歩の質問です……。 [ミル] 01/18 15:13
├◇895:Re[14]:初歩の質問です……。 [moon] 01/18 15:29
└◇896:階層が深いそうなのでこちらに [ミル] 01/18 15:52<-last
> ……ですが、これもまた言葉足らずだったのですが、実を言うと別々のファイルを別々の場所で読み込ませるようにしたいのです。スレッド一覧
> 私の改造しているものは、キャラクターのメニュー中に「転職所」のようなものを設置していて、そこでは通常の職業(job.dat)を選択し、転職ができます。
> でも、最初は初心者(男と女の二つあります)という職業から始めたい。ということで、新規登録の場所では初心者(男)と初心者(女)だけを選択(jobv.dat)できるようにして、最初はみな初心者から始めることになり、転職所ではまた別の職業(job.dat)を読み込ませ、そこでは通常の職業に基本職転職ができる。と。
>
> 説明が下手で理解し難く、勝手に説明を始めて失礼かもしれませんが、私の目標としているのはこれです。
> もしまだご教授して下さるなら、本当に申し訳ないのですが片方で一つ目、もう一方で二つ目の職業表のファイルを指定する方法を教えては頂けないでしょうか。
ufs2.cgiを変更する必要がある場合は別途してもらうとしてsos2.cgiのほうはNo.880で書いた変更を以前の状態に戻してから、
$jobdat = './job.dat';
の下に、
$jobvdat = './jobv.dat'; # 新規登録時に使うファイルのパスを定義
を追加して、sub new_gameとsub make_newの、
@joblines = &opendat($jobdat);
を、
@joblines = &opendat($jobvdat); # job.datではなくjobv.datを読み込む
に置換する。
上のようなことでしょうか。
コメントに書いたことが処理の簡単な説明です。
> を追加して、sub new_gameとsub make_newの、スレッド一覧
> @joblines = &opendat($jobdat);
> を、
> @joblines = &opendat($jobvdat); # job.datではなく
なるほど……。
そのままコピペしたらエラーが出て、よく見てみると全角空白まで入れてコピーしてしまったようで、修正したら出来ました^^;
ありがとうございます!これで理想とするものに近付けました。
基本的にsos2.cgiの辺りで読み込ませて別の場所から指定するんですね。まだ代入等分からないことばかりですが、なんとか自分で考えたものをCGIに実現できるよう、頑張ります!
本当にありがとうございました。
> 基本的にsos2.cgiの辺りで読み込ませて別の場所から指定するんですね。スレッド一覧
これは作る人や場合により異なります。
今回はsos2.cgiが設定部分に$jobdat = 〜;を定義しているのでそれにならって似たように書いただけです。
なので、$jobvdat = 〜;を定義せずに直接&opendat('./jobv.dat');としても大丈夫です。(ファイル名は滅多に変更しないと思いますし)
なるほど……。スレッド一覧
ちょっとそれを利用できるかな、と読んでやってみているのですが、Mnという男を表すスキル。Wmという女を表すスキルを持つ人によって、転職出来る内容を変えられるということにするとして、opendatの部分をちょこっと埋め込んでみたんですが、これだけではどうやら読み込めないようなんです。
@ljblines = &opendat($jobmdat)if $mysp =~ /Mn/;
@ljblines = &opendat($jobwdat)if $mysp =~ /Wm/;
恐らく、他にも入力すべき箇所があるかここに入力すること自体がおかしいのかのどちらかだと思うのです。
まだ付き合ってくださるなら……。と思ったのですが、他の場所にあるCGIの質問にもなりかねませんし、何よりしつこいですよね^^;
もしダメなら放置でも構いません。これまで教えて頂いただけでも大収穫なので……。
あぁ……。もしかしたら構文自体がへたれなのかもしれないです。スレッド一覧
if($mysp =~ /Mn/){@ljblines = &opendat($jobmdat);}
if($mysp =~ /Wm/){@ljblines = &opendat($jobwdat);}
これなら出来そうかなと思ったのですがやっぱり無理。ちょっと頭オーバーヒートしそうです_| ̄|○illずーん
> なるほど……。スレッド一覧
> ちょっとそれを利用できるかな、と読んでやってみているのですが、Mnという男を表すスキル。Wmという女を表すスキルを持つ人によって、転職出来る内容を変えられるということにするとして、opendatの部分をちょこっと埋め込んでみたんですが、これだけではどうやら読み込めないようなんです。
> @ljblines = &opendat($jobmdat)if $mysp =~ /Mn/;
> @ljblines = &opendat($jobwdat)if $mysp =~ /Wm/;
> 恐らく、他にも入力すべき箇所があるかここに入力すること自体がおかしいのかのどちらかだと思うのです。
> まだ付き合ってくださるなら……。と思ったのですが、他の場所にあるCGIの質問にもなりかねませんし、何よりしつこいですよね^^;
> もしダメなら放置でも構いません。これまで教えて頂いただけでも大収穫なので……。
別に構いませんよ。
> @ljblines = &opendat($jobmdat)if $mysp =~ /Mn/;
> @ljblines = &opendat($jobwdat)if $mysp =~ /Wm/;
この処理の前に&get_user(〜);があるのなら、$myspではなく$spです。
&get_userが無い場合はユーザデータが読み込まれていないので&get_userを実行しておく必要があります。
ちなみに省略すると2行をまとめて、
@ljblines = &opendat(index($sp, 'Mn') != -1 ? $jobmdat : $jobwdat);
と書けます。(ただし、MnとWmが同時にスキルに付いていたりどちらも付いていなかったりすると動作は異なりますがどちらかしか付いていないのなら同じ動作です。)
ごめんなさい。お世話になります。助かります(´・ω・`)スレッド一覧
@ljblines = &opendat(index($sp, 'Mn') != -1 ? $jobmdat : $jobwdat);
とのことですが、入力して動作させてみると「Can't Open」と表示されます。多分opendatにエラーが起こってるようなのですが……。
後、よろしければ部分部分の説明も教えていただけませんか?Mnのスキルがあればjobmdat。それが無ければ(Wmのスキルを持っていれば)jobwdatということだと思うのですが、「(index」等も出てきたので……。
とほほのCGI入門には書いていなかったと思いますので、よければ教えて下さい。
> ごめんなさい。お世話になります。助かります(´・ω・`)スレッド一覧
> @ljblines = &opendat(index($sp, 'Mn') != -1 ? $jobmdat : $jobwdat);
> とのことですが、入力して動作させてみると「Can't Open」と表示されます。多分opendatにエラーが起こってるようなのですが……。
$jobmdatや$jobwdatが定義されていないのだと思います。
$jobvdatの定義と同様に設定部分にでも定義の追加が必要です。
> 後、よろしければ部分部分の説明も教えていただけませんか?Mnのスキルがあればjobmdat。それが無ければ(Wmのスキルを持っていれば)jobwdatということだと思うのですが、「(index」等も出てきたので……。
> とほほのCGI入門には書いていなかったと思いますので、よければ教えて下さい。
A ? B : C;はif(A){B}else{C}の省略した書き方です。
そして、index(A, B);はAの先頭からBを検索して最初に見付かった位置を返す関数です。(見付からない場合は-1が返ります。)
なので、「$spに'Mn'があれば$jobmdatを開き、なければ$jobwdatを開く」という処理ということになります。
sos2でちゃんと指定はしているのですが……。スレッド一覧
と思ったらアップをしていませんでした。すみません^^;
分割verなので、plフォルダばかり見ていてsos2とufs2を忘れがちですね……。
それで、実行してみたらばっちりできました。助かりました。ありがとうございます。
> A ? B : C;はif(A){B}else{C}の省略した書き方です。
> そして、index(A, B);はAの先頭からBを検索して最初に見付かった位置を返す関数です。(見付からない場合は-1が返ります。)
なるほど。後でちょっと自分でやってみますね。
本当に、本当にありがとうございました。とても助かりました^^
うー……。申し訳ないです。やはり無理でした。スレッド一覧
@ljblines = &opendat(index($mysp, 'Mn') != -1 ? $jobmdat : $jobwdat);
の、
$jobmdat : $jobwdat
ここの後のファイルだけしか開きません。女性(Wm)の方しか選択できないようになってます。
逆にしてみると($jobwdat : $jobmdat)、今度は男の(Mn)方だけという結果になってしまいます。一方ずつ、別のスキルを持つキャラクターで試しました。
どうすれば良いでしょうか……。後、「見つからない場合、-1が返る」と仰っていましたが、具体的にはどういう意味でしょうか?説明しづらいものならば割合して頂いても構いません。
> @ljblines = &opendat(index($mysp, 'Mn') != -1 ? $jobmdat : $jobwdat);スレッド一覧
$myspではなくて$spですよ。
> どうすれば良いでしょうか……。後、「見つからない場合、-1が返る」と仰っていましたが、具体的にはどういう意味でしょうか?説明しづらいものならば割合して頂いても構いません。
例えば、
$pos = index('aaaaZaaa', 'Z')なら$posは4(0から数えるので)
$pos = index('aaaaZaaa', 'X')なら$posは-1('X'は存在しないので)
ということです。
# 後者が見付からない場合に-1が返るという事例
あ、すみません。myは外してテストしたんです。そしたら出来なかったからmyを入れてみて……というようにやったので、そこから貼り付けてしまったようで……。度々申し訳ないです。スレッド一覧
> 例えば、
> $pos = index('aaaaZaaa', 'Z')なら$posは4(0から数えるので)
> $pos = index('aaaaZaaa', 'X')なら$posは-1('X'は存在しないので)
> ということです。
なるほど……。一つずつ減らすとして、もし入れる数がaaaZaaだと$posは3になるわけですね?("aaa"Zaa
> あ、すみません。myは外してテストしたんです。そしたら出来なかったからmyを入れてみて……というようにやったので、そこから貼り付けてしまったようで……。度々申し訳ないです。スレッド一覧
そうすると、@ljblines = &opendat(index($sp, 'Mn') != -1 ? $jobmdat : $jobwdat);の前に&get_userがされていないという可能性もあります。
@ljblines = 〜;の前にpush(@msg, "\$sp = $sp<br>");を入れてテストをしてなんと表示されるかを確認してみてください。
「$sp = 」というように$sp = の後に何も表示されないのであれば&get_userが実行されていない(もしくは読み込めなかったとかデータが壊れているとか)ということです。
うーん……。push(@msg, "\$sp = $sp<br>");を指定された場所に組み込んで、テストしてみても変わりはありませんでした。スレッド一覧
と、文の中に&get_userの記述を見つけたので、その後
に@ljblines = &opendat(index($sp, 'Mn') != -1 ? $jobmdat : $jobwdat);を置いてみると……。
見事、出来ました!
男は男だけ。女は女だけの職しか選べませんっ!(嬉
いやはや、私なんぞに付き合ってくださってありがとうございました……。