このページは、SOLD OUT ファンサイトのso-Junkyで行われていたゲームの改造講座を転記したものです。

SOLD OUT 改造講座 | SOLD OUT ミジンコ

五芒星

SOLD OUT ミジンコ

015 職業の変更

職業の変更と、職業によるコマンド時間の短縮

  • 各アイテムをとりあえず追加(復習です)
  • 本にコマンドを追加
  • タモにコマンドを追加
  • 職業によるコマンド時間の短縮
  • 職業の変更(独自関数)

「ミジンコ」がとっても好きなあなたは悩んでいました。【ひょっとしたら無駄な時間を使ってるんじゃないか?】。つまりこういうことです。野生のミジンコを集めたり研究所跡地を探索するのが好きか、購入したミジンコをカラフルに変えて観賞するのが好きか、どっちか片方だけにしたほうが無駄がない。いったいあなたはどちらがお好みですか?

無改造版で言えば、「薬屋」という職業になっていると「薬調合入門」のコマンドを使うときに時間短縮されたりしますよね。

今回は職業について3つの内容に分けて説明したいと思います。

1. 職業の定義

2. 職業に就いている場合の @@USE の時間短縮

3. 職業の変更を行う独自関数。難しいですよ〜。(^ー^)

 

1. 職業の定義

inc-item-data.cgi の(おそらく)17行目あたりから職業の定義があります(アイテム分類の定義のすぐ下です)。

 job drug  薬屋           #★職業定義(職業コード{スペース}職業名) 職業コードは英小文字10文字以内
 job tool  道具屋          #以下繰り返し(拡張可)
 job weapon  武器屋
 job armor  防具屋
 job material 山師
 job book  本屋
 job cow   酪農家
 job peddle  行商人
 
 # 職業別時間短縮用変数設定
 set job_drug_time_rate  2
 set job_tool_time_rate  2
 set job_weapon_time_rate 2
 set job_armor_time_rate  2
 set job_material_time_rate 2
 set job_book_time_rate  2
 set job_cow_time_rate  2
 set job_peddle_time_rate 2

上のかたまりは「こんな職業があるよ」というのを定義したものです。例えば、「jod drug 薬屋」は、「薬屋」という職業名と「drug」という職業コードを定義しています。職業名と職業コードは自由な文字を設定すれば大丈夫です。でも、必ず「job(区切り)職業コード(区切り)職業名」としてください。

下のかたまりは「特定職業になっている時に何倍の速さで@@USEを行うか」を設定するものです。例えば「set job_drug_time_rate 2」は、薬屋になっていれば2倍のスピード(使用時間が半分)となるわけです。これを「4」とすれば4倍のスピード(使用時間が1/4)となります。設定をする際に job_○○_time_rate の○○の部分は「職業コード」を使っておくと、後に見たときに分かりやすくなると思います。区切りの位置は「set(区切り)job_○○_time_rate(区切り)速さの数字」としてください。

では早速、inc-item-data.cgi を変更してみましょう(赤文字部分が追加、元から設定してある不要な職業は消してしまってよいです)

        job picker  採取家
        job sience  科学者
 
        # 職業別時間短縮用変数設定
        set job_picker_time_rate 2
        set job_sience_time_rate 2

 

2. 職業に就いている場合の @@USE の時間短縮

上記の説明は inc-item-data.cgi 全体に関わる設定であって、どの @@USE で職業のスピードを適用させるかについては、それぞれの @@USE の中で定義します。

まずは説明です。途中は省略しますが、次のように @@USE の中に書きます。

@@ITEM
        no  3
        name 変身の方法
        @@USE
                job  科学者 times/job_sience_time_rate
                name あかジンコに変身する

このようにしておくと、「あかジンコに変身する」というコマンドの時間が job_sience_tirme_rate(=2) 倍のスピードで実行できることになります。

表記方法は、「job(区切り)職業名(区切り)times/職業別時間短縮用変数」となります。間違いやすいのが「times」と書かなければならないのを「time」と書いてしまって正常に動作しないことです。

では実際に設定してみたいと思いますが、設定する場所が多いので途中を省略して書いておきます(赤文字です)。

