fc2ブログ

何かに使えるかもしれないScript②

これはスクリプトを自作する人向けです。
class Array
def sum
num = 0
for i in self do num += i.to_i end
return num
end
def sum_f
num = 0
for i in self do num += i.to_f end
return num
end
def ave
return 0 if self.empty?
return sum_f / self.size
end
def sel
return nil if self.empty?
return self[rand(self.size)]
end
end

配列(Array)に新しい関数を追加します。
※ 12/06/08 平均値(ave)を追加

①総和
たとえば
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
という配列があったとして、
 array.sum
とすると、配列内の数値をすべて足して、55を返します。

ちなみにこの関数、
array = ["1", "2", ...]
と、配列の中が文字でも、整数に変換可能なら、問題なく計算します。



②総和(フロート)
①とほぼ同じだけど、
 array.sum_f
とすると、配列内の要素をフロート(浮動小数点数)で計算して返します。
上のarrayであった場合、55.0を返します。



③平均値
 array.ave
とすると、要素内の数値の平均値をフロートで返します。



④ランダム取得
配列内の要素をランダムに取得します。
 array.sel
とすると、array内の1~10のどれかを取得します。

このランダム取得のいいところは、配列ならなんでも可能である点です。

ツクールVXで、
パーティメンバーの情報を取得できる、 $game_party.members は、各アクターデータが格納された配列です。
なので、
 $game_party.members.sel
とすると、パーティ内のアクターをランダムに取得することができます。何かできそう!(`・ω・´)


ツクールVX上にある配列データといえば、例えば、
$data_items はデータベース上のアイテムの配列
$data_skills はデータベース上のスキルの配列
actor.skills はそのアクターが覚えているスキルの配列
actor.equips はそのアクターが装備しているアイテムの配列
$game_party.items は現在所持しているアイテムの配列

何かできそうな気がしませんか?(・ω・)できる気がするのは私だけでしょうか。
スポンサーサイト



テーマ : RPGツクール
ジャンル : ゲーム

何かに使えるかもしれないScript①

Event_Random_Setting.txt

かちふげで使用しているスクリプトで、イベントをランダムな位置に配置するスクリプトを作りました。

natural_subjects_sample36.png

使い方は簡単。
イベント名に『ランダム配置』と書くだけ。含んでいればいいので、『ランダム配置・草』とかでもOK

特徴としては、
①イベント同士が重ならない。
②移動不可の場所には配置しない。

という点があげられます。

でも、欠点が1つ。
セーブ&ロードすると、イベントの位置が移動してしまうことです。
これを解消するには、ちいさな本屋さんのスクリプト『イベント・キープ』を改変したものが必要です。
(改変内容はGame_TempをGame_Systemにする。$game_tempを$game_systemにする)
下手に使うとセーブデータのファイルサイズが大きくなるので、注意する必要があります。

解決しました。

ランダムに変化するダンジョンとかで使えそうかな?

Event_Random_Setting.txt

テーマ : RPGツクール
ジャンル : ゲーム

何かに使えるかもしれない小技②

①ウェイトをランダムに設定する
イベントコマンドのスクリプトで

@wait_count = rand(30) + 1

のように、@wait_count = てやる。
上の例だと、1~30フレームのウェイトがかかる。
これを、15~45にしたいなら

@wait_count = rand(31) + 15

になる。

②戦闘から外すメンバー
メニュー画面では表示するけど、戦闘はしない。みたいなときに使えます。

class Game_Party < Game_Unit
def members
result = []
for i in @actors
next if $game_temp.in_battle && [3,5].include?(i)
result.push($game_actors[i])
end
return result
end
end

上の例だと、アクターIDが3と5のアクターは戦闘メンバーから除外されます。

テーマ : RPGツクール
ジャンル : ゲーム

何かに使えるかもしれない小技

スクリプトを自分で編集する人向けです。

①乱数に重みをつける
rand(100) とやると、0~99の数値が同じ確率で選ばれるけど、これに重みを出す方法です。

second_digit = [] # 10の位を格納する配列
for i in 0..9
# 0を10個、1を9個、…9を1個ずつ、プッシュする。
(10-i).times do second_digit.push(i) end
end
# numにsecond_digitから選択した数値の十倍の数値を入れる
num = second_digit[rand(second_digit.size-1)] * 10
num += rand(10) # numに0~9の乱数を加算する。
return [num, 6].max # 最低でも6を返したいときとか

second_digit に格納する数値を好きに変えることで、重みを自由に変えられます。


②10個の変数の内3つに、50以上の数値を入れる。
v_list = [1,2,3,4,5,6,7,8,9,10] # 変数のIDリスト
c_list = [] # 50を越えた変数のIDを格納する
i = 0
loop do
break if c_list.size == 3 # 50を越えた数値の数が3つになったらブレイク
unless c_list.include?(v_list[i])
r = rand(100)
$game_variables[v_list[i]] = r
c_list.push(v_list[i]) if r >= 50 # 乱数が50を越えたら、IDを格納する
end
i += 1
i = 0 if i == v_list.size # リストの最後までいったら0に戻す
end

何やってるかわからなかったら、ごめんなさい。

ちなみに、②の小技は今作で使用する予定です。

テーマ : RPGツクール
ジャンル : ゲーム

プロフィール

ぶちょー

Author:ぶちょー
現在、ばにくら継章をRPGツクールVXAceで製作しています。

最新記事
最新コメント
カテゴリ
検索フォーム
リンク
RSSリンクの表示