今までに日記等で出していた小ネタのログ。
使いたい人はどうぞ使ってやって下さい。
ただ、PHPのコメントは今の所書かれていませんので、あしからず。
#==============================================================================
# ■ Math
#==============================================================================
module Math
# クラスメソッド宣言
class << self
#--------------------------------------------------------------------------
# ● 汎用的な対数取得
#--------------------------------------------------------------------------
alias :natural_log :log
def log(x, exp)
return Math.log10(x) / Math.log10(exp)
end
end
#--------------------------------------------------------------------------
# ● 汎用的な対数取得
#--------------------------------------------------------------------------
alias :natural_log :log
def log(x, exp)
return Math.log10(x) / Math.log10(exp)
end
end
function general_log(x, exp){
return(log10(x) / log10(exp));
}
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● 名前の取得
#--------------------------------------------------------------------------
def name
base = $data_enemies[@enemy_id].name
return base.sub!(/\s*lv\d+/i){""}
end
#--------------------------------------------------------------------------
# ● レベルの取得
#--------------------------------------------------------------------------
def level
base = $data_enemies[@enemy_id].name[/lv(\d+)/i]
return (base.nil? ? 1 : $1.to_i)
end
end
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# ● メニューの呼び出し
#--------------------------------------------------------------------------
def call_menu
# メニュー SE 演奏フラグがセットされている場合
if $game_temp.menu_beep
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# メニュー SE 演奏フラグをクリア
$game_temp.menu_beep = false
end
# プレイヤーの姿勢を矯正
$game_player.straighten
# メニュー画面に切り替え
$scene = Scene_Menu.new
end
end
#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
#--------------------------------------------------------------------------
# ● フレーム更新 (コマンドウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
alias :melt_update_command :update_command
def update_command
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# メニュー呼び出しフラグをクリア
$game_temp.menu_calling = false
#
@windows.each{|window| window.slideout! }
@slideout_count = 8
@slideout_next_scene = Scene_Map
$game_temp.menu_index = 0
return
end
melt_update_command
end
end
#==============================================================================
# ■ Scene_Load
#==============================================================================
class Scene_Load < Scene_File
#--------------------------------------------------------------------------
# ● キャンセル時の処理
#--------------------------------------------------------------------------
def on_cancel
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
if $game_temp.menu_calling
# メニュー画面に切り替え
$scene = Scene_Menu.new(XRXS_MeLT.commands.index($scene.class))
else
# タイトル画面に切り替え
$scene = Scene_Title.new
end
end
end
#==============================================================================
# ■ Game_Switches
#==============================================================================
class Game_Switches
#--------------------------------------------------------------------------
# ● スイッチの取得
# switch : スイッチ ID
#--------------------------------------------------------------------------
alias :base_r :[]
def [](switch)
if switch.is_a?(Numeric)
return base_r(switch)
elsif switch.is_a?(String)
# 同名のスイッチが複数ある場合、一番若い番号の値を返す
if $data_system.switches.index(switch) != nil
return @data[$data_system.switches.index(switch)]
else
return false
end
end
end
#--------------------------------------------------------------------------
# ● スイッチの設定
# switch : スイッチ ID
# value : ON (true) / OFF (false)
#--------------------------------------------------------------------------
alias :base_w :[]=
def []=(switch, value)
if switch.is_a?(Numeric)
base_w(switch, value)
elsif switch.is_a?(String)
# 同名のスイッチが複数ある場合、一番若い番号を書き換える
if $data_system.switches.index(switch) != nil
@data[$data_system.switches.index(switch)] = value
end
end
end
end
#==============================================================================
# ■ Game_Variables
#==============================================================================
class Game_Variables
#--------------------------------------------------------------------------
# ● 変数の取得
# variable : 変数 ID
#--------------------------------------------------------------------------
alias :base_r :[]
def [](variable)
if variable_a?(Numeric)
return base_r(variable)
elsif variable_a?(String)
# 同名のスイッチが複数ある場合、一番若い番号の値を返す
if $data_system.variables.index(variable) != nil
return @data[$data_system.variables.index(variable)]
else
return 0
end
else
return 0
end
end
#--------------------------------------------------------------------------
# ● 変数の設定
# variable : 変数 ID
# value : 変数の値
#--------------------------------------------------------------------------
alias :base_w :[]=
def []=(variable, value)
if variable_a?(Numeric)
return base_w(variable, value)
elsif variable_a?(String)
# 同名のスイッチが複数ある場合、一番若い番号を書き換える
if $data_system.variables.index(variable) != nil
@data[$data_system.variables.index(variable)] = value
end
end
end
end
#==============================================================================
# ■ Spriteset_Map
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
# ビューポートを作成
@viewport1 = Viewport.new(0, 0, 640, 480)
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 200
@viewport3.z = 5000
# タイルマップを作成
@tilemap = Tilemap.new(@viewport1)
@tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
for i in 0..6
autotile_name = $game_map.autotile_names[i]
@tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
end
@tilemap.map_data = $game_map.data
@tilemap.priorities = $game_map.priorities
# パノラマプレーンを作成
@panorama = Plane.new(@viewport1)
@panorama.z = -1000
# フォグプレーンを作成
@fog = Plane.new(@viewport1)
@fog.z = 3000
# キャラクタースプライトを作成
@character_sprites = []
for i in $game_map.events.keys.sort
sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
@character_sprites.push(sprite)
end
@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
# 天候を作成
@weather = RPG::Weather.new(@viewport1)
# ピクチャを作成
@picture_sprites = []
for i in 1..50
@picture_sprites.push(Sprite_Picture.new(@viewport1,
$game_screen.pictures[i]))
end
# タイマースプライトを作成
@timer_sprite = Sprite_Timer.new
# フレーム更新
update
end
end
#==============================================================================
# ■ Sprite_Picture
#==============================================================================
class Sprite_Picture < Sprite
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# ピクチャのファイル名が現在のものと異なる場合
if @picture_name != @picture.name
# ファイル名をインスタンス変数に記憶
@picture_name = @picture.name
# ファイル名が空でない場合
if @picture_name != ""
# ピクチャグラフィックを取得
self.bitmap = RPG::Cache.picture(@picture_name)
end
end
# ファイル名が空の場合
if @picture_name == ""
# スプライトを不可視に設定
self.visible = false
return
end
# スプライトを可視に設定
self.visible = true
# 転送元原点を設定
if @picture.origin == 0
self.ox = 0
self.oy = 0
else
self.ox = self.bitmap.width / 2
self.oy = self.bitmap.height / 2
end
# スプライトの座標を設定
self.x = @picture.x
self.y = @picture.y
# (何か@Z座標.拡張子)というファイル名を使用します
temp_z = @picture_name[/@(-?\d+)\.(png|jpg|jpeg)/]
if temp_z.nil?
self.z = $1.to_i
else
self.z = 500 + @picture.number
end
# 拡大率、不透明度、ブレンド方法を設定
self.zoom_x = @picture.zoom_x / 100.0
self.zoom_y = @picture.zoom_y / 100.0
self.opacity = @picture.opacity
self.blend_type = @picture.blend_type
# 回転角度、色調を設定
self.angle = @picture.angle
self.tone = @picture.tone
end
end
#==============================================================================
# ■ Game_CommonEvent
#==============================================================================
class Game_CommonEvent
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# 並列処理が有効の場合
if @interpreter != nil
# 実行中でなければセットアップ
unless @interpreter.running?
@interpreter.setup(self.list, nil)
end
# インタプリタを更新
@interpreter.update
end
end
end
#==============================================================================
# ■ Game_Event
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# 自動実行イベントの起動判定
check_event_trigger_auto
# 並列処理が有効の場合
if @interpreter != nil
# 実行中でない場合
unless @interpreter.running?
# イベントをセットアップ
@interpreter.setup(@list, self)
end
# インタプリタを更新
@interpreter.update
end
end
end
#==============================================================================
# ■ Interpreter
#==============================================================================
class Interpreter
#--------------------------------------------------------------------------
# ● クリア
#--------------------------------------------------------------------------
alias :base_clear :clear
def clear
# 呼び戻す
base_clear
# イベントをセット
@event = nil
end
#--------------------------------------------------------------------------
# ● イベントのセットアップ
# list : 実行内容
# event_id : イベント
#--------------------------------------------------------------------------
def setup(list, event)
# インタプリタの内部状態をクリア
clear
# マップ ID を記憶
@map_id = $game_map.map_id
# イベントを記憶
@event = event
@event_id = (@event == nil ? 0 : event.id)
# 実行内容を記憶
@list = list
# インデックスを初期化
@index = 0
# 分岐データ用のハッシュをクリア
@branch.clear
end
#--------------------------------------------------------------------------
# ● 起動中イベントのセットアップ
#--------------------------------------------------------------------------
def setup_starting_event
# 必要ならマップをリフレッシュ
if $game_map.need_refresh
$game_map.refresh
end
# コモンイベントの呼び出しが予約されている場合
if $game_temp.common_event_id > 0
# イベントをセットアップ
setup($data_common_events[$game_temp.common_event_id].list, nil)
# 予約を解除
$game_temp.common_event_id = 0
return
end
# ループ (マップイベント)
for event in $game_map.events.values
# 起動中のイベントが見つかった場合
if event.starting
# 自動実行でなければ
if event.trigger < 3
# 起動中フラグをクリア
event.clear_starting
# ロック
event.lock
end
# イベントをセットアップ
setup(event.list, event.id)
return
end
end
# ループ (コモンイベント)
for common_event in $data_common_events.compact
# トリガーが自動実行かつ条件スイッチが ON の場合
if common_event.trigger == 1 and
$game_switches[common_event.switch_id] == true
# イベントをセットアップ
setup(common_event.list, nil)
return
end
end
end
#--------------------------------------------------------------------------
# ● コモンイベント
#--------------------------------------------------------------------------
def command_117
# コモンイベントを取得
common_event = $data_common_events[@parameters[0]]
# コモンイベントが有効の場合
if common_event != nil
# 子インタプリタを作成
@child_interpreter = Interpreter.new(@depth + 1)
@child_interpreter.setup(common_event.list, @event)
end
# 継続
return true
end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● バトルイベントのセットアップ
#--------------------------------------------------------------------------
def setup_battle_event
# バトルイベント実行中の場合
if $game_system.battle_interpreter.running?
return
end
# バトルイベントの全ページを検索
for index in 0...$data_troops[@troop_id].pages.size
# イベントページを取得
page = $data_troops[@troop_id].pages[index]
# イベント条件を c で参照可能に
c = page.condition
# 何も条件が指定されていない場合は次のページへ
unless c.turn_valid or c.enemy_valid or c.actor_valid or c.switch_valid
next
end
# 実行済みの場合は次のページへ
if $game_temp.battle_event_flags[index]
next
end
# ターン 条件確認
if c.turn_valid
n = $game_temp.battle_turn
a = c.turn_a
b = c.turn_b
if (b == 0 and n != a) or
(b > 0 and (n < 1 or n < a or n % b != a % b))
next
end
end
# エネミー 条件確認
if c.enemy_valid
enemy = $game_troop.enemies[c.enemy_index]
if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
next
end
end
# アクター 条件確認
if c.actor_valid
actor = $game_actors[c.actor_id]
if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp
next
end
end
# スイッチ 条件確認
if c.switch_valid
if $game_switches[c.switch_id] == false
next
end
end
# イベントをセットアップ
$game_system.battle_interpreter.setup(page.list, nil)
# このページのスパンが [バトル] か [ターン] の場合
if page.span <= 1
# 実行済みフラグをセット
$game_temp.battle_event_flags[index] = true
end
return
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
#--------------------------------------------------------------------------
def update_phase4_step6
# アクション強制対象のバトラーをクリア
$game_temp.forcing_battler = nil
# コモンイベント ID が有効の場合
if @common_event_id > 0
# イベントをセットアップ
common_event = $data_common_events[@common_event_id]
$game_system.battle_interpreter.setup(common_event.list, nil)
end
# ステップ 1 に移行
@phase4_step = 1
end
end
#==============================================================================
# ■ File
#==============================================================================
class File
#--------------------------------------------------------------------------
# ● 画像の大きさの取得
#--------------------------------------------------------------------------
def size
# 現在のファイルポインタを保存し、ファイルポインタを先頭に戻す
point = self.pos
self.rewind
# オブジェクトが画像ファイルの場合
if self.path =~ /(png|gif|jpeg|jpg)/i
# 拡張子別に動作を分ける
case $1.downcase
# 拡張子が png の場合
when "png"
temp = self.read(4)
# ヘッダが正しい場合
if temp == "\x87PNG"
# 12バイトスキップ
self.read(12)
# サイズを取得
temp = self.read(8)
result = temp.unpack("N2")
# ファイルポインタを元に戻す
self.seek(point)
return result
else
# ファイルポインタを元に戻す
self.seek(point)
return
end
# 拡張子が gif の場合
when "gif"
# ヘッダの確認
temp = self.read(6)
# ヘッダが正しい場合
if temp =~ /GIF8[79]a/
# 画像の大きさを読み込む
temp = self.read(4)
result = temp.unpack("v2")
# ファイルポインタを元に戻す
self.seek(point)
return result
else
# ファイルポインタを元に戻す
self.seek(point)
return
end
else # と言っても jpeg しか無いが
temp = self.read(10)
# ヘッダが正しい場合
if temp == "\xff\xd8\xff\xe0\x00\x10JFIF"
temp = self.read(8192)
#
posit = temp.rindex((/\xff(\xC0|\xC2)\x00\x11\x08/) != 0
if posit != nil
# ファイルポインタを大きさ部分の直前に持っていく
self.seek(posit + 5)
# 画像の大きさを読み込む
temp = self.read(4)
result = temp.unpack("n2")[0]
# ファイルポインタを元に戻す
self.seek(point)
return result
else
# ファイルポインタを元に戻す
self.seek(point)
return
end
else
# ファイルポインタを元に戻す
self.seek(point)
return
end
end
else
# そのまま返す
return
end
end
#--------------------------------------------------------------------------
# ● 画像の幅の取得
#--------------------------------------------------------------------------
def width
result = self.size
return (result.nil? ? nil : result[0])
end
#--------------------------------------------------------------------------
# ● 画像の高さの取得
#--------------------------------------------------------------------------
def height
result = self.size
return (result.nil? ? nil : result[1])
end
end
if(preg_match("/\.(png|gif|jpeg|jpg)$/i", $filename, $match) != 0){
switch(strtolower($match[1])){
case "png":
if($file = fopen($filename, "r")){
if($lock_type == 1){flock($file, LOCK_SH);}
$bytes = fread($file, 4);
if($byte == "\x89\x50\x4E\x47"){
$src = $filename;
$bytes = fread($file, 12);
$bytes = fread($file, 8);
$temp = unpack("N2", $bytes);
$width = $temp[0];
$height = $temp[1];
}
fclose($file);
}
break;
case "gif":
if($file = fopen($filename, "r")){
if($lock_type == 1){flock($file, LOCK_SH);}
$bytes = fread($file, 4);
if($byte == "GIF87a" or $byte == "GIF89a"){
$src = $filename;
$bytes = fread($file, 4);
$temp = unpack("v2", $bytes);
$width = $temp[0];
$height = $temp[1];
}
fclose($file);
}
break;
default:
if($file = fopen($filename, "r")){
if($lock_type == 1){flock($file, LOCK_SH);}
$bytes = fread($file, 10);
if($byte == "\xFF\xD8\xFF\xE0\x00\x10JFIF"){
$src = $filename;
$bytes = fread($file, 8192);
if($pos = strripos("\xFF\xC0\x00\x11\x08", $byte) !== false){
fseek($pos + 5, SEEK_SET);
$bytes = fread($file, 4);
$width = $temp[0] * 256 + $temp[1];
$height = $temp[2] * 256 + $temp[3];
}elseif($pos = strripos("\xFF\xC2\x00\x11\x08", $byte) !== false){
fseek($pos + 5, SEEK_SET);
$bytes = fread($file, 4);
$temp = unpack("n2", $bytes)
$width = $temp[0];
$height = $temp[1];
}
}
fclose($file);
}
break;
}
}