@@ITEM
        no  3
        name 変身の方法
        @@USE
                time 4h
                exp  1%
                exptime 2h
                job  科学者 times/job_sience_time_rate
                scale 変身
                action 変身
                name あかジンコに変身する
                info あかジンコに変身してみます
                okmsg あかジンコに変身しました
                func lostbook
                param 100
                        use  20 ミジンコ
                        use  10 酸素
                        use  1 赤薬1号
                        get  20 あかジンコ 90%
        @@USE
                job  科学者 times/job_sience_time_rate
                name あおジンコに変身する
        @@USE
                job  科学者 times/job_sience_time_rate
                name きぃジンコに変身する

@@ITEM
        no  2
        name タモ
        @@USE
                job  採取家 times/job_picker_time_rate
                name ミジンコをすくう
        @@USE
                job  採取家 times/job_picker_time_rate
                name 研究所の跡地を探索する

 

3. 職業の変更を行う独自関数。難しいですよ〜。(^ー^)

く じ け る な っ、 こ こ を 乗 り 切 れ ば、 後 は 楽 さ っ ♪

さて、以上の説明は、「もし○○という職業に就いていたら、@@USE の時間を短縮する」というものでした。でも、実際にプレイヤーの職業を設定するためにはどのようにしたらよいのでしょうか。

サンプルとしては、無改造版の「転職のススメ」なのですが・・・(うぎゃ~、なんかプログラムがしてある〜)みたいな。そうなんです。職業を設定するためには、どうしても perl スクリプトを使わなければならないのです。でも、今回は転職のススメみたく難しくしないで、超々々簡単に設定してしまいますので安心してくださいね。(その代わり転職のススメのように熟練度は変化しません。)

 

でも、よい機会ですので、perl を記述するための SOLD OUT 独自関数の書式についても説明しておきます。

SOLD OUT 独自関数の書式は大きく分けて2通りの書き方があります。(チンプンカンプンな人は「いつか読み直して覚えよう」程度でOK)

  1. 「sub lostbook」のように、inc-item-data.cgi の下の方(@@FUNCITEMのところ)に記述しておいて、「@@USE func lostbook」として呼び出す方法。いろいろな @@ITEMで同じ独自関数を共有利用する場合に便利
  2. @@USE の中に直接記述してしまう方法。こちらは、手取り早いし、負荷が抑えられる点が特徴です。ただし、他の @@ITEM にある独自関数は利用できません(同じ @@ITEM に記述してある独自関数は再利用できます)。

で、今回の職業変更は本当は1番目のやり方で実現した方が良いのですが、それは 010講座の「sub lostbook」でお試ししてみたので、今回は2番目の方法でやってみたいと思います。

 

では、独自関数の書式から説明します。(今まで勉強してきたところは省略しています。)

@@ITEM
        no  3
        name 変身の方法
        @@USE
                name 職業を変更する
                func _local_
                        ※ココに独自関数を perl で記述します。
                        return '表示メッセージ';
                _local_

このように、青色で表記したようなパターンになります。ここまでは単純です。※印の部分が難しいんだよね。

※perl 言語の説明をするためには、私には力不足です。ですから、perl 言語を勉強したい人は本を買ったり、「とほほのWWW入門」などで勉強してください。ただし、本講座でとり扱う部分については簡易説明をつけてゆきます。

 

では、独自関数の中に「職業に就く」という命令を perl で記述してみたいと思います。

func _local_
    $DT->{job}='sience';
    return '職業が「科学者」になりました';
_local_

(うぎゃ~っ)←まて、落ち着け。

$DT は店舗のいろんな情報がつまっている変数(入れ物)です。→用語で分からないものは「アスキーデジタル用語辞典」などで調べましょう。

そして、$DT->{job} は店舗の職業コードを入れておくもで、この講座の最初の方で決めた「職業コード」を入れてあげるとその職業になってしまいます。ですから、@@USE のコマンドだけではなく、「全員が科学者になってしまいました」などのイベントを作ることもできます。

※ある変数に値を入れる(設定する)場合は、「変数名=値;」と記述します。最後の ; (セミコロン) は1つの命令が終わったよという意味です。

'sience' とか '職業が・・・' などの文字列の前後には ' (シングルクオート)があります。

