私設SoS2オーナー応援BBS

新規発言一覧最新記事過去一覧検索ダウンロードページHOME

スレッド

└◇408:
アイテム交換 [masaki] 03/08 10:17

 └◇409:Re:アイテム交換 [moon] 03/08 16:40
  └◇410:Re[2]:アイテム交換 [masaki] 03/08 17:57
   └◇411:Re[3]:アイテム交換 [masaki] 03/08 18:06
    └◇412:Re[4]:アイテム交換 [moon] 03/08 18:32
     └◇413:Re[5]:アイテム交換 [masaki] 03/08 18:53<-last


408● アイテム交換[ masaki ] 2003 03/08 10:17
お久しぶりです(^^
改造(ちょっとずつ)していて、どうやればいいのかまったくわからないので質問です。
プレイヤーAがNPC1に会いに行って、ある決められたアイテムBとあるアイテムCを交換してもらえるようにしたいのですが、この場合はどう言う風になるのでしょうか?
(あったときではなく、あったあとに「交換」するかどうか選べるのです)
難しいです(;;
すみませんお願いします。。
スレッド一覧


409● Re:アイテム交換[ moon ] 2003 03/08 16:40
> お久しぶりです(^^
> 改造(ちょっとずつ)していて、どうやればいいのかまったくわからないので質問です。
> プレイヤーAがNPC1に会いに行って、ある決められたアイテムBとあるアイテムCを交換してもらえるようにしたいのですが、この場合はどう言う風になるのでしょうか?
> (あったときではなく、あったあとに「交換」するかどうか選べるのです)
> 難しいです(;;
> すみませんお願いします。。

「交換」の表示を出すのはNPC専用スキル(Ng?)か交換専用スキルを新たに作成してそれで判定すれば良いので省略します。
「交換」を実行したときのサブルーチンを次のような流れで作成する。
簡単化のために、交換元アイテムは名前で判断するものとして、交換先アイテムはスクリプト中に埋め込むようにします。
さらに交換元アイテムを複数持っていた場合は先頭の物だけ交換されるようにします。
  sub trade_item{
    @rcdlines = &get_user("$Fm{'id'}");
    my %trade_items = (
       '交換元名前1'=>'交換先データ1'
      ,'交換元名前2'=>'交換先データ2'
      ,'交換元名前3'=>'交換先データ3'
# 例    ,'ポテト引換券'=>'ポテト△00010100Fd'
    );
    &splititem('i');
    if(@items){
      foreach(0..$#items){
        ($item,$sts) = split(/△/,$items[$_]);
        if(exists $trade_items{$item} && index($sts,'Rn')<0){
          push(@msg,"$itemを".(split(/△/,$trade_items{$item}))[0].'に交換してもらいました');
          splice(@items,$_,1,$trade_items{$item});
          &joinitem('i');
          &userout;
          return;
        }
      }
    }
    push(@msg,'交換可能なアイテムを所持していません');
  }

以上は問題が無いわけではないですが手っ取り早い方法です。

# 文法チェックはしましたが動作確認はしていないので正常に動作しないかもしれません。
スレッド一覧


410● Re[2]:アイテム交換[ masaki ] 2003 03/08 17:57
ありがとうございます!
早速やってみたところ、正常に動きました!!
どうもありがとうございましたm(_ _)m
スレッド一覧


411● Re[3]:アイテム交換[ masaki ] 2003 03/08 18:06
あと一つ質問させて頂いてもいいでしょうか?
スキルで判別する場合はどうすればいいのでしょうか?
Pbのスキルを持っていればポテト引換券とポテトを交換
その他の場合は〜というふうな感じです。。
my %trade_items = (
       '交換元名前1'=>'交換先データ1'
      ,'交換元名前2'=>'交換先データ2'
      ,'交換元名前3'=>'交換先データ3'
# 例    ,'ポテト引換券'=>'ポテト△00010100Fd'
    );
ここを、
if($psp =~ /Pb/){
my %trade_items = (
  ,'ポテト引換券'=>'ポテト△00010100Fd'
    );
}
else{
my %trade_items = (
       '交換元名前1'=>'交換先データ1'
      ,'交換元名前2'=>'交換先データ2'
      ,'交換元名前3'=>'交換先データ3'
# 例    ,'ポテト引換券'=>'ポテト△00010100Fd'
    );
}
こうでしょうか?(^^;
質問多くてすみません。。
スレッド一覧


412● Re[4]:アイテム交換[ moon ] 2003 03/08 18:32
> あと一つ質問させて頂いてもいいでしょうか?
> スキルで判別する場合はどうすればいいのでしょうか?
> Pbのスキルを持っていればポテト引換券とポテトを交換
> その他の場合は〜というふうな感じです。。
> my %trade_items = (
>        '交換元名前1'=>'交換先データ1'
>       ,'交換元名前2'=>'交換先データ2'
>       ,'交換元名前3'=>'交換先データ3'
> # 例    ,'ポテト引換券'=>'ポテト△00010100Fd'
>     );
> ここを、
> if($psp =~ /Pb/){
> my %trade_items = (
>   ,'ポテト引換券'=>'ポテト△00010100Fd'
>     );
> }
> else{
> my %trade_items = (
>        '交換元名前1'=>'交換先データ1'
>       ,'交換元名前2'=>'交換先データ2'
>       ,'交換元名前3'=>'交換先データ3'
> # 例    ,'ポテト引換券'=>'ポテト△00010100Fd'
>     );
> }
> こうでしょうか?(^^;
> 質問多くてすみません。。

my %trade_items;というように宣言をifの前に予めやっておき、あとは上記のmyをなくした形にすれば良いです。
もしくは、上記のmyをただ消去するだけでも良いです。
スレッド一覧


413● Re[5]:アイテム交換[ masaki ] 2003 03/08 18:53
ありがとうございました(^^
これからもよろしくお願いします!
スレッド一覧

CGIROOM