トップ
新規
一覧
Farm
検索
ヘルプ
RSS
ログイン
洋ゲー風、拾得アイテム強化プログラムの編集
!!おまけ 折角ですので少しお勉強してみましょう。 :サブルーチン1行目の意味: if ($_[1] =~ /$dny_idt/ || ($_[1] !~ /$add_iak/ && $_[1] !~ /$add_idd/ && $_[1] !~ /$add_iad/)) { return($inm,$idt) } これは強化を禁止する略字が入っていた場合、もしくは強化を行うべき略字が入っていなかった場合の双方において真になる記述です。 return($inm,$idt); 条件式が真の場合に上記 return を行い、戻り値を返してサブルーチン終了になります。 このサブルーチンは通貨以外のアイテム発見時に毎回行われるものですので、上記処理が行われています。 動作的にはリソースの無駄ですが、改造配布という観点で言えば導入が至極容易になります。 実際これは1行をコピペするだけですからね。 :サブルーチン3〜5行目の意味: $add = $add_idt[int(rand($#add_idt + 1))]; if ($add == 0) { return($inm,$idt) } @add_idt の配列からランダムに一つ選択し、その値が真であればその値を $add に代入します。 また $add が 0 であれば return で戻り値を返し、ルーチンを抜けます。 $add が 0 であった場合、強化は行われず、それ以降の処理は無駄になるためです。 :サブルーチン7行目〜、int と substr に関するお話: $pc = int(substr($_[1],0,4)); $iak = int(substr($_[1],4,2)); $idd = int(substr($_[1],6,2)); $sts = substr($_[1],8,length($_[1])); $_[1] は引数(これは区別のため”ひきすう”と特殊な読みをします)として $idt が代入されたものです。 $idt は発見されたアイテムのステータス値ですね。 $_[0] = '00010101'; とした場合。 $pc = int(substr($_[1],0,4)); $pc = 1; となります。 int関数で整数化しているためですね。 さて、ここで少し大事なことがあります。 $a = int(substr($_[1],0,4)); $c = $a + 10; $b = substr($_[1],0,4); $d = $b + 10; この場合―― $c = 11; $d = 11; と結果は同じ数値です。 しかし―― $a = 1; # 数値 $b = 01; # 文字列 と、中途ではこのような差異が出ます。 ここで大事なことは整数化を行っていない方は数値ではなく文字と認識されているということです。 SOSIIではアイテム使用などに関して整数化を行っていない場合が殆どですが、これは整数化を行っていなくても問題が無いからです。 何が問題かといいますと、Perl演算子は文字列用のもの、数値用のものと区別されているからです。 ここで数値用の演算子、++(インクリメント)などを文字列に対して行っても有効になりません。 これを知っていなければ、自分でルーチンを組んだ時にハマる恐れがあります。 同じように―― $a = 0; $b = ''; undef $c; これらの変数はすべて偽と判断されます。 しかし、$a は数値としての 0、それ以外は文字列としての null です。 ループブロック内で ++ 等のカウントを行っている際、undef などで初期化すると、それ以降はカウントされなくなります、注意しましょう。 :サブルーチン12行目の意味: $new_inm = "$_[0]" . '+' . "$add"; # 名前変更部分 この部分ですね。 右辺中央は顔文字ではありません…… .(ドット、ピリオド)は文字列同士を連結するのに使います。 またダブルクォーテーションに囲われた文字列は変数の展開やエスケープを行い、シングルクォーテーションに囲われた文字列は行いません。 行うものと行わないものを混同したい場合、上記のように連結すればスマートになるという具合です。 + をクォートで囲っているのは、これは加算演算子ではなく、ただの文字と解釈させるためです。 $new_inm = "$_[0]" . '+' . "$add"; $new_inm = "$_[0]+$add"; 残念ながら二つとも意味は全く同じです。 ただし、変数や使用する文字によっては前者で表記せざるをえなくなる場合があります、覚えておいても損は無いでしょう。
タイムスタンプを更新しない
添付ファイル
add_magic.pl
リネーム・コピー
リネーム
メッセージを残してリネーム
コピー
[
ヘルプ
]
Counter 683500
はじめに
SOS2 Wikiの使い方
コンテンツ
SOS2を設置する
SOS2を改造する
困ったときには
コラム
改造&FAQ
リファレンスマニュアル
機能別改造一覧
雑談
BBS
Masters Bar
公式BBS
サポート
サポートBBS
Link
リンク
SIONJamの改造ソース
設置サイトはこちらへ
検索
キーワード
AND
OR
ページ内容も含める
最近更新されたページ
雑談
Script of Saga II Wiki
パーティシステム
D2C風、レアアイテム生成システム
洋ゲー風、拾得アイテム強化プログラム
SOSIIを分割しよう
戦闘関連強化・特技&魔法
SOSII Check Script
乱数ロールプログラム
不具合情報
参照数の多いページ
Script of Saga II Wiki
(74672)
リンク
(16176)
SOS2を設置する
(12410)
雑談
(11875)
SOS2改造利用規約
(9732)