SOLD OUT MANUAL 2002-07-28

SOLD OUT MANUAL 2002-07-28

総合目次 > カスタマイズ目次 > 商品データ記述文法


SOLD OUT カスタマイズの文法とコマンドの説明です。

はじめに

この説明書ではsoldout/inc/inc-item-data.cgiの記述方法(文法やコマンド)を説明します。 説明だけでは分かりにくい部分もありますので、 併せて soldout/inc/inc-item-data.cgi を記述サンプルとして参照してください。。

文法

基本構文

@@コマンド [コマンド毎の記述 [コマンド毎の記述 [...]]]

大文字小文字の同一視

コマンド名やコマンド毎のパラメータ名は大文字小文字を同一視します。 以下は全て同一と見なされます。

@@DEFINE SCALE 個
@@define scale 個
@@Define Scale 個

区切り

コマンドやコマンド毎の記述の区切りはスペースもしくはタブです。 全角スペースは区切りとは見なされません。

改行とスペース(区切り)の扱い

文字列を記述する場合を除き、改行や余分なスペースは無視されます。

※例外として、コマンド @@INCLUDE, @@IF, @@SETMACRO, @@USEMACRO, @@ITEMNO は 1 行で記述する必要があります。

例えば、

@@DEFINE Scale 個

@@DEFINE
    Scale 個

は同一と見なされます。

コメント(注釈)

