PETROOM大改造
【萌え萌えキャラクターズと遊ぼー。】

キャラに、遊びに来た人の名前を呼ばせよう

おぉ〜、ついに来ましたね。
キャラが動物ではなく、アニメやゲームのキャラの場合、これはもう必須ですね(爆)

まず、プレイヤーの名前ですが、$nameという変数に入っています。
要は文章(メッセージ)の中にこの$nameを組み込めば、その部分が「名前」に変換されて画面に表示されるわけですが、
ここで気を付けないといけないのが、変数$nameに、いつプレイヤーの名前が代入されるのか、ということです。
・・・それは、関数checknameが呼び出されたときです。

この関数は「ペットを新しく登録するとき」と、
「部屋に訪れたとき(ペットフォーム)」と「選択肢を選んだあと(アクション)」の時に呼び出されます。
つまり$nameを文章の中に組み込むには、スクリプトの最初の方ではなく、
ペットフォームやアクションのckecknameの後でないといけない、ということになります。

それでは大移動を行いましょう(笑)
104行目からの、

# ↓ペットは時に予想もつかない行動を取ります。
$rnd_border    = 1;  # 何割かの確率で違う(マイナス)アクションを起こさせます。(0.1〜3)
$rnd_img       = 'char_ten.gif'; # その時の画像
$rnd_msg       = '今日はいつもと違って様子が変です'; # その時のメッセージ

この4行を、アクション(sub action)の&ckeckname&error(〜のすぐ下に移動します。

次に263行目からの、

# ↓良いときのメッセージ。
%good_msg = (
    'feed' , 'おいしそうに食べてます♪',
    'pat'  , 'お腹をみせて喜んでいます♪',
    'play' , 'とても楽しそうに遊んでいます♪',
    'hit'  , 'ちょっといじけてますが、大丈夫でしょう',
    'out'  , '喜んで外に飛び出していきました♪',
);
# ↓悪いときのメッセージ。
%bad_msg = (
    'feed' , 'いくらなんでも与え過ぎですよ',
    'pat'  , '触れられるのを嫌がっています',
    'play' , 'とてもそんな気分じゃないようです',
    'hit'  , '脱兎のごとく逃げていきました',
    'out'  , '無理やり外に放り出しました',
);
# ↓どっちでもないときのメッセージ。
%else_msg = (
    'feed' , 'あんまり食べたくないみたいです',
    'pat'  , 'ダルそうにあっちに行ってしまいました',
    'play' , '全く興味なさそうです',
    'hit'  , 'ムカついて噛み付いてきました',
    'out'  , 'しぶしぶ外へ出て行きました',
);

この24行を、先ほどの4行の下に移動します。

144行目からの、

# ↓上の画像のリストと対になっています。
# 画像が表示される時の説明文です。
# かならず24個用意してください。
@schedulemsg = (
                '自分の体をなめています',
                '爪をといでいます',
                '寝ているようです',
                'いびきをかいて寝ています',
                'ぼーっとしています',
                'のびをしています',
                '外の様子が気になるようです',
                'うるさく鳴いています',
                'ヒステリックに鳴いています',
                'ペット用トイレでうんこしています',
                '毛繕いしているようです',
                '壁一面、バリバリ掻いてます',
                'タンスの上で丸まっています',
                '夢をみているようです',
                'ヒマそうです',
                '暴れています',
                '窓の外を眺めています',
                'ニャーニャー鳴いています',
                'ひたすら鳴いています',
                '部屋の隅っこで丸まっています。',
                '布団の上で丸まっています',
                '部屋の中にウンコをしました・・・',
                '何もやることがなさそうです',
                'テーブルの上で丸まっています',
);

この29行を、ペットフォーム(sub petform)の&ckecknameif (〜のすぐ下に移動します。

次に297行目からの、

### その他のメッセージ ###
$out_msg     = '外出中のようです';             # 外出中
$hungry_msg  = 'うるさく鳴いています';         # 空腹時
$tired_msg   = 'なんだかぐったりしていますよ'; # 餓死寸前(死亡一日前)
$enemy_msg   = 'はあなたを敵とみなしています'; # 敵視
$caution_msg = 'はあなたを警戒しています';     # 警戒時

### スペシャル画像&メッセージ ###
# スペシャル画像1
$delight_img = 'char_ten.gif';   # (サンプル)来訪者を喜んでいる画像
$delight_msg = 'あなたが来たことをすごく喜んでいます';   # その時のメッセージ
# スペシャル画像2
$friend_img  = 'char_ten.gif'; # (サンプル)友達と遊んでいる画像
$friend_msg  = '今日はお友達のピヨちゃんと遊んでいます'; # その時のメッセージ

この14行を、先ほどの29行の下に移動します。


移動が終わりましたら、これらの文章に$nameを追記してみましょう。
また、その時に、シングルクォーテーションをダブルクォーテーションに変換して下さい。
具体的には、

'自分の体をなめています',

"$name自分の体をなめています",


88行目の何時間おきに遊べるかは、改造・確認中は0にしておきましょう。
何回でもチェックできるようになります。

$playtime = 0;


そして、最後に。
一通り、これでプレイヤーの名前を呼ぶようになりますが、一ヶ所だけ呼んでくれないというか、
違うプレイヤーの名前を呼んでしまうという、致命的(爆)な欠陥があります。
それは、初めて登録してくれたプレイヤーに対してです。
この欠陥の修正のため、下記のようにして下さい。

ユーザー情報をチェック(sub checkname)の真ん中ほどに、

    # 新規ユーザーを登録
    if ($flag == 0) {
        $gdate = time - $dayhour[$playtime + 1];
        @new = @lines;
        push(@new,"$FORM{'name'}<>$FORM{'pass'}<>$gdate<>0<>\n");
        &openoutuserdata;
    }

という部分があります。
そこへオレンジの部分を追記して下さい。

    # 新規ユーザーを登録
    if ($flag == 0) {
        $gdate = time - $dayhour[$playtime + 1];
        @new = @lines;
        push(@new,"$FORM{'name'}<>$FORM{'pass'}<>$gdate<>0<>\n");
        &openoutuserdata;
        $name = $FORM{'name'};
        $pass = $FORM{'pass'};
    }

設定項目(メッセージなど)がバラバラになってしまいますが、
なんとかご自分で分かりやすいように目印を付けておいて下さい(^^;