//============================================================================================== // 課金アイテム用スクリプト by Cocoa // // 使用する際の注意 // 全マップサーバーに読み込ませてください。 // 強化アイテムの箱のscriptをitem.txtに変更して下さい。 // @amountはあまり大きくすると鯖に負担のかかる恐れあり。(特に同時接続人数が多い鯖) // mod2243以降推奨 // // 現在の問題点 // 装備中だけのチェックだと装備しないと消えない。 // OnPCLoginだけのチェックだとずっと同じMapServerにいられると消えない。 //  装備中の所持チェックは鯖の接続人数が多いと処理が落ちるかも。 // キャラ永続変数使いすぎ。 // // 履歴 // 2007/04/18:usediteminfoが製造者を呼び出していたのを修正。 //    4:20 OnPCLoginの説明が中途半端だったのを修正orz //       履歴の日付が未来になっていたのを修正o.....rz //       現在の問題点変更・追記 // 2007/04/18:無駄な記述削除 //    2:00 '@amountに関する注意追加 //       装備から呼び出すタイプとOnPCLoginで呼び出すタイプの2つ用意 //        マシンスペックに余裕があるなら両方設置推奨。 //        余裕がないときはOnPCLoginだけ設置推奨 // 2007/04/17:CSVにセーブしていたのをキャラ変数に変更 //       時間の比較をgettimeからgettimetickに変更 //       取得関数と削除NPCを1つの関数に合併 //       強化アイテムの箱のuse_script変更(item.txt参照) //       強化アイテムのequp_script変更(item.txt参照) //       ヴェスパーコア01〜04Rの制限に転生条件追加(item.txt参照) // 2007/04/15:不具合色々修正orz // 2007/04/14:CSVファイルがリセットされる不具合修正 // 2007/04/11:作成 //---------------------------------------------------------------------------------------------- //============================================================================================== // 強化アイテム取得削除兼用関数 //---------------------------------------------------------------------------------------------- function script ChargedItem { //---------- 設定ここから -------------------- //削除するまでの日数 //デフォルトで7日間(7*24時間) set '@delday,7; //強化アイテム限界同時所持数 //あまり大きくするとGLOBAL_REG_NUMを超えるので注意 //'@amount1つでキャラ永続変数2個使うので注意 //デフォルトで10個(キャラ永続変数20個) set '@amount,10; //---------- 設定ここまで -------------------- //取得処理 if( getarg(0) ){ //所持量オーバーによるドロップ防止 if!( checkweight(getarg(0),1) ){ getitem usediteminfo(0),1; //強化アイテムの箱を返す mes "重量を確認してください。"; close; } //強化アイテムの所持数が'@amount未満か調べる for(set '@i,1; '@i<='@amount; set '@i,'@i+1){ //アイテムIDと削除日時が設定されていれば次の配列へ if( chargeditem['@i][0][0] && chargeditem['@i][1][0] ) continue; //アイテムIDか削除日時の片方だけ設定されていればマップサーバーに出力 else if( chargeditem['@i][0][0] || chargeditem['@i][1][0] ){ debugmes "強化アイテムエラー:エラータイプ1"; debugmes "該当キャラ:"+ strcharinfo(0) +"("+ getcharid(0) +")"; getitem usediteminfo(0),1; //強化アイテムの箱を返す end; } //アイテムIDと削除日時が設定されていなければ設定して強化アイテム取得 else{ set chargeditem['@i][0][0],getarg(0); set chargeditem['@i][1][0],gettimetick(2) - 1000000000 + '@delday*24*3600; getitem getarg(0),1; end; } } //強化アイテムを既に'@amount持ってれば箱を返す if( '@i > '@amount ){ getitem usediteminfo(0),1; //強化アイテムの箱を返す mes "これ以上強化アイテムを所持できません"; close; } } //削除処理 else{ for(set '@i,1; '@i<='@amount; set '@i,'@i+1){ //アイテムIDと削除日時が設定されていれる if( chargeditem['@i][0][0] && chargeditem['@i][1][0] ){ //削除日時が過ぎていれば強化アイテムと配列を削除し次の配列へ if( chargeditem['@i][1][0] < gettimetick(2) - 1000000000 ){ delitem chargeditem['@i][0][0],1; dispbottom("使用期限が過ぎているので"+ getitemname(chargeditem['@i][0][0]) +"が削除されました。"); set chargeditem['@i][0][0],0; set chargeditem['@i][1][0],0; } continue; } //アイテムIDか削除日時の片方だけ設定されていればマップサーバーに出力 else if( chargeditem['@i][0][0] || chargeditem['@i][1][0] ){ debugmes "強化アイテムエラー:エラータイプ1"; debugmes "該当キャラ:"+ strcharinfo(0) +"("+ getcharid(0) +")"; end; } //アイテムIDと削除日時が設定されていなければ次の配列へ else continue; } } } //============================================================================================== // OnPCLoginで強化アイテム所持チェックを有効にする場合は、 // 以下のコメントアウトはずし、設置マップを設定してください。 // その際、battle_confのOnPCLoginイベントを有効にすること。 // また、ChargedItem関数を呼び出すNPCを各MapServerに設置すること。 //---------------------------------------------------------------------------------------------- //mapname.gat,0,0,0 script TypePCEvent#1 -1,-1,-1,{ //OnPCLogin: // callfunc "ChargedItem",0; //} //mapname.gat,0,0,0 script TypePCEvent#2 -1,-1,-1,{ //OnPCLogin: // callfunc "ChargedItem",0; //} //mapname.gat,0,0,0 script TypePCEvent#3 -1,-1,-1,{ //OnPCLogin: // callfunc "ChargedItem",0; //} //mapname.gat,0,0,0 script TypePCEvent#4 -1,-1,-1,{ //OnPCLogin: // callfunc "ChargedItem",0; //} //mapname.gat,0,0,0 script TypePCEvent#5 -1,-1,-1,{ //OnPCLogin: // callfunc "ChargedItem",0; //}