//============================================================================== // 無人露天NPC by はにわ 2009/08/31 ver1.00 //============================================================================== //ものすごい人柱仕様 //排他処理はしてるけど複数人での同時処理テストなんて出来ないのでやってません //現在はAurigaでのみ使用可能 //(item_dbの指定とselectの部分を直せばAthenaでも使用可能になるはず) //============================================================================== - script 無人露天 837,{ //-------------------------------------------------------------------------- //露天情報CSV読み込み // 引数 なし // 結果 @di$[] :露天情報 添数1:列定義No //-------------------------------------------------------------------------- function ReadInfoCsv { //露天情報CSVをNPC識別子で検索 set '@row,csvfind('fi$,'CI_NPCID,strnpcinfo(3)); //露天情報を取得する csvreadarray 'fi$,'@row,@di$; } //-------------------------------------------------------------------------- //商品情報CSV読み込み // 引数 なし // 結果 @row_max :商品数 // @dm[][] :商品情報 添数1:商品No(0〜XX) 添数2:列定義No //-------------------------------------------------------------------------- function ReadMarketCsv { //商品情報CSVの行数を取得 set @row_max,csvgetrows(@fm$); //商品情報CSVを末尾まで読み込み for( set '@row,0; '@row < @row_max; set '@row,'@row+1 ) { //指定行を読み込み csvreadarray @fm$,'@row,'@dc; //商品配列へ読み込みデータを格納 copyarray @dm['@row][0],'@dc[0],'CMS_CNT; } } //-------------------------------------------------------------------------- //CSV更新ロックを掛ける // 引数 getarg(0) :ロック対象(0:露天/商品情報 1:売上情報) // getarg(1) :アカウントID/NPC識別子 // 結果 'lock_im$ :露天/商品情報ロックフラグ // 'lock_s$ :売上情報ロックフラグ //-------------------------------------------------------------------------- function Lock { set '@flg,getarg(0); set '@aid$,getarg(1) + ""; if ('@flg == 0) { //10秒間だけロックを掛けられるか試みる(100ms * 100回) for( set '@i,0; '@i < 100; set '@i,'@i+1 ) { //ロックされていなければロックする if ('lock_im$ == "0") { set 'lock_im$,'@aid$; } sleep2 100; //ロックしたユーザが自身のアカウントIDであるならロック成功 if ('lock_im$ == '@aid$) { break; } } } else if ('@flg == 1) { //10秒間だけロックを掛けられるか試みる(100ms * 100回) for( set '@i,0; '@i < 100; set '@i,'@i+1 ) { //ロックされていなければロックする if ('lock_s$ == "0") { set 'lock_s$,'@aid$; } sleep2 100; //ロックしたユーザが自身のアカウントIDであるならロック成功 if ('lock_s$ == '@aid$) { break; } } } } //-------------------------------------------------------------------------- //CSV更新ロックを解除する // 引数 getarg(0) :ロック対象(0:露天/商品情報 1:売上情報) // 結果 'lock_im$ :露天/商品情報ロックフラグ // 'lock_s$ :売上情報ロックフラグ //-------------------------------------------------------------------------- function UnLock { set '@flg,getarg(0); if ('@flg == 0) { set 'lock_im$,"0"; } else if ('@flg == 1) { set 'lock_s$,"0"; } } //-------------------------------------------------------------------------- //アイテム追加 // 引数 なし // 結果 商品情報CSVへアイテムを追加 // カートからアイテムを削除 // @cancel :キャンセルフラグ(0:正常終了 1:キャンセル) //-------------------------------------------------------------------------- function SetItem { //PCのカート内のアイテムデータを取得 getcartlist; //アイテム選択肢を作成 set '@sel_list$,""; for( set @i,0; @i < @cartlist_count; set @i,@i+1 ) { set '@item_name$,""; if (@cartlist_refine[@i] >= 1) { set '@item_name$,"+" + @cartlist_refine[@i]; } set '@item_name$,'@item_name$ + getitemname(@cartlist_id[@i]); if (@cartlist_card4[@i] > 0) { set '@item_name$,'@item_name$ + "(4枚差)"; } else if (@cartlist_card3[@i] > 0) { set '@item_name$,'@item_name$ + "(3枚差)"; } else if (@cartlist_card2[@i] > 0) { set '@item_name$,'@item_name$ + "(2枚差)"; } else if (@cartlist_card1[@i] > 0) { set '@item_name$,'@item_name$ + "(1枚差)"; } if (@cartlist_identify[@i] == 0) { set '@item_name$,'@item_name$ + "(未鑑定)"; } if (@cartlist_attribute[@i] == 1) { set '@item_name$,'@item_name$ + "(破損)"; } set '@item_name$,'@item_name$ + " " + @cartlist_amount[@i] + "個"; set '@sel_list$,'@sel_list$ + '@item_name$ + ":"; } set '@sel_list$,'@sel_list$ + "もどる"; mes "[無人露天]"; mes "陳列するアイテムを選択して下さい。"; next; //PCにアイテムを選択させる switch (select('@sel_list$)) { default: //選択項目が"アイテム名"の場合 if (@menu <= @cartlist_count) { //未鑑定の場合は拒否 if (@cartlist_identify[@menu-1] == 0) { mes "[無人露天]"; mes "未鑑定のアイテムは陳列できません。"; next; break; } //破損している場合は拒否 if (@cartlist_identify[@menu-1] == 0) { mes "[無人露天]"; mes "破損したアイテムは陳列できません。"; next; break; } //個数が2以上の場合は個数入力 if (@cartlist_amount[@menu-1] >= 2) { //PCに預け入れ個数を入力させる mes "[無人露天]"; mes "個数を入力して下さい。"; mes "(1個〜" + @cartlist_amount[@menu-1] + "個)"; next; //入力値が正しくなるまでループする while (1) { input @item_num; //入力値チェック if (@item_num < 1) { mes "[無人露天]"; mes "1個以上にして下さい。"; mes "(1個〜" + @cartlist_amount[@menu-1] + "個)"; next; } else if (@item_num > @cartlist_amount[@menu-1]) { mes "[無人露天]"; mes @cartlist_amount[@menu-1] + "個以下にして下さい。"; mes "(1個〜" + @cartlist_amount[@menu-1] + "個)"; next; } else { break; } } //個数が1の場合 } else { set @item_num,1; } //販売価格を入力させる mes "[無人露天]"; mes "販売価格を入力して下さい。"; mes "(1z〜" + 'item_price_max + "z)"; next; //入力値が正しくなるまでループする while (1) { input @item_price; //入力値チェック if (@item_price < 1) { mes "[無人露天]"; mes "1z以上にして下さい。"; next; } else if (@item_price > 'item_price_max) { mes "[無人露天]"; mes 'item_price_max + "z以下にして下さい。"; next; } else { break; } } //item_dbから詳細情報を取得 set @row,csvfind('fitdb$,'ITDB_ID,@cartlist_id[@menu-1]); csvreadarray 'fitdb$,@row,@id; //売り物データCSVの行数を取得 set @row,csvgetrows(@fm$); //CSV書き込みデータ作成 set @dc['CMS_AID],@aid; set @dc['CMS_AIDNO],@row+1; set @dc['CMS_ITEM_ID],@cartlist_id[@menu-1]; set @dc['CMS_PRICE],@item_price; set @dc['CMS_ZAIKO],@item_num; set @dc['CMS_HANBAI],0; set @dc['CMS_ITEM_REF],@cartlist_refine[@menu-1]; set @dc['CMS_CARD1],@cartlist_card1[@menu-1]; set @dc['CMS_CARD2],@cartlist_card2[@menu-1]; set @dc['CMS_CARD3],@cartlist_card3[@menu-1]; set @dc['CMS_CARD4],@cartlist_card4[@menu-1]; set @dc['CMS_LIMIT],@cartlist_limit[@menu-1]; set @dc['CMS_TYPE],@id['ITDB_TYPE]; set @dc['CMS_WEIGHT],@id['ITDB_WEIGHT]/10; set @dc['CMS_ATK],@id['ITDB_ATK]; set @dc['CMS_DEF],@id['ITDB_DEF]; set @dc['CMS_SLOT],@id['ITDB_SLOT]; set @dc['CMS_JOB],@id['ITDB_JOB]; set @dc['CMS_GENDER],@id['ITDB_GENDER]; set @dc['CMS_LOC],@id['ITDB_LOC]; set @dc['CMS_WLV],@id['ITDB_WLV]; set @dc['CMS_ELV],@id['ITDB_ELV]; set @dc['CMS_REFINE],@id['ITDB_REFINE]; //カートのアイテムを操作されていないかチェック // 不正対策だがそもそもNPC処理中はカート内アイテムを操作できない様子 // 念のため機能は有効にしておくがテストは出来ていない if (@dc['CMS_ITEM_ID] != @cartlist_id[@menu-1]) { set '@fail,1; } else if (@dc['CMS_ZAIKO] > @cartlist_amount[@menu-1]) { set '@fail,1; } else if (@dc['CMS_ITEM_REF] != @cartlist_refine[@menu-1]) { set '@fail,1; } else if (@dc['CMS_CARD1] != @cartlist_card1[@menu-1]) { set '@fail,1; } else if (@dc['CMS_CARD2] != @cartlist_card2[@menu-1]) { set '@fail,1; } else if (@dc['CMS_CARD3] != @cartlist_card3[@menu-1]) { set '@fail,1; } else if (@dc['CMS_CARD4] != @cartlist_card4[@menu-1]) { set '@fail,1; } else if (@dc['CMS_LIMIT] != @cartlist_limit[@menu-1]) { set '@fail,1; } else { set '@fail,0; } //カートのアイテムに変更がない場合 if ('@fail == 0) { //ロック Lock 0,@aid; if ('lock_im$ == @aid + "") { //PCのカートからアイテムを削除 delcartitem2 @cartlist_index[@menu-1],@item_num; //CSV書き込み csvwritearray @fm$,@row,@dc; //CSV確定 csvflush @fm$; //ロック解除 Unlock 0; //キャンセルフラグを下ろす set @cancel,0; } else { mes "[無人露天]"; mes "混雑しているため処理が"; mes "キャンセルされました。"; next; set @cancel,1; } //カートのアイテムが変更されている場合 } else { mes "[無人露天]"; mes "カート内のアイテムが変化しています。"; next; set @cancel,1; } //選択項目が"もどる"の場合 } else { //キャンセルフラグを立てておく set @cancel,1; } break; } } //-------------------------------------------------------------------------- //販売中のアイテムから1つ選ぶ // 引数 なし // 結果 @sel_no :選択結果(-1:もどる、0〜:販売アイテム) //-------------------------------------------------------------------------- function SelectMarketItem { //選択肢用文字列を初期化 set '@sel_list$,""; mes "[無人露天]"; mes "商品を選んで下さい。"; //商品配列から商品情報の文字列を作成 for( set '@row,0; '@row < @row_max; set '@row,'@row+1 ) { //文字列を初期化 set '@row_data$,""; //No set @no,'@row + 1; set '@row_data$,'@row_data$ + "No." + @no + " "; set '@sel_list$,'@sel_list$ + "No." + @no + " "; //精錬値 if (@dm['@row]['CMS_ITEM_REF] >= 1) { set '@row_data$,'@row_data$ + "+" + @dm['@row]['CMS_ITEM_REF]; } //アイテム名 set '@row_data$,'@row_data$ + getitemname(@dm['@row]['CMS_ITEM_ID]); set '@sel_list$,'@sel_list$ + getitemname(@dm['@row]['CMS_ITEM_ID]); //刺さっているカード数 if (@dm['@row]['CMS_CARD4] > 0) { set '@row_data$,'@row_data$ + "(4枚差)"; } else if (@dm['@row]['CMS_CARD3] > 0) { set '@row_data$,'@row_data$ + "(3枚差)"; } else if (@dm['@row]['CMS_CARD2] > 0) { set '@row_data$,'@row_data$ + "(2枚差)"; } else if (@dm['@row]['CMS_CARD1] > 0) { set '@row_data$,'@row_data$ + "(1枚差)"; } //在庫ありの場合 if (@dm['@row]['CMS_ZAIKO] >= 1) { //在庫数 set '@row_data$,'@row_data$ + " " + @dm['@row]['CMS_ZAIKO] + "個"; //販売価格 // 0以上 水色 // 10以上 紫 // 100以上 鮮やかな青 // 1000以上 オレンジ // 10000以上 ピンク // 100000以上 青 // 1000000以上 緑 // 10000000以上 赤 //100000000以上 茶 if (@dm['@row]['CMS_PRICE] < 10) { set '@row_data$,'@row_data$ + " ^0040ff"; } else if (@dm['@row]['CMS_PRICE] < 100) { set '@row_data$,'@row_data$ + " ^cf00cf"; } else if (@dm['@row]['CMS_PRICE] < 1000) { set '@row_data$,'@row_data$ + " ^0000ff"; } else if (@dm['@row]['CMS_PRICE] < 10000) { set '@row_data$,'@row_data$ + " ^ed6821"; } else if (@dm['@row]['CMS_PRICE] < 100000) { set '@row_data$,'@row_data$ + " ^ff17ff"; } else if (@dm['@row]['CMS_PRICE] < 1000000) { set '@row_data$,'@row_data$ + " ^0000ff"; } else if (@dm['@row]['CMS_PRICE] < 10000000) { set '@row_data$,'@row_data$ + " ^00ff00"; } else if (@dm['@row]['CMS_PRICE] < 100000000) { set '@row_data$,'@row_data$ + " ^ff0000"; } else { set '@row_data$,'@row_data$ + " ^d87c32"; } set '@row_data$,'@row_data$ + @dm['@row]['CMS_PRICE] + "^000000z"; //在庫数0&販売数1以上の場合 } else if (@dm['@row]['CMS_HANBAI] >= 1) { set '@row_data$,'@row_data$ + " " + "^ff0000売り切れ^000000"; //在庫数0&販売数0(回収済み)の場合 } else { set '@row_data$,'@row_data$ + " " + "^008000取り下げ^000000"; } //商品情報を表示 mes '@row_data$; //選択肢用に":"を追加 set '@sel_list$,'@sel_list$ + ":"; } set '@sel_list$,'@sel_list$ + "もどる"; next; //PCにアイテムを選択させる switch (select('@sel_list$)) { default: if (@menu == @row_max + 1) { set @sel_no,-1; } else { set @sel_no,@menu - 1; } break; } } //-------------------------------------------------------------------------- //商品配列にあるアイテムを回収する // 引数 getarg(0) :商品No // 結果 @seisan_cancel :キャンセルフラグ(0:正常終了 1:キャンセル) //-------------------------------------------------------------------------- function RemoveItem { // 重量上限、100種類上限、個数上限に引っかかる場合はアイテムが床に落ちる // 所持金上限に引っかかる場合は余剰分が虚空に消える set '@no,getarg(0); //清算キャンセルフラグをOFFにする set @seisan_cancel,0; //在庫数が1以上の場合はインベントリへ戻す if (@dm['@no]['CMS_ZAIKO] >= 1) { //アイテムをPCのインベントリに作成 getitem2 @dm['@no]['CMS_ITEM_ID],@dm['@no]['CMS_ZAIKO],1,@dm['@no]['CMS_ITEM_REF],0,@dm['@no]['CMS_CARD1],@dm['@no]['CMS_CARD2],@dm['@no]['CMS_CARD3],@dm['@no]['CMS_CARD4],@dm['@no]['CMS_LIMIT]; //在庫数を0にする set @dm['@no]['CMS_ZAIKO],0; } //販売数が1以上の場合は売上金を所持金へ加算する if (@dm['@no]['CMS_HANBAI] >= 1) { //以下の組み合わせで売上金が1,000,000,000を超えてしまう可能性が出てくるので //1個ずつ処理するようにする //1000000000z * 1個以上 //100000000z * 10個以上 //10000000z * 100個以上 //1000000z * 1000個以上 //100000z * 10000個以上 if (@dm['@no]['CMS_PRICE] >= 1000000000) { set '@syori_num,1; } else if (@dm['@no]['CMS_PRICE] >= 100000000 && @dm['@no]['CMS_HANBAI] >= 10) { set '@syori_num,1; } else if (@dm['@no]['CMS_PRICE] >= 10000000 && @dm['@no]['CMS_HANBAI] >= 100) { set '@syori_num,1; } else if (@dm['@no]['CMS_PRICE] >= 1000000 && @dm['@no]['CMS_HANBAI] >= 1000) { set '@syori_num,1; } else if (@dm['@no]['CMS_PRICE] >= 100000 && @dm['@no]['CMS_HANBAI] >= 10000) { set '@syori_num,1; } else { set '@syori_num,@dm['@no]['CMS_HANBAI]; } //未清算の販売数が残っている限りループする while (@dm['@no]['CMS_HANBAI] >= 1) { set '@uriage,@dm['@no]['CMS_PRICE] * '@syori_num; //所持金との合計が1,000,000,000を超えないなら清算 if (zeny + '@uriage <= 1000000000) { //売上金をPCに渡す set zeny,zeny + '@uriage; //販売数から清算した個数を引く set @dm['@no]['CMS_HANBAI],@dm['@no]['CMS_HANBAI] - '@syori_num; //所持金との合計が1,000,000,000を超えるなら清算未実施フラグをONにする } else { set @seisan_cancel,1; break; } } } } //-------------------------------------------------------------------------- //アイテム装備可能JOB一覧作成 // 引数 getarg(0) :装備可能JOB(数字) // 結果 @job_list$:装備可能JOB(文字列) //-------------------------------------------------------------------------- function GetUserList { set '@job,getarg(0); set @job_list$,""; if ('@job == 195026943 || '@job == 1000333311) { set @job_list$,@job_list$ + "全職"; } else if ('@job == 186638334) { set @job_list$,@job_list$ + "ノービス以外"; } else if ('@job == 2088832) { set @job_list$,@job_list$ + "二次職"; } else if ('@job == 35643264) { set @job_list$,@job_list$ + "二次職 拳聖"; } else { if ('@job & 1) { set @job_list$,@job_list$ + "ノービス "; } if ('@job & 2) { set @job_list$,@job_list$ + "剣士 "; } if ('@job & 4) { set @job_list$,@job_list$ + "マジシャン "; } if ('@job & 8) { set @job_list$,@job_list$ + "アーチャー "; } if ('@job & 16) { set @job_list$,@job_list$ + "アコライト "; } if ('@job & 32) { set @job_list$,@job_list$ + "商人 "; } if ('@job & 64) { set @job_list$,@job_list$ + "盗賊 "; } if ('@job & 128) { set @job_list$,@job_list$ + "騎士 "; } if ('@job & 256) { set @job_list$,@job_list$ + "プリースト "; } if ('@job & 512) { set @job_list$,@job_list$ + "ウィザード "; } if ('@job & 1024) { set @job_list$,@job_list$ + "ブラックスミス "; } if ('@job & 2048) { set @job_list$,@job_list$ + "ハンター "; } if ('@job & 4096) { set @job_list$,@job_list$ + "アサシン "; } if ('@job & 16384) { set @job_list$,@job_list$ + "クルセイダー "; } if ('@job & 32768) { set @job_list$,@job_list$ + "モンク "; } if ('@job & 65536) { set @job_list$,@job_list$ + "セージ "; } if ('@job & 131072) { set @job_list$,@job_list$ + "ローグ "; } if ('@job & 262144) { set @job_list$,@job_list$ + "アルケミスト "; } if ('@job & 524288) { set @job_list$,@job_list$ + "バード "; } if ('@job & 1048576) { set @job_list$,@job_list$ + "ダンサー "; } if ('@job & 8388608) { set @job_list$,@job_list$ + "スーパーノービス "; } if ('@job & 16777216) { set @job_list$,@job_list$ + "テコン "; } if ('@job & 33554432) { set @job_list$,@job_list$ + "拳聖 "; } if ('@job & 134217728) { set @job_list$,@job_list$ + "ソウルリンカー "; } if ('@job & 268435456) { set @job_list$,@job_list$ + "ガンスリンガー "; } if ('@job & 536870912) { set @job_list$,@job_list$ + "忍者 "; } if (@job_list$ == "") { set @job_list$,"不明"; } } } //-------------------------------------------------------------------------- //アイテム装備箇所作成 // 引数 getarg(0) :装備箇所(数字) // 結果 @loc_name$:装備箇所(文字列) //-------------------------------------------------------------------------- function GetLocName { set '@loc,getarg(0); set @loc_name$,""; if ('@loc == 256) { set @loc_name$,"系列:兜 位置:上段"; } else if ('@loc == 512) { set @loc_name$,"系列:兜 位置:中段"; } else if ('@loc == 1) { set @loc_name$,"系列:兜 位置:下段"; } else if ('@loc == 256+512+1) { set @loc_name$,"系列:兜 位置:上中下段"; } else if ('@loc == 512+256) { set @loc_name$,"系列:兜 位置:上中段"; } else if ('@loc == 4) { set @loc_name$,"系列:肩にかける物"; } else if ('@loc == 16) { set @loc_name$,"系列:鎧"; } else if ('@loc == 32) { set @loc_name$,"系列:盾"; } else if ('@loc == 64) { set @loc_name$,"系列:靴"; } else if ('@loc == 8 || '@loc == 128 || '@loc == 8+128) { set @loc_name$,"系列:アクセサリ"; } else { set @loc_name$,"系列:不明"; } } //-------------------------------------------------------------------------- //アイテム詳細表示 // 引数 getarg(0) :表示アイテムNo //-------------------------------------------------------------------------- function ShowItemDetail { set '@show_no,getarg(0); set @item_id,@dm['@show_no]['CMS_ITEM_ID]; set @type,@dm['@show_no]['CMS_TYPE]; set @job,@dm['@show_no]['CMS_JOB]; set @loc,@dm['@show_no]['CMS_LOC]; set @job_list$,""; mes "[無人露天]"; mes getitemname(@item_id); //回復剤の場合 if (@type == 0) { mes "回復剤"; mes "重量:" + @dm['@show_no]['CMS_WEIGHT]; //消耗品の場合 } else if (@type == 2) { mes "消耗品"; mes "重量:" + @dm['@show_no]['CMS_WEIGHT]; //収集品の場合 } else if (@type == 3) { mes "収集品"; mes "重量:" + @dm['@show_no]['CMS_WEIGHT]; //武器の場合 } else if (@type == 4) { if (@item_id >= 1100 && @item_id <= 1149) { mes "系列:片手剣"; } else if (@item_id >= 1150 && @item_id <= 1199) { mes "系列:両手剣"; } else if (@item_id >= 1200 && @item_id <= 1249) { mes "系列:短剣"; } else if (@item_id >= 1250 && @item_id <= 1299) { mes "系列:カタール"; } else if (@item_id >= 1300 && @item_id <= 1349) { mes "系列:片手斧"; } else if (@item_id >= 1350 && @item_id <= 1399) { mes "系列:両手斧"; } else if (@item_id >= 1400 && @item_id <= 1449) { mes "系列:片手槍"; } else if (@item_id >= 1450 && @item_id <= 1499) { mes "系列:両手槍"; } else if (@item_id >= 1500 && @item_id <= 1549) { mes "系列:鈍器"; } else if (@item_id >= 1550 && @item_id <= 1599) { mes "系列:本"; } else if (@item_id >= 1600 && @item_id <= 1649) { mes "系列:杖"; } else if (@item_id >= 1700 && @item_id <= 1749) { mes "系列:弓"; } else if (@item_id >= 1750 && @item_id <= 1799) { mes "系列:矢"; } else if (@item_id >= 1800 && @item_id <= 1849) { mes "系列:ナックル"; } else if (@item_id >= 1900 && @item_id <= 1949) { mes "系列:楽器"; } else if (@item_id >= 1950 && @item_id <= 1999) { mes "系列:鞭"; } else { mes "系列:不明"; } mes "攻撃:" + @dm['@show_no]['CMS_ATK] + " 重量:" + @dm['@show_no]['CMS_WEIGHT]; mes "スロット数:" + @dm['@show_no]['CMS_SLOT] + " 精錬値:" + @dm['@show_no]['CMS_ITEM_REF]; if (@dm['@show_no]['CMS_ELV] == 0) { mes "武器レベル:" + @dm['@show_no]['CMS_WLV] + " 要求レベル:無し"; } else { mes "武器レベル:" + @dm['@show_no]['CMS_WLV] + " 要求レベル:" + @dm['@show_no]['CMS_ELV]; } if (@dm['@show_no]['CMS_GENDER] == 0) { mes "(男性限定)"; } else if (@dm['@show_no]['CMS_GENDER] == 1) { mes "(女性限定)"; } if (@dm['@show_no]['CMS_CARD1] != 0) { mes "スロット1:" + getitemname(@dm['@show_no]['CMS_CARD1]); } if (@dm['@show_no]['CMS_CARD2] != 0) { mes "スロット2:" + getitemname(@dm['@show_no]['CMS_CARD2]); } if (@dm['@show_no]['CMS_CARD3] != 0) { mes "スロット3:" + getitemname(@dm['@show_no]['CMS_CARD3]); } if (@dm['@show_no]['CMS_CARD4] != 0) { mes "スロット4:" + getitemname(@dm['@show_no]['CMS_CARD4]); } GetUserList @dm['@show_no]['CMS_JOB]; mes "装備:" + @job_list$; //防具の場合 } else if (@type == 5) { GetLocName @dm['@show_no]['CMS_LOC]; mes @loc_name$; mes "防御:" + @dm['@show_no]['CMS_DEF] + " 重量:" + @dm['@show_no]['CMS_WEIGHT]; mes "スロット数:" + @dm['@show_no]['CMS_SLOT] + " 精錬値:" + @dm['@show_no]['CMS_ITEM_REF]; if (@dm['@show_no]['CMS_ELV] == 0) { mes "要求レベル:無し"; } else { mes "要求レベル:" + @dm['@show_no]['CMS_ELV]; } if (@dm['@show_no]['CMS_GENDER] == 0) { mes "(男性限定)"; } else if (@dm['@show_no]['CMS_GENDER] == 1) { mes "(女性限定)"; } if (@dm['@show_no]['CMS_CARD1] != 0) { mes "スロット1:" + getitemname(@dm['@show_no]['CMS_CARD1]); } if (@dm['@show_no]['CMS_CARD2] != 0) { mes "スロット2:" + getitemname(@dm['@show_no]['CMS_CARD2]); } if (@dm['@show_no]['CMS_CARD3] != 0) { mes "スロット3:" + getitemname(@dm['@show_no]['CMS_CARD3]); } if (@dm['@show_no]['CMS_CARD4] != 0) { mes "スロット4:" + getitemname(@dm['@show_no]['CMS_CARD4]); } GetUserList @dm['@show_no]['CMS_JOB]; mes "装備:" + @job_list$; //カードの場合 } else if (@type == 6) { mes "カード"; mes "重量:" + @dm['@show_no]['CMS_WEIGHT]; GetLocName @dm['@show_no]['CMS_LOC]; mes @loc_name$; //ペットの卵の場合 } else if (@type == 7) { mes "ペットの卵"; mes "重量:" + @dm['@show_no]['CMS_WEIGHT]; //ペット専用装備の場合 } else if (@type == 8) { mes "ペット専用装備"; mes "重量:" + @dm['@show_no]['CMS_WEIGHT]; //矢の場合 } else if (@type == 10) { mes "矢"; mes "攻撃:" + @dm['@show_no]['CMS_ATK] + " 重量:" + @dm['@show_no]['CMS_WEIGHT]; //弾丸の場合 } else if (@type == 10) { mes "弾丸"; mes "攻撃:" + @dm['@show_no]['CMS_ATK] + " 重量:" + @dm['@show_no]['CMS_WEIGHT]; //苦無の場合 } else if (@type == 10) { mes "苦無"; mes "攻撃:" + @dm['@show_no]['CMS_ATK] + " 重量:" + @dm['@show_no]['CMS_WEIGHT]; //強化装備アイテムの箱の場合 } else if (@type == 10) { mes "強化装備アイテムの箱"; mes "重量:" + @dm['@show_no]['CMS_WEIGHT]; } else { mes "不明"; } } //-------------------------------------------------------------------------- //露天を閉店する // 引数 なし // 結果 露天情報CSVを初期化 // 売上情報CSVに商品情報CSVの内容をコピー // 商品情報CSVをクリア //-------------------------------------------------------------------------- function AutoClose { //露天情報CSVをNPC識別子で検索 set '@row_i,csvfind('fi$,'CI_NPCID,strnpcinfo(3)); //露天情報を取得 csvreadarray 'fi$,'@row_i,'@di; //露天情報CSVの該当行を初期化 set '@di$['CI_AID],"0"; set '@di$['CI_NPCID],strnpcinfo(3); set '@di$['CI_OC_FLG],"0"; set '@di$['CI_LIMIT],"0"; set '@di$['CI_TITLE],""; //露天情報CSVへ書き込み csvwritearray 'fi$,'@row_i,'@di$; csvflush 'fi$; //商品情報CSV set '@fm$,strnpcinfo(3); //商品情報CSVの行数だけループ while ( csvgetrows('@fm$) ) { //商品情報CSVの先頭行を取得 csvreadarray '@fm$,0,'@dm; //売上情報CSVの行数を取得 set '@row_s,csvgetrows('fs$); //商品情報を売上情報CSVに書き込み csvwritearray 'fs$,'@row_s,'@dm; //商品情報CSVの先頭行を削除 csvdelete '@fm$,0; } csvflush '@fm$; csvflush 'fs$; //チャットルームを閉じる delwaitingroom; } //------------------------------------------------------------------------------------------------ //チャットルーム入室処理(使用不可) // チャットルーム入室でのNPCアクセス // 使用不可の理由 // 複数人がアクセスするとアタッチ対象が切り替わってしまうため動作がおかしくなる。 // さらに、NPC処理中に他NPCやチャットルームにアクセスできるので様々なケースへの対応が必要になる。 //------------------------------------------------------------------------------------------------ //OnChatEvent: // getwaitingpcid 'da; // if ('da[0] > 0) { // attachrid 'da[0]; // kickwaitingroomall; // } //-------------------------------------------------------------------------- //メイン処理 //-------------------------------------------------------------------------- L_MAIN: //呼び出したPCのキャラIDを取得 set @cid,getcharid(0); //呼び出したPCのアカウントIDを取得 set @aid,getcharid(3); //商品情報CSV set @fm$,strnpcinfo(3); //各種CSVファイル読み込み ReadInfoCsv; ReadMarketCsv; //売上情報CSVをアカウントIDで検索 set @uriage,csvfind('fs$,'CMS_AID,@aid); //-------------------------------------------------------------------------- //呼び出したPCが売上を回収していない場合の処理 if (@uriage >= 0) { mes "[無人露天]"; mes "あなたの露天が自動終了しました。"; mes "アイテムと売上を回収しますか?"; mes "^ff0000※注意※"; mes "インベントリに空きを作ってから回収"; mes "して下さい。持ちきれないアイテムは"; mes "地面に落とされます。^000000"; next; switch (select("回収する","また今度")) { case 1: //ロック Lock 1,@aid; //ロックに成功した場合 if ('lock_s$ == @aid + "") { //売上情報CSVにアカウントIDに関する行がある限りループ while (1) { //売上情報CSVをアカウントIDで検索 set @row,csvfind('fs$,'CMS_AID,@aid); //該当する行を発見した場合 if (@row >= 0) { //指定行を読み込み csvreadarray 'fs$,@row,@dm[0]; //アイテム回収 RemoveItem 0; if (@seisan_cancel == 0) { //売上情報CSVから行を削除 csvdelete 'fs$,@row; csvflush 'fs$; } else { //売上情報CSVを更新 csvwritearray 'fs$,@row,@dm[0]; csvflush 'fs$; mes "[露天情報]"; mes "所持金が上限に達するため"; mes "回収を中断しました。"; mes "所持金に余裕を作ってから"; mes "もう一度話しかけて下さい。"; break; } //該当する行が無い場合はループ終了 } else { mes "[無人露天]"; mes "アイテムを回収しました。"; break; } } //ロック解除 UnLock 1; } else { mes "[無人露天]"; mes "混雑しているため処理が"; mes "キャンセルされました。"; } break; case 2: mes "[無人露天]"; mes "またお立ち寄り下さい。"; break; } //-------------------------------------------------------------------------- //露天が閉じた状態である場合の処理 } else if (@di$['CI_OC_FLG] == "0") { mes "[無人露天]"; mes "開きスペースです。"; next; switch (select("露天を出す","なにもしない")) { case 1: //自分の露天が他に存在する場合は終了する set @row,csvfind('fi$,'CI_AID,@aid); if (@row >= 0) { mes "[無人露天]"; mes "すでに他の場所で"; mes "露天を出しています。"; break; } //露天名をPCに入力させる mes "[無人露天]"; mes "露天名を入力して下さい。"; next; input @title$; if (@title$ == "") { set @title$,getcharname(@cid) + "のお店"; } //露天の継続時間をPCに入力させる mes "[無人露天]"; mes "露天を継続させる時間を選んで下さい。"; if ('pay_init > 0) { mes "(1時間につき^ff0000" + 'pay_init + "^000000zの維持費が必要です)"; } next; switch (select("1時間","3時間","6時間","12時間","24時間")) { case 1: set @limit,60 * 1; set @pay,'pay_init * 1; break; case 2: set @limit,60 * 3; set @pay,'pay_init * 3; break; case 3: set @limit,60 * 6; set @pay,'pay_init * 6; break; case 4: set @limit,60 * 12; set @pay,'pay_init * 12; break; case 5: set @limit,60 * 24; set @pay,'pay_init * 24; break; } if (zeny < @pay) { mes "[無人露天]"; mes "お金が足りません。"; break; } //ロック Lock 0,@aid; if ('lock_im$ == @aid + "") { if (zeny >= @pay) { set zeny,zeny - @pay; } else { //ロック解除 UnLock 0; mes "[無人露天]"; mes "お金が足りません。"; goto L_MAIN; break; } //チャットルームを開く waitingroom @title$,0; //露天情報CSVをNPC識別子で検索 set @row,csvfind('fi$,'CI_NPCID,strnpcinfo(3)); //露天情報CSVの情報を作成 set @di$['CI_AID],@aid + ""; set @di$['CI_NPCID],strnpcinfo(3); set @di$['CI_OC_FLG],"1"; set @di$['CI_LIMIT],@limit + ""; set @di$['CI_TITLE],@title$; //露天情報CSVへ書き込み csvwritearray 'fi$,@row,@di$; csvflush 'fi$; //ロック解除 UnLock 0; mes "[無人露天]"; mes "露天を出しました。"; next; goto L_MAIN; } else { mes "[無人露天]"; mes "混雑しているため処理が"; mes "キャンセルされました。"; } break; case 2: mes "[無人露天]"; mes "またお立ち寄り下さい。"; break; } //-------------------------------------------------------------------------- //呼び出したPCが露天主である場合の処理 } else if (@di$['CI_AID] == @aid + "") { L_MYSHOP: mes "[無人露天]"; mes "あなたのお店です。"; mes "何をしますか?"; next; switch (select("アイテムを確認する","アイテムを追加する","露天名を変更する","閉店する","なにもしない")) { case 1: L_SHOW: //陳列中のアイテムから1つ選択 SelectMarketItem; //正しくアイテムを選択した場合 if (@sel_no >= 0) { //アイテム詳細表示 ShowItemDetail @sel_no; //取り下げされた商品の場合 if (@dm[@sel_no]['CMS_ZAIKO] <= 0 && @dm[@sel_no]['CMS_HANBAI] <= 0) { mes "-----------------------------------"; mes "この商品は取り下げられています。"; next; goto L_SHOW; //売り切れた商品の場合 } else if (@dm[@sel_no]['CMS_ZAIKO] <= 0) { mes "-----------------------------------"; mes "この商品は売り切れています。"; next; goto L_SHOW; } else { mes "-----------------------------------"; mes "この商品を回収しますか?"; next; } //回収可能なアイテムの場合 if (@dm[@sel_no]['CMS_ZAIKO] >= 1 || @dm[@sel_no]['CMS_HANBAI] >= 1) { switch (select("このアイテムを回収する","もどる")) { case 1: //ロック Lock 0,@aid; if ('lock_im$ == @aid + "") { //操作中に閉店している可能性があるので露天情報を再読込する ReadInfoCsv; //まだ閉店していない場合 if (@di$['CI_AID] == @aid + "") { //操作中にアイテムが購入された可能性があるので商品情報を再読込する ReadMarketCsv; //アイテム回収 RemoveItem @sel_no; //CSVを更新 csvwritearray @fm$,@sel_no,@dm[@sel_no][0]; csvflush @fm$; //ロック解除 UnLock 0; mes "[無人露天]"; mes "アイテムを回収しました。"; next; goto L_SHOW; //露天が閉店してしまっている場合 } else { //ロック解除 UnLock 0; mes "[無人露天]"; mes "露天が閉じられているため"; mes "回収をキャンセルしました。"; } } else { mes "[無人露天]"; mes "混雑しているため処理が"; mes "キャンセルされました。"; next; goto L_SHOW; } break; case 2: goto L_SHOW; break; } //回収不能なアイテムの場合(取り下げ済) } else { goto L_SHOW; } } else { goto L_MYSHOP; } break; case 2: //陳列中のアイテムが上限数に達している場合 if (@row_max >= 'item_disp_max) { mes "[無人露天]"; mes "これ以上アイテムを追加できません。"; next; goto L_MYSHOP; } //アイテム追加 SetItem; //キャンセルしなかった場合 if (@cancel == 0) { //商品情報を再読込 ReadMarketCsv; mes "[無人露天]"; mes "アイテムを追加しました。"; next; goto L_MYSHOP; //キャンセルした場合 } else { mes "[無人露天]"; mes "アイテムの追加をキャンセルしました。"; next; goto L_MYSHOP; } break; case 3: mes "[無人露天]"; mes "商店名を入力して下さい。"; next; input @title$; if (@title$ == "") { set @title$,getcharname(@cid) + "のお店"; } //ロック Lock 0,@aid; if ('lock_im$ == @aid + "") { //操作中に閉店している可能性があるので露天情報を再読込する ReadInfoCsv; //まだ閉店していない場合 if (@di$['CI_AID] == @aid + "") { //露天情報CSVへ書き込み csvwrite 'fi$,@row,'CI_TITLE,@title$; csvflush 'fi$; //チャットルームのタイトルを変更 delwaitingroom; waitingroom @title$,0; //ロック解除 UnLock 0; mes "[無人露天]"; mes "露天名を変更しました。"; next; goto L_MYSHOP; } else { //ロック解除 UnLock 0; mes "[無人露天]"; mes "すでに露天が閉じられているため"; mes "処理をキャンセルしました。"; } } else { mes "[無人露天]"; mes "混雑しているため処理が"; mes "キャンセルされました。"; next; goto L_MYSHOP; } break; case 4: //ロック Lock 0,@aid; if ('lock_im$ == @aid + "") { //操作中に閉店している可能性があるので露天情報を再読込する ReadInfoCsv; //まだ閉店していない場合 if (@di$['CI_AID] == @aid + "") { //操作中にアイテムを購入されている可能性があるので商品情報を再読込する ReadMarketCsv; //全アイテム回収 for( set @row,0; @row < @row_max; set @row,@row+1 ) { RemoveItem @row; } //商品情報CSVをクリア while (csvgetrows(@fm$) >= 1) { csvdelete @fm$,0; } csvflush @fm$; //露天情報CSVをNPC識別子で検索 set @row,csvfind('fi$,'CI_NPCID,strnpcinfo(3)); //露天情報CSVの初期化情報を作成 set @di$['CI_AID],"0"; set @di$['CI_NPCID],strnpcinfo(3); set @di$['CI_OC_FLG],"0"; set @di$['CI_LIMIT],"0"; set @di$['CI_TITLE],""; //露天情報CSVへ書き込み csvwritearray 'fi$,@row,@di$; csvflush 'fi$; //チャットルームを閉じる delwaitingroom; //ロック解除 UnLock 0; mes "[無人露天]"; mes "露天を閉じました。"; } else { //ロック解除 UnLock 0; mes "[無人露天]"; mes "すでに露天が閉じられているため"; mes "処理をキャンセルしました。"; } }else{ mes "[無人露天]"; mes "混雑しているため処理が"; mes "キャンセルされました。"; next; goto L_MYSHOP; } break; case 5: break; } //-------------------------------------------------------------------------- //他PCの露天である場合の処理 } else { L_BUY: //アイテム一覧を表示 SelectMarketItem; //アイテムを選択した場合 if (@sel_no >= 0) { //アイテム詳細表示 ShowItemDetail @sel_no; //取り下げされた商品の場合 if (@dm[@sel_no]['CMS_ZAIKO] <= 0 && @dm[@sel_no]['CMS_HANBAI] <= 0) { mes "-----------------------------------"; mes "この商品は取り下げられています。"; next; goto L_BUY; //売り切れた商品の場合 } else if (@dm[@sel_no]['CMS_ZAIKO] <= 0) { mes "-----------------------------------"; mes "この商品は売り切れています。"; next; goto L_BUY; } else { mes "-----------------------------------"; mes "この商品を購入しますか?"; next; switch (select("購入する","もどる")) { case 1: //個数が2以上の場合は個数入力 if (@dm[@sel_no]['CMS_ZAIKO] >= 2) { //PCに預け入れ個数を入力させる mes "[無人露天]"; mes "購入数を入力して下さい。"; mes "(1個〜" + @dm[@sel_no]['CMS_ZAIKO] + "個)"; next; //入力値が正しくなるまでループする while (1) { input @item_num; //入力値チェック if (@item_num < 1) { mes "[無人露天]"; mes "1個以上にして下さい。"; mes "(1個〜" + @dm[@sel_no]['CMS_ZAIKO] + "個)"; next; break; } else if (@item_num > @dm[@sel_no]['CMS_ZAIKO]) { mes "[無人露天]"; mes @dm[@sel_no]['CMS_ZAIKO] + "個以下にして下さい。"; mes "(1個〜" + @dm[@sel_no]['CMS_ZAIKO] + "個)"; next; } else { break; } } //個数が1の場合 } else { set @item_num,1; } //PC所持金>=販売価格なら売買成立 if (zeny >= @dm[@sel_no]['CMS_PRICE] * @item_num) { //ロック Lock 0,@aid; if ('lock_im$ == @aid + "") { //操作中に商品が変化している可能性があるので再読込を行う ReadMarketCsv; //操作中に在庫が減っている可能性があるのでチェック if (@item_num > @dm[@sel_no]['CMS_ZAIKO]) { mes "[無人露天]"; mes "在庫が不足しています。"; next; //ロック解除 UnLock 0; goto L_BUY; } //ロック中に所持金が変化している可能性があるので再チェック if (zeny < @dm[@sel_no]['CMS_PRICE] * @item_num) { mes "[無人露天]"; mes "所持金が不足してます。"; next; //ロック解除 UnLock 0; goto L_BUY; } //支払い set zeny,zeny - (@dm[@sel_no]['CMS_PRICE] * @item_num); //アイテムをPCのインベントリに作成 getitem2 @dm[@sel_no]['CMS_ITEM_ID],@item_num,1,@dm[@sel_no]['CMS_ITEM_REF],0,@dm[@sel_no]['CMS_CARD1],@dm[@sel_no]['CMS_CARD2],@dm[@sel_no]['CMS_CARD3],@dm[@sel_no]['CMS_CARD4],@dm[@sel_no]['CMS_LIMIT]; //在庫数と販売数を更新 set @dm[@sel_no]['CMS_ZAIKO],@dm[@sel_no]['CMS_ZAIKO] - @item_num; set @dm[@sel_no]['CMS_HANBAI],@dm[@sel_no]['CMS_HANBAI] + @item_num; //CSVへ反映 csvwritearray @fm$,@sel_no,@dm[@sel_no][0]; //CSV確定 csvflush @fm$; //総在庫数を取得 set @zaiko_sum,0; for( set @row,0; @row < @row_max; set @row,@row+1 ) { set @zaiko_sum,@zaiko_sum + @dm[@row]['CMS_ZAIKO]; } //総在庫数が0の場合 if (@zaiko_sum == 0) { //自動閉店タイマーを開始 initnpctimer; } //ロック解除 UnLock 0; set @item_name$,getitemname(@dm[@sel_no]['CMS_ITEM_ID]); mes "[無人露天]"; mes @item_name$ + "を購入しました。"; next; if (@zaiko_sum > 0) { goto L_BUY; } } else { mes "[無人露天]"; mes "混雑しているため処理が"; mes "キャンセルされました。"; next; goto L_BUY; } //PC所持金<販売価格なら売買不成立 } else { mes "[無人露天]"; mes "所持金が不足してます。"; next; goto L_BUY; break; } break; case 2: goto L_BUY; break; } } } } close; end; //-------------------------------------------------------------------------- //サーバ起動時処理 //-------------------------------------------------------------------------- OnInit: //販売価格最大値(1〜1000000000の間の値を設定する) set 'item_price_max,1000000000; //露天に置けるアイテム数上限(回収したアイテムもカウントする) set 'item_disp_max,10; //1時間あたりの露天維持費 set 'pay_init,1000; //露天情報CSV set 'fi$,"INFO"; //売上情報CSV set 'fs$,"SALES"; //item_db // db/item_db.txtをサーバexeがあるフォルダにITEMDBという名前でコピーしておく // Aurigaならdb/item_db.txtを直接指定してよい //set 'fitdb$,"ITEMDB"; set 'fitdb$,"db/item_db.txt"; //露天情報CSV列定義 set 'CI_AID , 0; set 'CI_NPCID , 1; set 'CI_OC_FLG , 2; set 'CI_LIMIT , 3; set 'CI_TITLE , 4; //商品情報CSV&売上情報CSV列定義 set 'CMS_AID , 0; set 'CMS_AIDNO , 1; set 'CMS_ITEM_ID , 2; set 'CMS_PRICE , 3; set 'CMS_ZAIKO , 4; set 'CMS_HANBAI , 5; set 'CMS_ITEM_REF , 6; set 'CMS_CARD1 , 7; set 'CMS_CARD2 , 8; set 'CMS_CARD3 , 9; set 'CMS_CARD4 ,10; set 'CMS_LIMIT ,11; set 'CMS_TYPE ,12; set 'CMS_WEIGHT ,13; set 'CMS_ATK ,14; set 'CMS_DEF ,15; set 'CMS_SLOT ,16; set 'CMS_JOB ,17; set 'CMS_GENDER ,18; set 'CMS_LOC ,19; set 'CMS_WLV ,20; set 'CMS_ELV ,21; set 'CMS_REFINE ,22; set 'CMS_CNT ,23; //item_dbの列定義設定 set 'ITDB_ID , 0; set 'ITDB_NAME , 1; set 'ITDB_JNAME , 2; set 'ITDB_TYPE , 3; set 'ITDB_PRICE , 4; set 'ITDB_SELL , 5; set 'ITDB_WEIGHT , 6; set 'ITDB_ATK , 7; set 'ITDB_DEF , 8; set 'ITDB_RANGE , 9; set 'ITDB_SLOT ,10; set 'ITDB_JOB ,11; set 'ITDB_GENDER ,12; set 'ITDB_LOC ,13; set 'ITDB_WLV ,14; set 'ITDB_ELV ,15; set 'ITDB_VIEW ,16; set 'ITDB_REFINE ,17; set 'ITDB_SCRIPT ,18; //露天情報CSVをNPC識別子で検索 set 'row,csvfind('fi$,'CI_NPCID,strnpcinfo(3)); //露天情報CSVにNPC識別子のデータがある場合 if ('row >= 0) { //開店中か if (csvread('fi$,'row,'CI_OC_FLG) == "1") { //露天チャットを立てる //(デバック用)waitingroom csvread('fi$,'row,'CI_TITLE),1,strnpcinfo(3) + "::OnChatEvent"; //(デバック用)waitingroom csvread('fi$,'row,'CI_TITLE),1,strnpcinfo(3) + "::OnMinute00"; waitingroom csvread('fi$,'row,'CI_TITLE),0; } //露天情報CSVにNPC識別子のデータが無い場合 } else { //露天情報を作成 set 'di$['CI_AID],"0"; set 'di$['CI_NPCID],strnpcinfo(3); set 'di$['CI_OC_FLG],"0"; set 'di$['CI_LIMIT],"0"; set 'di$['CI_TITLE],""; //露天情報CSVへ書き込み csvinsert 'fi$,0; csvwritearray 'fi$,0,'di$; csvflush 'fi$; } //ロックフラグを解除状態にする set 'lock_im$,"0"; set 'lock_s$,"0"; end; //-------------------------------------------------------------------------- //時間切れ監視 //-------------------------------------------------------------------------- OnMinute00: OnMinute10: OnMinute20: OnMinute30: OnMinute40: OnMinute50: //露天情報CSVをNPC識別子で検索 set '@row_i,csvfind('fi$,'CI_NPCID,strnpcinfo(3)); //露天情報を取得 csvreadarray 'fi$,'@row_i,'@di; //開店中の場合のみ処理 if ('@di['CI_OC_FLG] == 1) { //残り時間が10分より大きい場合 if ('@di['CI_LIMIT] > 10) { //ロック Lock 0,strnpcinfo(3); if ('lock_im$ == strnpcinfo(3)) { //露天情報CSVへ残り時間-10を書き込み csvwrite 'fi$,'@row_i,'CI_LIMIT,'@di['CI_LIMIT] - 10; csvflush 'fi$; //ロック解除 UnLock 0; } else { debugmes "ロック中のため残時間減算処理をスキップ(" + strnpcinfo(3) + ")"; } //残り時間が10分以下だった場合 } else { //露天&商品情報ロック Lock 0,strnpcinfo(3); if ('lock_im$ == strnpcinfo(3)) { //売上情報ロック Lock 1,strnpcinfo(3); if ('lock_s$ == strnpcinfo(3)) { //閉店する AutoClose; } else { debugmes "売上情報ロック中のため自動閉店処理をスキップ(" + strnpcinfo(3) + ")"; } //露天&商品情報ロック解除 Unlock 0; } else { debugmes "露天&商品情報ロック中のため自動閉店処理をスキップ(" + strnpcinfo(3) + ")"; } } } end; //-------------------------------------------------------------------------- //売り切れによる自動閉店 //-------------------------------------------------------------------------- OnTimer10000: //露天&商品情報ロック Lock 0,strnpcinfo(3); if ('lock_im$ == strnpcinfo(3)) { //売上情報ロック Lock 1,strnpcinfo(3); if ('lock_s$ == strnpcinfo(3)) { //閉店する AutoClose; } else { initnpctimer; } //露天&商品情報ロック解除 Unlock 0; } else { initnpctimer; } end; } //ROTENxの部分がデータ保存用ファイルの名前になります //既存のファイルと被らない名前にして下さい prontera.gat,164,158,4 duplicate(無人露天) 無人露天1号店::ROTEN1 837 prontera.gat,164,154,4 duplicate(無人露天) 無人露天2号店::ROTEN2 837 prontera.gat,164,150,4 duplicate(無人露天) 無人露天3号店::ROTEN3 837