今までに日記等で出していた小ネタのログ。
使いたい人はどうぞ使ってやって下さい。
ただ、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; } }