次に、return の後ろには、表示するメッセージを書きます。ところが、もしですよ、もし「job sience  科学者」を「job sience 合成師」みたいに変更した場合は、独自関数の表示メッセージも変更しなくちゃいけませんし、その変更を忘れてしまう場合があります。そこで、次のようにしておくことで、職業コードに対応した職業名を表示できるようになります。

func _local_
    $DT->{job}='sience';
    return '職業が「' . $main::JOBTYPE{$DT->{job}} . '」になりました';
_local_

わかる? 「科学者」と書いてあったところを、$main::JOBTYPE{$DT->{job}} と置き換えました。

※'文字列' . '文字列' のように . (ピリオド) をつけることで、複数の文字列をくっつけるよ、という意味字なります。この'文字列'の代わりに変数を指定することもできます。例えば、'文字列' . 変数 . '文字列' です。

たぶんこの辺りで疑問がわいてくると思います。

「$DT が店舗の変数だったり、 $main::JOBTYPE が職業の変数だったり、どうして分かるわけぇ?」

それはですね、無改造版の inc-item-data.cgi を参考にする場合もあれば、system の奥深くまで潜って探し当てる場合もあります。ただ、よく使うものは MANUAL に書いてあるのでそんなに心配しなくてもよいよ。

この機会に少しずつ perl 言語を勉強するのも良いかと思います。perl を覚えると、出来ることがむっちゃ多くなります。(わかってもらえるかどうかわかんない perl の説明をするのは辛いし。)

 

ということで、つまるところ、上の説明がわかんなくても、次のようにしておけば、職業を変えることができます(例によって赤文字部分です)。


@@ITEM
        no  3
        name 変身の方法
        @@USE
                name あかジンコに変身する
        @@USE
                name あおジンコに変身する
        @@USE
                name きぃジンコに変身する
        @@USE
                time 6h
                scale 回
                action 修行
                name 科学者になる
                info 科学のエキスパートになります
                okmsg 科学者になりました
                needexp 10%
                func _local_
                        $DT->{job}='sience';
                        return '職業が「'.$main::JOBTYPE{$DT->{job}}.'」になりました';
                _local_
@@ITEM
        no  2
        name タモ
        @@USE
                name ミジンコをすくう
        @@USE
                name 研究所の跡地を探索する
        @@USE
                time 6h
                scale 回
                action 修行
                name 採取家になる
                info タモ採取のエキスパートになります
                okmsg 採取家になりました
                needexp 40%
                func _local_
                        $DT->{job}='picker';
                        return '職業が「'.$main::JOBTYPE{$DT->{job}}.'」になりました';
                _local_

途中に 「needexp ○%」とありますが、これは、「need アイテム名」の熟練度版で、「コマンドを実行するためには @@ITEM の熟練度が○%以上になっている必要がある」という意味です。

それから、職業に就くコマンドを実行するときに回数を選択できるようになっています。このままだとマズイ(というか意味がない)ので、次にそのあたりを説明したいと思います。

さ、それでは、inc-item-data.cgi をサーバに転送し、商品の更新を行って、テストしてみてください。

難しいところでしたが、ご苦労様でした。

コンテンツ

ミジンコトップページ

001 アイテムを1個追加

002 ミジンコの説明

003 2つ目のアイテム

004 街人に売る設定

005 タモでミジンコをすくう

X01 おまけ1

006 市場に入荷させない

007 ミジンコが道具?

008 アイコン画像

009 維持費など

010 使うと無くなる

X02 おまけ2

011 よく使う物ほど上に

012 合成材料

013 コマンドに必要商品

014 バージョン変更方法

015 職業の変更

X03 おまけ3

016 1回だけのコマンド

017 お金を使うコマンド

018 ミジンコと会話♪

019 お店の選択

020 陳列棚を操作する

X04 おまけ4


SOLD OUT 陰陽道


おすすめ

イラストアイコン素材のCUTE

SOLD OUT Shop of Monsters(SOSM)

簡易データベースCGI

ホーム | ページトップ Copyright (C) 2006 HeRO. ALL RIGHT RESERVED.
ホームページランキングのザ・ランクテンに参加しています