シャープ(#)から改行まではコメントと見なされ、無視されます。

変数

@@DEFINE コマンドの set で変数を定義できます。 内容は文字列等に使用/展開できます。

@DEFINE set my_name MU

数値

コマンド毎の記述のパラメータの一種です。基本的に数字のみ使用可能です。

単位

数値に以下の文字を付け加えると補正計算されます。

%:確率用(*10) k:キロ(*1000) m:分(*60) h:時(*60*60) d:日(*60*60*24)

1d == 1 *60*60*24 == 86400
120m == 120 *60 == 7200
25% == 250

文字列

コマンド毎の記述のパラメータの一種です。 「区切り」以外の文字が使用可能です。 「$変数名」を含めると変数内容が展開されます。

正: 私はMUです
正: 私は$my_nameです
誤: 私は MU です (区切り文字が含まれています)
誤: 私は $my_name です (区切り文字が含まれています)

@@DEFINE

基本データや変数の定義を行います。

基本データとは、商品の基本設定にあたります。 商品データのバージョン表記や、各種設定(陳列棚の維持費設定など)を行います。

また、商品生成に便利な「変数」の定義も可能です。

Set

構文 Set [変数名:文字列(0-9a-zA-Z_)] [変数内容:文字列]

変数設定

設定した変数は@@IFで利用したり文字列に埋め込んだり出来ます。

@@DEFINE Set my_name MU
@@DEFINE Set i_am 私は$my_nameです
@@IF my_name ne MU @@END

Scale

構文 Scale [単位:文字列]

デフォルト単位設定

全商品のデフォルトの数え単位を設定します。

@@DEFINE Scale 個

Type

構文 Type [分類番号:数値(1〜)] [分類名:文字列]

分類定義

商品の分類を定義します。自由に追加可能です。

分類番号 0 は無分類(商品全体)を指す分類になります。

@@DEFINE Type 0 全
@@DEFINE Type 1 分類1
@@DEFINE Type 2 分類2

MaxMoney

構文 MaxMoney [最大金額:数値(1〜)]

資金最大額設定

資金の最大額を設定します。

@@DEFINE MaxMoney 999999
# 最大を\999999に設定

CostShowCase

構文 CostShowCase [棚番号:数値(1〜)] [維持費額:数値(円)]

陳列棚維持費設定

陳列棚維持費の設定です。棚数別に設定できます。

@DEFINE
    CostShowCase 1 1000 # 陳列棚1個時の維持費
    CostShowCase 2 2000 # 陳列棚2個時の維持費
    CostShowCase 3 3000 # 陳列棚3個時の維持費

TimeEditShowCase

構文 TimeEditShowCase [陳列時間:数値(秒)]

陳列時間設定

陳列にかかる時間の設定です。

@DEFINE TimeEditShowCase 10m
# 10分

TimeSendItem

構文 TimeSendItem [商品送付時間:数値(秒)]

送付時間設定

商品送付にかかる時間を設定します。

@DEFINE TimeSendItem 1h
# 1時間

TimeSendMoney

構文 TimeSendMoney [送金時間:数値(秒)]

送金時間設定

送金にかかる時間を設定します。

@DEFINE TimeSendMoney 1.5h
# 1時間30分

TimeUseTimeRate

構文 TimeUseTimeRate [補正率:数値(倍率)]

商品使用時間補正

全ての商品使用時間を一括補正します。

@DEFINE TimeUseTimeRate 0.5
# 全商品の使用時間を0.5倍(1/2)に

Version

構文 Version [バージョン:文字列]

バージョン設定

商品のバージョン設定です。

@DEFINE Version オリジナル商品1.0

特殊キーワードとして、 RCS の $Revision: 1.2 $ を認識します。 その場合は、バージョン記述をダブルクォート("")で囲んでください。

@DEFINE Version "オリジナル $Revision: 1.2 $"
# "オリジナル 1.0" と認識

Job

構文 Job [職業コード:文字列(a-z)10文字以下] [職業名:文字列]

職業設定

職業コードと、対する職業名を設定します。

@DEFINE
    Job fighter 戦士
    Job mage 魔法使い

@@ITEM

商品(商品)の定義を行います。

no

構文 no [番号:数値(1〜)]

商品番号

商品に付けられる番号です。他の商品の番号とは重複出来ません。

番号は 1 から順番に使用してください。 飛び番号等で使われていない番号があると、その分システムに負荷がかかります。

@ITEM no 1

type

構文 type [分類:文字列]

商品分類

@@DEFINETypeで定義した分類を記述します。

@ITEM type 分類1

code

構文 code [コード:文字列(0-9a-zA-Z_)]

商品コード

商品に付けられるコードです。他の商品のコードとは重複出来ません。

@ITEM code test_item

name

構文 name [名称:文字列]

商品名称

商品の名称です。他の商品の名称と重複可能です。

@ITEM name テスト商品

info

構文 info [説明:文字列]

説明

@ITEM info テスト商品の説明です

price

構文 price [価格:数値(円)]

標準価格(\)

@ITEM price 12345

limit

構文 limit [倉庫最大数:数値(個)]/[市場最大数:数値(個)]

倉庫最大数/市場最大数

倉庫に確保できる最大数と、市場に出回る最大数を設定します。

史上最大数の設定は省略可能で、省略した場合は倉庫最大数と同じとみなされます。

市場最大数が正の場合
街全体で「設定値×店舗数(小数切捨)」が最大数となります。店舗数に応じて市場の最大値が変化します。
市場最大数が負の場合
街全体で「-設定値」が最大数となります。店舗数とは無関係に市場の最大数が決まります。
@ITEM limit 10
@ITEM limit 10/5

pop

構文 pop [売れ行き時間:数値(秒)]

売れ行き時間設定

[売れ行き時間]に 1 個売れる確率になります。 ただし、実際の売れ行きはsoldout/_config.cgiの売れ行き率補正設定に左右されます。

@ITEM pop 1h

scale

構文 scale [数え単位:文字列]

数え単位

この設定がない場合は、@@DEFINE Scale が使われます。

@ITEM scale 台

plus

構文 plus [入荷時間:数値(秒)]

市場入荷/減少率

市場在庫の変化を設定します。

[入荷時間]が正の場合
設定時間に1個入荷する確率となります。
[入荷時間]が負の場合
ー設定時間に1個減少する確率となります。
@ITEM plus 10m
@ITEM plus -10m

base

構文 base [基準個数:数値(個)]/[半額個数:数値(個)]

市場での価格変動設定

在庫が基準個数時は標準価格で、半額個数時に半額になる。 その比率で、基準個数以下の場合はプレミアが付く。

@ITEM base 100/2000

cost

構文 cost [維持費:数値(円)]

1 個あたりの維持費額

未設定時は price の 1/10 が自動設定される。

@ITEM cost 100

point

構文 point [補正率:数値(%)]

売却時の人気上昇率補正

100%で± 0 。未設定時は 100%。

@ITEM point 200%

funct _local_

独自関数呼び出し

ターン更新時(デフォルトでは 5 分以上の間隔)に実行される処理を perl で記述できます。

関数定義は、この宣言文の次行から「 _local_ 」が記述されている行までで行います。

「持っているだけでリアルタイムな効果がある商品」や、 「いつのまにか変化している商品(成長等)」が実現できます。 (プレイヤーがログインしていない状況で商品毎の特殊処理が出来るということです)

なお、この方法で定義された関数は、 ターン更新時に毎回実行されますので、 高負荷がかかる処理はお勧めできません。 また、その商品を持っているプレイヤーがいない場合は、処理されません。

処理の際は、前回更新からの経過秒数になる$TIMESPAN を利用できます。 例えば、 1 秒に\1 の収入という効果の場合は、「->{money}+=$TIMESPAN 」と出来ます。 「実際の更新間隔は不定期」なので、時間に応じた処理の場合は注意しましょう。

関数の引数は($ITEM[この商品番号],@DT[この商品を持っているプレイヤーのリスト])です。 戻り値は破棄されます(利用されません)。

package item です。

@@ITEM funct _local_
    my($ITEM,@DT)=@_;
    foreach my $DT (@DT)
    {
        $DT->{money} += $TIMESPAN;
    }
    return;
_local_
# この商品持っていると1秒につき\1資金が増えるという処理

@@USE

商品(@@ITEM)に付加する「商品の使用方法」を定義します。 通常、@@ITEMと組み合わせて記述します。

name

構文 name [使用名:文字列]

使用時名称

@@USE name 使ってみる

price

構文 price [費用:数値(円)]

使用費用

@@USE price 1000

time

構文 time [消費時間:数値(秒)]

熟練度 0%時の商品使用消費時間

@@USE time 4h

exptime

構文 exptime [消費時間:数値(秒)]

熟練度 100%時の商品使用消費時間

@@USE exptime 2h

exp

構文 exp [取得熟練度:数値(%)]

熟練度上昇ポイント

ポイントは商品毎に蓄積されます。

@@USE exp 10%

scale

構文 scale [数え単位:文字列]

使用回数数え単位

@@USE scale 回

info

構文 info [説明:文字列]

説明

@@USE info 使うといいことがあるかもしれません

action

構文 action [行動:文字列]

決定ボタン表示名

@@USE action 使う

arg

構文 arg [パラメータタイプ:文字列]

使用時パラメータ選択

[パラメータタイプ] に target と記述することで、 対象店舗を選択出来るようになり、 商品使用時に呼び出される関数内で $DTS が定義されます。 これには相手店舗の $DT 構造体が格納されています。

[パラメータタイプ] に nocount と記述することで、 使用回数を 1 回に限定することが出来ます。

[パラメータタイプ] に message と記述することで、 商品使用時にコメントを入力できるようになります。 message40 という風に数値を付け加えると、 入力文字数(半角)を制限できます。 デフォルトは 80 文字です。 コメントは、 SJIS に変換後、指定文字数に切り詰められ、 &<>" はエスケープされます。 入力されたコメントは、 func 内で $USE->{arg}->{message} として利用できます。

複数のパラメータタイプを記述したい場合は、「|」で区切ります。

@@USE arg target|nocount|message40

argmessage

構文 argmessage [メッセージ:文字列]

コメント入力説明

arg に message を指定した場合に、入力する内容を説明するためのメッセージです。

@@USE argmessage コメントをどうぞ

okmsg

構文 okmsg [成功メッセージ:文字列]

使用成功時メッセージ

@@USE okmsg 無事成功しました

ngmsg

構文 ngmsg [失敗メッセージ:文字列]

使用失敗時メッセージ

@@USE ngmsg 残念ながら失敗したようです

needexp

構文 needexp [必要熟練度:数値(%)]

必要熟練度設定

実行に必要な熟練度の設定です。設定しない場合は 0% と見なされます。

@@USE needexp 50%

need

構文 need [個数:数値(個)] [商品名:商品名or商品コード]

必要商品設定(消費なし)

@@USE need 10 テスト商品

use

構文 use [個数:数値(個)] [商品名:商品名or商品コード] [消費確率:数値(倍率)] [消費時メッセージ:文字列]

使用商品設定

[消費確率]で商品を消費した場合、[消費時メッセージ]を表示します。

消費時メッセージは省略可能で、消費時メッセージを省略した場合に限り、消費確率も省略できます。 消費確率を省略した場合は、 100%消費するものとみなされます。

@@USE use 10 テスト商品
@@USE use 10 テスト商品 10%
@@USE use 10 テスト商品 10% 消費しました

get

構文 get [個数:数値(個)] [商品名:商品名or商品コード] [取得確率:数値(倍率)] [取得時メッセージ:文字列]

取得商品設定

[取得確率]で商品を取得した場合、[取得時メッセージ]を表示します。

取得時メッセージは省略可能で、取得時メッセージを省略した場合に限り、取得確率も省略できます。 取得確率を省略した場合は、 100%取得するものとみなされます。

@@USE get 10 テスト商品
@@USE get 10 テスト商品 50%
@@USE get 10 テスト商品 50% 手に入れました

func

構文 func [関数名:文字列(0-9a-zA-Z_)]

(書式 1) 独自関数呼び出し

商品を使用したときに独自の処理を行いたい場合使用します 関数定義は @@FUNCITEM で行います。

引数はありませんが、$DT $USE @ITEM $DTS(arg target 時のみ) 等が利用できます。

戻り値は画面に表示される文字列です。 表示されるだけですので、システム上のログに残ることはありません。 ログ(最近の出来事)に残したいときは、soldout/inc/inc-item.cgi に定義されている WriteLog 関数を利用できます。

@@USE func test_func

func _local_

(書式 2) 独自関数呼び出し

商品を使用したときに独自の処理を行いたい場合使用します

関数定義は次行から「 _local_ 」が記述されている行までで行います。 ここで定義された関数は _local_ 番号 という名称になり、 同じ @@ITEM に属する @@USE で再利用できます。 定義番号は、定義された順に _local_1 _local_2 _local_3 となります。

引数や戻り値の扱いは(書式 1)と同じです。

なお、この方法で定義された関数は必要時にしか読み込まれませんので、負荷軽減に繋がります。 package item です。

@@USE func _local_
    $DT->{money} += 1000;
_local_
# 使用すると\1000増える処理

func _local_?

構文 func [ローカル関数名:文字列(0-9a-zA-Z_)]

(書式 3) ローカル関数呼び出し

既に、同じ @@ITEM に属する @@USE func _local_ がある場合に、その関数を呼び出します。 関数名は、定義された順に _local_1 _local_2 となっています。

引数と戻り値の扱いは(書式 1)と同じです。

@@USE func _local_1

param

構文 param [パラメータ:文字列]

独自関数用パラメータ

独自関数へ渡すパラメータです。$USE->{param1} で参照できます。 カンマ(,)で区切ることで最大 4 つまで記述できます。 その場合は $USE->{param2} $USE->{param3} $USE->{param4} で参照できます。

@@USE param 1,100,test,param
# $USE->{param1}='1';
# $USE->{param2}='100';
# $USE->{param3}='test';
# $USE->{param4}='param';

funcb _local_

使用前独自関数呼び出し

商品の使用可否を検査する直前と、使用する「直前」に呼び出される処理を記述します。 動的に$USE の内容を変更できます。

関数定義は次行から「 _local_ 」が記述されている行までで行います。

引数はその@@USEに対応する$USE です。また、$DT には自店のデータが設定されています。

戻り値は 0 or 1 or 2 です。

「特定の条件(資金額など)をクリアしていなければ使用できない」等の処理が可能です。

なお、この方法で定義された関数は必要時にしか読み込まれませんので、負荷軽減に繋がります。 package item です。

@@USE funcb _local_
    my($USE)=@_;
    
    if($DT->{money}<10000)
    {
        return 1;
    }
    elsif($DT->{money}>=100000)
    {
        $USE->{name}.='[所持金が多すぎます]';
        return 2;
    }
    return 0;
_local_
# 資金\10000未満では使用不可
# 資金\100000以上ではメッセージ付きの使用不可

job

構文 job [職業名:文字列] [操作キー名:文字列(0-9a-zA-Z_)] [=+-*/] [設定値::文字列or数値]

職業別設定補正

@@USE内の各種パラメータを職業によって変更することができます。

利用できるキー名が@@USE内のキーになる以外は、@@EVENT param と同じです。詳しくはそちらをご覧下さい。 例外として、操作キー名 times が追加されています。 times は time と exptime の両方を同時操作します。

@@USE job 戦士 price * 10
# 職業が戦士の場合は使用時の費用(price)を10倍

@@EVENT

イベントの定義を行います。

start

構文 start [発動確率:数値(倍率)]

イベント発動確率

24 時間に対してのイベント発動確率です。 ただし、実際にイベントが発動するかどうかは startfunc の結果(戻り値)で最終決定されます。 (startfunc が定義されていない場合は、無条件で発動します。)

0%に設定すると「常に発動します」ので、 startfunc と組み合わせてください。

-1 に設定すると「発動しません」。 商品使用や他のイベントから独自関数経由で発動させたりする場合に有効な設定です。

@@EVENT start 100%
# 1日に1回発動するかもしれない

basetime

構文 basetime [発動期間基本:数値(秒)]

イベント発動期間

イベントが発動したら最低でもこの設定期間は持続します。

ただし、この期間を終了しても、実際にイベントが終了するかどうかは endfunc の結果(戻り値)で最終決定されます。 (endfunc が定義されていない場合は、無条件で終了します。)

@@EVENT basetime 12h
# 発動したら最低でも12時間は持続する

plustime

構文 plustime [発動期間追加:数値(秒)]

イベント発動追加期間

basetime にランダムで 0 〜 plustime(秒) を追加します。

@@EVENT plustime 12h
# 発動期間のバラツキが0〜12時間になる

code

構文 code [コード:文字列(0-9a-zA-Z_)]

コード(イベント毎ユニーク)

@@EVENT code test

group

構文 group [コード:文字列(0-9a-zA-Z_)]

グループコード

グループコードが設定されると、同じグループコードを持つイベントとは同時に発動しません。

例えば、「薬の人気が上がるイベント」と 「薬の人気が下がるイベント」を作成した場合、 共に同じグループコードを設定するとどちらか片方しか発動しないようになります。 グループコードを設定しなければ両方同時に発動する可能性があります。

@@EVENT group test

startmsg

構文 startmsg [開始メッセージ:文字列]

発動開始時のメッセージ

@@EVENT startmsg 発動しました

endmsg

構文 endmsg [終了メッセージ:文字列]

発動終了時のメッセージ

@@EVENT endmsg 終了しました

info

構文 info [発動中メッセージ:文字列]

発動中のメッセージ

@@EVENT info ただいま発動中

startfunc

構文 startfunc [関数名:文字列(0-9a-zA-Z_)] ( [パラメータ:文字列] )

(書式 1) イベント発動条件判断の関数呼び出し

start でイベント発動の際、@@FUNCEVENT で定義した関数を呼び出します。 パラメータは @_ で渡されます。 パラメータは省略できます。 その場合は括弧ごと省略してください。

呼び出された関数では @DT @ITEM が利用できます。

その戻り値が真(!=0)の場合、イベントが発動します。 偽(0)の場合は発動しません。

戻り値がリストで[1]にメッセージがある場合は最近の出来事に出力します。

@@EVENT startfunc test_func('パラメータ')

startfunc _local_

構文 startfunc _local_ ( [パラメータ:文字列] )

(書式 2) イベント発動条件判断の関数呼び出し

イベント発動条件判断の関数を、次行から「 _local_ 」が記述されている行までで行います。 つまり、書式 1 の関数をローカル定義する方法です。その他に違いはありません。

なお、この方法で定義された関数は必要時にしか読み込まれませんので、負荷軽減に繋がります。 package event です。

@@EVENT startfunc _local_ (25,300)
    my($itemno,$rate)=@_;
    
    foreach my $DT (@DT)
    {
        next if !$DT->{item}[$itemno-1];
        next if rand(1000)>$rate;
        $DT->{money}+=100000;
    }
    return 0,'配当がありました';
_local_
# 商品番号25を所持した店舗には
# 30%(300)の確率で資金に+\100000
# イベント自体は発動しない
# (この関数自体がイベントの本体とみなされる)

endfunc

構文 endfunc [関数名:文字列(0-9a-zA-Z_)] ( [パラメータ:文字列] )

(書式 1) イベント終了条件判断の関数呼び出し

basetime+rand(plustime) が経過してイベント終了の際、 @@FUNCEVENT で定義した関数を呼び出します。 パラメータは @_ で渡されます。

その戻り値が真(!=0)の場合、イベントが終了します。偽(0)の場合は終了しません。

戻り値がリストで[1]にメッセージがある場合は最近の出来事に出力します。

@@EVENT endfunc test_func_end('パラメータ')

endfunc _local_

構文 endfunc _local_ ( [パラメータ:文字列] )

(書式 2) イベント終了条件判断の関数呼び出し

startfunc _local_ の endfunc 版です。

なお、この方法で定義された関数は必要時にしか読み込まれませんので、負荷軽減に繋がります。

@@EVENT endfunc _local_ (11)
    my($itemno)=@_;
    foreach my $DT (@DT)
    {
        $DT->{item}[$itemno-1]=0 if $DT->{item}[$itemno-1];
    }
    return 1,'全店舗の'.$ITEM[$itemno-1]->{name}.'が回収されました';
_local_
# 全店舗の商品番号11の所持数を0にし、イベント終了

func

構文 func [関数名:文字列(0-9a-zA-Z_)] ( [パラメータ:文字列] )

(書式 1) ターン処理時関数呼び出し

ターン処理時に呼び出すイベント用関数の設定です。 関数本体は@@FUNCEVENTで定義します。

そのイベントが発動している間のターン処理では、常に呼び出されます。 パラメータは @_ で渡されます。

戻り値は最近の出来事に出力されます。'' や 0 が返された場合は出力しません。

ターン処理は不定期(プレイヤーのアクセス頻度による)なので、 $TIMESPAN 変数から得られる「前回更新時刻からの経過秒数」を頼りにイベント処理を行うといいでしょう。

それ以外は startfunc や endfunc と共通です。

@@EVENT func test_turn(1,2,3,4,5)

func _local_

構文 func _local_ ( [パラメータ:文字列] )

(書式 2) ターン処理時関数呼び出し

startfunc _local_ の func 版です。

なお、この方法で定義された関数は必要時にしか読み込まれませんので、負荷軽減に繋がります。

@@EVENT func _local_(10)
    my($count)=@_;
    my $ret='';
    if(rand(86400)<$TIMESPAN*$count)
    {
        my $idx=int rand(scalar @DT);
        $DT[$idx]->{money}=int $DT[$idx]->{money}/2;
        $ret=$DT[$idx]->{name}.'の所持金が半分になりました';
    }
    return $ret;
_local_
# イベント発動中は、
# 1日に10店舗の確率(割合)で所持金が半分になる
# 対象店舗はランダム

param

構文 param [商品名:商品名or商品コード] [要素名:文字列(0-9a-zA-Z_)] [=+-*/] [設定値:文字列or数値]

商品データの変更(イベント期間中のみ)

イベントが発動中の期間のみ、商品データを一時的に変更します。

param に使用できる[要素名]は @@ITEM のものと同一です。

ただし、 base は [基準個数] を表し、新たに half が [半額個数] を表します。

注意点として、 pop 等は値が売れ行き時間(秒数)なので、売れ行き率を上げたい場合は、値を減少させることになります。

なお、実際には「$ITEM[商品番号]->{要素名}=[設定値];」といったコードになります。 つまり、[設定値]にコードを書くことで多彩な処理が可能です。

@@EVENT param テスト商品 price*10
# イベント期間中はテスト商品の標準価格が10倍

@@INCLUDE

構文 @@INCLUDE "[外部ファイル:文字列]"

外部ファイルを読み込み、soldout/inc/inc-item-data.cgi と同じように解釈/変換します。

読み込みたい外部ファイル名を記述します。 必ずダブルクォートで囲い、 1 行で記述してください。 外部ファイルは custom ディレクトリに置いてください。

@@INCLUDE "add-item.cgi"
# add-item.cgi というファイルを読み込む

@@FUNCITEM

全商品に共通の関数を定義します。

商品使用時に読み込まれます。 soldout/inc/inc-item.cgi から読み込まれる形のファイルとして生成されます。

perlコード記述

perl のコードをそのまま記述します。 @@から始まるコマンドがあると、そこで perl コード記述が終了とみなされます。 ただし、@@ITEMNO は例外です。詳細は後述の@@ITEMNOをご覧下さい。

なお、商品使用時の固有処理は @@USEfunc _local_ にて記述することをお勧めします。 @@FUNCITEM への記述は基本的な処理(汎用ルーチンなど)のみが望ましいです。 @@FUNCITEM への追加は商品使用時の負荷増大に繋がります。注意してください。 以下は perl コード記述の際の注意点です。

package item

package item となりますので、変数/関数スコープ等に注意してください。

関数引数

ありません。 関数内での処理に必要な情報はグローバル変数から取得してください。 ちなみに、$USE には @@USE で定義された各種パラメータが格納されています。

関数戻り値

return "メッセージ:文字列";

としてください。 このメッセージとは、商品を使用したことをユーザに表示するものです。 表示だけですので、システム上のログに残ることはありません。 ログ(最近の出来事)に残したいときは、soldout/inc/inc-item.cgiに定義されている WriteLog 関数を利用できます。

利用可能変数

@DT $DT $DTS $USE @ITEM 等が利用できます。(package item でも読み書きできます)

このファイルは package item ですので、変数や関数のスコープに注意してください。 利用可能変数の詳細は「各種データ変数表」をご覧下さい。

@@FUNCEVENT

全イベントに共通の関数を定義します。

イベントの発動や終了処理時に読み込まれる関数の定義です。 soldout/inc/inc-event.cgi に読み込まれる形のファイルとして生成されます。 構文等は @@FUNCITEM と同じですので、そちらを参照してください。 以下は perl コード記述の際の注意点です。

package event

package event となりますので、変数/関数スコープ等に注意してください。

関数引数

関数の入力引数は @@EVENTstartfunc/endfunc で指定したものです。 関数先頭で my($arg1,$arg2)=@_; とでもして受け取ってください。

関数戻り値

return ( 0 or 1 , "メッセージ" );

としてください。メッセージが不要の場合は、

return 0 or 1;

で結構です。 return 0 は、イベント発動失敗、 return 1 は、イベント発動成功という意味です。 持続系のイベント(品薄イベントなど)の場合は return 1 を返してください。 その場合、soldout/inc/inc-item-data.cgi で指定した時間、イベントが持続します。 単発系(万引きなど)の場合は、関数を実行すればそれで OK ですから、 return 0 です。

メッセージは発動成功失敗に関わらず表示させることが出来ます。 この場合のメッセージとは、「最近の出来事」のメッセージのことです。

使用可能変数

@DT @ITEM 等が利用できます。 ただし、このファイルは package event ですので、自信がない場合は@main::DT 等でアクセスしてください。 利用可能変数の詳細は「各種データ変数表」をご覧下さい。

@@FUNCUPDATE

決算時に実行したい処理や関数を定義します。

決算の直前と直後に読み込まれる関数の定義です。 決算時の定義ファイル読み込み後、 UpdateResetBefore() が決算直前に実行され、 UpdateResetAfter() は決算直後に実行されます。 これらの関数が定義されていなければ処理は行われません。 構文等は @@FUNCITEM と同じですので、そちらを参照してください。

package main

package main となります。

関数引数

ありません。 関数内での処理に必要な情報はグローバル変数から取得してください。

関数戻り値

ありません。

利用可能変数

@DT @ITEM 等が利用できます。

@@FUNCINIT

入店(ログイン)時に実行したい処理や関数を定義します。

ユーザがログインしたときに読み込み実行される関数の定義です。 ユーザの状態(在庫等)に応じて設定を変更する場合などに使用します。 @@FUNCINIT への記述はシステム全体の負荷増大に繋がります。注意してください。 構文等は @@FUNCITEM と同じですので、そちらを参照してください。

package main

package main となります。

関数引数

ありません。 関数内での処理に必要な情報はグローバル変数から取得してください。

関数戻り値

ありません。

利用可能変数

$DT @DT @ITEM 等が利用できます。

@@FUNCBASE

soldout/_base.cgi内の関数をオーバーライドしたい関数や、 システム全体で共用したい関数を定義します。

soldout/_base.cgi の最後で読み込み実行される関数の定義です。 soldout/_base.cgi 内の関数オーバーライド等に使用します。 @@FUNCBASE への記述はシステム全体の負荷増大に繋がります。注意してください。 構文等は @@FUNCITEM と同じですので、そちらを参照してください。

package main

package main となります。

関数引数

ありません。 関数内での処理に必要な情報はグローバル変数から取得してください。

関数戻り値

ありません。

利用可能変数

システム初期化時に処理されますので、ありません。

@@FUNCTURN

ターン更新時に実行される処理や関数を定義します。

ターン更新時の @@ITEM funct _local_ を処理する直前に読み込み/実行される処理や関数の定義です。 @@ITEM funct _local_ で使用される共通関数の定義等に利用できます。 @@FUNCTURN への記述はターン更新時の負荷増大に繋がります。注意してください。 構文等は @@FUNCITEM と同じですので、そちらを参照してください。

package main

package main となります。

関数引数

ありません。 関数内での処理に必要な情報はグローバル変数から取得してください。

関数戻り値

ありません。

利用可能変数

@DT @ITEM 等が利用できます。

@@FUNCCUSTOM

カスタムページsoldout/custom.cgi用の処理や関数を定義します。

soldout/custom.cgiへのアクセス時にこの定義が読み込まれ、 定義された CustomPageInit(command) を実行し、 その後 CustomPage_command() を実行します。

command は、「 custom.cgi?cmd=command 」で渡されます。 例えば、「 custom.cgi?cmd=test 」というリクエストがあった場合は、 CustomPageInit('test') CustomPage_test() が実行されます。 これらの関数が定義されていなければ処理は行われません。

note:command は英小文字(a-z)とアンダースコア(_)で構成され、数字は利用できません。

HTML 出力はグローバル変数の $disp へ追加してください。

各関数で return 0 を行うと、カスタムページの処理を中断し、 return 1 で処理を続行します。

また、 return 'command' で、引き続きその command を実行します。(最高 10 回まで)

sub CustomPageInit
{
    my($command)=@_;
    $command||='main';
    return $command;
}
sub CustomPage_main
{
    $disp.="main,";
    return 1;
}
sub CustomPage_sub
{
    $disp.="sub,";
    return 'main';
}
sub CustomPage_another
{
    $disp.="another,";
    return 1;
}
# http://....../soldout/custom.cgi の結果
# main,
#
# http://....../soldout/custom.cgi?cmd=main の結果
# main,
#
# http://....../soldout/custom.cgi?cmd=sub の結果
# sub,main,
#
# http://....../soldout/custom.cgi?cmd=another の結果
# another,

構文等は @@FUNCITEM と同じですので、そちらを参照してください。

package main

package main となります。

関数引数

ありません。 関数内での処理に必要な情報はグローバル変数から取得してください。

関数戻り値

ありません。

利用可能変数

@DT @ITEM 等が利用できます。

@@IF

構文 @@IF [変数名:文字列(0-9a-zA-Z_)] [比較方法:== != eq ne] [比較値:文字列or数値] [条件が真の場合のコンバートデータ]

条件コンバート用のコマンドです。

変数を比較し、条件を満たした場合のみコンバートすることが出来ます。 ただし、コンバート可能なのはその行のみです。複数行の指定は不可です。

変数名
@@DEFINE Set で定義された変数の名前を指定します。
比較方法
変数と比較値の比較方法を記述します。
比較値
比較する文字列もしくは数値を記述します。変数は使用できません。
条件が真の場合のコンバートデータ
条件を満たした場合にコンバートするデータ(記述)です。 通常の記述が可能ですが、1行で記述する必要があります。

@@SETMACRO

構文 @@SETMACRO [マクロ名:文字列(0-9a-zA-Z_)] "[マクロ内容]"

soldout/inc/inc-item-data.cgi内で利用するマクロを定義するコマンドです。

よく使う記述をマクロとして定義できます。マクロの使用は後述の @@USEMACRO で行います。

マクロ名
マクロの名称を記述します。(使用可能文字 0-9A-Za-z_ )
マクロ内容
マクロの内容データ(記述)です。 通常の記述が可能です。 必ずダブルクォートで囲い、1行で記述してください。

@@USEMACRO

構文 @@USEMACRO [マクロ名:文字列(0-9a-zA-Z_)]

@@SETMACROで定義したマクロを使用するコマンドです。

マクロ名
使用するマクロの名称を記述します。

@@ITEMNO

構文 @@ITEMNO "[商品名]:商品名or商品コード"

商品名を商品番号に変換するコマンドです。

特殊なコマンドです。 このコマンドは @@FUNC* 内で「商品番号の記述が必要だが商品名で記述したい」場合に使用します。 このコマンドが見つかると、商品名が商品番号に変換され、コマンド自体が商品番号に置き換えられます。

"商品名"
商品番号に変換したい商品名を記述します。 必ずダブルクォートで囲い、1行で記述してください。

@@END

soldout/inc/inc-item-data.cgiの記述終了を示すコマンドです。 このコマンド以降は無視され、コンバートを終了します。


総合目次 > カスタマイズ目次 > 商品データ記述文法