WebPetSystem クックブック(2001.08.014) (C) まかまか般若波羅蜜 http://www2u.biglobe.ne.jp/~hannya/  WPSのスクリプトを快適に利用するための技や細かい仕様についての解説。解説はWPS-Script ver.0.92以降に対応しています。 目録: Q.時間変数の仕様がよくわかりません Q.育成ゲームなどで、開始から日数が経つごとにイベントを起こしたい Q.一定期間でユーザー登録を強制的に抹消するには? Q.一定時間が経過しないとログインできないようにするには? Q.一定時間が経過すると強制的にある選択肢を選ばせるには? Q.リアルタイムに一定時間経過で強制的にある選択肢を選ばせるには? Q.プルダウンメニューを使いたい Q.caseとcallを組み合わせると誤作動するのですが。 Q.forやwhileのようなコマンドはないのですか? Q.使用可能な変数の数が少ないのですが、何か良い方法は? Q.splitで変数の値が何桁あるかわからないので右側の桁から数えたい Q.登録時のペットネームや名前入力の例外処理について Q.通常時のペットネームやパスワード変更の例外処理について Q.wps_img.cgiは何に使うのですか Q.「処理に時間がかかりすぎ」というエラーが出るのですが。 Q.時間変数の仕様がよくわかりません A.以下を参照。 解説:  時間変数には大別するとS,L,A,Pという四種類があります。Sはユーザー登録をした日付に関するものです。Lは前回ログアウトした、あるいはセーブした日付に関して、Aはアクセス(選択肢を選ぶこと)日付、そしてPは現在の日付に関するものになります。これらの文字の後に必ず「TIME」をつけます。  $STIMEは登録した日付を1970年1月1日からの秒数であらわします。同様に$PTIMEは現在の日付を1970年1月1日からの秒数であらわします。  次に$PSTIME,$PLTIME,$PATIME,$ASTIME,$ALTIME,$LSTIMEがあります。順に「登録してから現在までの時間」「前回セーブから現在までの時間」「一つ前のアクセスから現在までの時間」「登録してからアクセスまでの時間」「前回セーブからアクセスまでの時間」「登録してから前回セーブまでの時間」となります(いずれも秒数)。  ただ、このままだと値が秒数なので不便です。そこで後ろに「_MIN」「_HOUR」「_DAY」「_MON」「_YEAR」などのオプションをつけます。  例えば$PSTIME_DAYは登録した日から現在までを日数で表します。同様にして上のオプションは順に分、時間、日数、月数、年数を表します。$ALTIME_HOURなら前回セーブから今回ログインまでの時間です。  なお、「_WEEK」というものもあり、これは基本的にPTIME_WEEKとして使う以外に使い道はありません。値は0..6で、順に日曜〜土曜を表します。 Q.育成ゲームなどで、開始から日数が経つごとにイベントを起こしたい A.case{$PSTIME_DAY}などを利用します。 解説:  $PSTIMEは登録してから現在までの時間を秒数であらわします。わり算「$PSTIME / 86400」をすれば日数がでますが、$PSTIME_DAYを使えば簡単に日数の値がわかります。同様に$PSTIME_HOUR(時間数であらわす)などもあります。 case{$PSTIME_DAY} (1) mes->"登録してから1日目のイベント" (2) mes->"登録してから2日目のイベント" if{$PLTIME_DAY > 3} go->HOGE #四日ぶり以上のアクセス Q.一定期間でユーザー登録を強制的に抹消するには? A.case{$PSTIME_DAY}を利用します。 解説:  登録の削除にはdelを使いますが、これとcase{$PSTIME_DAY}を組み合わせればよいわけです。 case{$PSTIME_DAY} (10-) del  10日以上たつとユーザー登録を削除。一定時間で削除したいばあいには、$PSTIME_HOURを使います。 Q.一定時間が経過しないとログインできないようにするには? A. 解説:  例えば Start case{$PLTIME_MIN} (-29) go->MISS #処理 MISS mes->"さっきアクセスしてからまだ30分も経っていません!" $PTIME = $LTIME end  $PTIME = $LTIME を行わないと、この回のアクセスからさらに30分経過しなければならないことになります。  WPSでは、ログアウトを実行するコマンドendによって、$LTIMEが変更されます($LTIMEは最後にアクセスした日を1970年1月1日からの秒数であらわします)$LTIMEを変更しないという作業が必要になります。  そこでendを実行する直前に$PTIME=$LTIMEとすれば、endによって$LTIMEが書き換えられることはなくなります(新しい$LTIMEには終了時の$PTIME=前の$LTIMEの値が代入されるため)。 Q.一定時間がたつと強制的にある選択肢を選ばせるには? A.$PATIMEを使う 解説:  $PATIMEは一つ前の選択肢を選んでから今回の選択肢を選ぶまでの時間を表します。 if{$PATIME > 10} go->TIMEOUT  上の例だと、10秒以上経過して選択肢を選んだ場合、TIMEOUTという処理を行います。ただしサーバの負荷やデータの転送速度などの条件があるので正しく時間が計れるわけではありません。 Q.リアルタイムに一定時間経過で強制的にある選択肢を選ばせるには? A.addmenuとmetaタグあるいは、JavaScriptを使います。 解説:  普通にmetaタグでrefreshしたりするだけでは、「エラー!不正な選択」が表示されてしまいます。これを避けるためにaddmenuで可能な選択肢を追加します。 例:10秒経つと強制的に移動(metaタグが有効なブラウザのみ) mes->""  select_num=100の部分の数値を変えます。 Q.プルダウンメニューを使いたい A.addmenuを使います。 解説:  セレクトタグを使って選択肢を作ろうとしても、通常は不正な選択ができないようにmenuコマンドで指定された選択肢しか選ぶことができません。そこでaddmenuコマンドを使って、指定された番号も選択肢として使用できるようになります。 (例1) addmenu(10) addmenu(20) mes->"
" mes->"" mes->"" mes->"" mes->"" mes->"" mes->"
"  select_num属性の値が、選択肢の値(通常 menu(n) で表されるもの)になります。これで、通常はできないような方法で選択肢をつくったり、METAタグで一定時間たったら強制的に別の選択肢を選ばせるなどができるようになります。なお、dummyの値は好きにしてかまいません。  INPUTタグは、上の例を定型にしてしまえばよいでしょう。 注:登録モードでは若干表記がかわり、"mode"というNAMEが追加されています。 (例2 登録モード時の場合) addmenu(4) addmenu(5) addmenu(6) mes->"
\n" mes->"\n" mes->"\n" mes->"\n" mes->"\n" mes->"