//========================================================= // パーティ清算金自動分配NPC // created by Rayce //--------------------------------------------------------- izlude.gat,132,115,4 script 仕切り屋 180,{ // データベース名のセット if('itemdb$ == "") { set 'itemdb$,"db/item_db.txt"; set 'addon$,"db/addon/item_db_add.txt"; set 'value$,"db/item_value_db.txt"; } mes "[仕切り屋]"; mes "おうおう、清算は俺に任せな。"; mes "持ってるアイテム全部丸ごと買い取って"; mes "お前のパーティにZenyを分配してやる"; mes "からな。"; next; mes "[仕切り屋]"; mes "料金…?"; mes "おおっと、気にするな。"; mes "ボランティアだよ、ボランティア。"; mes "さぁ、どうする?"; next; if(select("頼みます","お断り!")==2) { mes "[仕切り屋]"; mes "ああ、そうかい。"; mes "勝手にやんな。"; close; } if(getcharid(1) <= 0) { mes "[仕切り屋]"; mes "PT未所属じゃねぇか。"; mes "さすがにそこまでは面倒見きれねぇぜ。"; close; } mes "[仕切り屋]"; mes "よし!"; mes "でもその前に、アイテム欄には売りたい"; mes "ものだけ置いておいてくれよ。"; mes "全部ごっそり買い取るからな!"; mes "装備品だけはそのままでいいぜ。"; next; if(select("少し待って","お願いします")==1) { mes "[仕切り屋]"; mes "売っていいアイテムかどうか、よーく"; mes "確かめてから来な。"; close; } // オーバーチャージを所有しているか判定 // 幸いなことに全スキルを所持していてもID=38は配列上限以内に出現する getskilllist; for(set '@i,0; '@i < @skilllist_count && '@i < 128; set '@i,'@i+1) { if(@skilllist_id['@i] == 38) { set '@rate,5+@skilllist_lv['@i]*2-((@skilllist_lv['@i]==10)? 1: 0); break; } } // ここからアイテムリストの探索 function GetSellValue; getinventorylist; for(set '@i,0; '@i < @inventorylist_count; set '@i,'@i+1) { // 装備してるか破損装備品は除外 if(@inventorylist_equip['@i] || @inventorylist_attribute['@i]) continue; // 清算品で精錬してることは無いと思うので事故防止のため弾く if(@inventorylist_refine['@i] > 0) continue; set '@val,GetSellValue(@inventorylist_id['@i]); if('oc_flag) { set '@rate,0; set 'oc_flag,0; } set '@total,'@total + ('@val*(100+'@rate)/100) * @inventorylist_amount['@i]; // 途中でアイテムリストが変化してもいいように関数依存変数へコピーしておく set '@inventory_id['@count],@inventorylist_id['@i]; set '@inventory_amount['@count],@inventorylist_amount['@i]; set '@count,'@count+1; } if('@count <= 0) { mes "[仕切り屋]"; mes "買い取れるアイテムが1個もないじゃ"; mes "ないか。"; close; } // アタッチ出来る人をリストアップ set '@accid,getcharid(3); getpartymember getcharid(1); detachrid; for(set '@i,0; '@i < $@partymembercount; set '@i,'@i+1) { set '@idlist['@j],getcharid(3,$@partymembername$['@i]); if( !attachrid('@idlist['@j]) ) set '@idlist['@j],0; else set '@j,'@j+1; detachrid; } if(!attachrid('@accid)) // 話掛けたPCを再度アタッチ end; set '@size,getarraysize('@idlist); if('@size <= 0) close; set '@z,'@total / '@size; mes "[仕切り屋]"; mes "合計で ^ff0000" +'@total+ "^000000 zenyだ。"; mes "お前ら全員で" +'@size+ "人だから"; mes "一人当たり ^ff0000" +'@z+ "^000000 zenyになるな。"; mes "文句はないか?"; next; if(select("ないです","考え直す")==2) { mes "[仕切り屋]"; mes "まぁ、焦ることはないからな。"; close; } for(set '@i,0; '@i < '@count; set '@i,'@i+1) { delitem '@inventory_id['@i],'@inventory_amount['@i]; } for(set '@i,0; '@i < '@size; set '@i,'@i+1) { if( attachrid('@idlist['@i]) ) { set Zeny,Zeny + '@z; dispbottom "仕切り屋より " +'@z+ " zenyが配当されました。"; detachrid; } // 面倒なのでここでアタッチ出来なかったらその人の配当金は闇に消える } if(!attachrid('@accid)) // 話掛けたPCを再度アタッチ end; mes "[仕切り屋]"; mes "よーし、これで完璧だ。"; mes "またいつでも声を掛けてくれよ。"; close; // 売値を返す function GetSellValue { set 'oc_flag,0; // item_value_db.txtが最優先 set '@row,csvfind('value$,0,getarg(0)); if('@row >= 0) { if(csvread('value$,'@row,6) == "1") set 'oc_flag,1; // OC不可フラグがあるなら set '@buf$,csvread('value$,'@row,4); if('@buf$ != "") return '@buf$; } set '@row,csvfind('addon$,0,getarg(0)); if('@row >= 0) { set '@buf$,csvread('addon$,'@row,5); if('@buf$ != "") return '@buf$; else { set '@val,csvread('addon$,'@row,4); // Priceを数値として変換 return '@val/2; } } set '@row,csvfind('itemdb$,0,getarg(0)); if('@row >= 0) { set '@buf$,csvread('itemdb$,'@row,5); if('@buf$ != "") return '@buf$; else { set '@val,csvread('itemdb$,'@row,4); // Priceを数値として変換 return '@val/2; } } close; // 不正なので終了 } }