- 注册时间
- 2007-12-18
- 最后登录
- 2007-12-28
②入门
- 积分
- 24
|
用了超的地图遇地脚本
如下
#-------------------------------------------------------------------------------------
#超!遇敵系統
#coding by Kevin Chang
#==============================================================================
# ■ Game_Event
#------------------------------------------------------------------------------
# 處理事件的程式。條件判斷、事件頁的切換、並行處理、執行事件功能
# 在 Game_Map 的內部使用。
#==============================================================================
module RPG #新增name定義,作用於抓取事件名稱欄位值
class Event
def initialize(x, y)
@id = 0
@name = ""
@x = x
@y = y
@pages = [RPG::Event: age.new]
end
attr_accessor :id
attr_accessor :name
attr_accessor :x
attr_accessor :y
attr_accessor :pages
end
end
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# ● 定義實例變量
#--------------------------------------------------------------------------
attr_accessor :trigger # 目標(改為可讀寫)
attr_reader :list # 執行內容
attr_reader :starting # 啟動中標誌
attr_accessor :name #取得事件名稱
attr_accessor :character_name #改變事件圖形為可讀寫
attr_accessor :auto_fight #敵人事件處碰啟動戰鬥設定
attr_accessor :move_type #移動方式讓 $game_map.events[event_id].move_type = ? 來設定
#--------------------------------------------------------------------------
# ● 初始化對像
# map_id : 地圖 ID
# event : 事件 (RPG::Event)
#--------------------------------------------------------------------------
def initialize(map_id, event)
super()
@map_id = map_id
@event = event
@id = @event.id
@erased = false
@starting = false
@through = true
@name = @event.name #取得事件名稱
@character_name =""#改變事件圖形為可讀寫
@auto_fight = false #敵人事件接觸自動戰鬥
@move_type = 0 #移動方式 讓 $game_map.events[event_id].move_type = ? 來設定
#改變敵人事件的移動方法 0.不動 1.隨機 2.接近 4.自訂AI
# 初期位置的移動
moveto(@event.x, @event.y)
refresh
end
#--------------------------------------------------------------------------
# ● 接觸事件啟動判定
#--------------------------------------------------------------------------
def check_event_trigger_touch(x, y)
# 事件執行中的情況下
if $game_system.map_interpreter.running?
return
end
# 目標為 [與事件接觸] 以及和主角坐標一致的情況下
if @trigger == 2 and x == $game_player.x and y == $game_player.y
# 除跳躍中以外的情況、啟動判定就是正面的事件
if not jumping? and not over_trigger?
@auto_fight = true
start
else
@auto_fight = false
end
end
end
#--------------------------------------------------------------------------
# ● 自動事件啟動判定
#--------------------------------------------------------------------------
def check_event_trigger_auto
# 目標為 [與事件接觸] 以及和主角坐標一致的情況下
if @trigger == 2 and @x == $game_player.x and @y == $game_player.y
# 除跳躍中以外的情況、啟動判定就是同位置的事件
if not jumping? and over_trigger?
@auto_fight = true
start
else
@auto_fight = false
end
end
# 目標是 [自動執行] 的情況下
if @trigger == 3
start
end
end
end
#==============================================================================
# ■ Game_Character (分割定義 2)
#------------------------------------------------------------------------------
# 處理角色的程式。本程式作為 Game_Player 與 Game_Event
# 的超級程式使用。
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# ● 移動類型 : 接近
#--------------------------------------------------------------------------
def move_type_toward_player
# 求得與主角坐標的差
sx = @x - $game_player.x
sy = @y - $game_player.y
# 求得差的絕對值
abs_sx = sx > 0 ? sx : -sx
abs_sy = sy > 0 ? sy : -sy
# 如果縱橫共計離開 20 個元件
if sx + sy >= 5#修正敵人警戒距離
# 隨機
move_random
return
end
# 隨機 0~5 的分支
case rand(6)
when 0..3 # 接近主角
move_toward_player
when 4 # 隨機
move_random
when 5 # 前進一步
move_forward
end
end
end
#===========================================================
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
# 處理地圖畫面的程式。
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# ● 主處理
#--------------------------------------------------------------------------
$enemy_event_arry = [] #存放敵人事件的事件編號對應的敵人隊伍id(troop_id)
$e_event_id = []#存放屬於敵人事件的事件id
def main
@a = 0
# 生成活動塊
@spriteset = Spriteset_Map.new
# 生成訊息窗口
@message_window = Window_Message.new
# 執行過渡
Graphics.transition
# 主循環
loop do
new_battle_module #呼叫新版遇敵系統
# 刷新遊戲畫面
Graphics.update
# 刷新輸入訊息
Input.update
# 刷新畫面
update
# 如果畫面切換的話就中斷循環
if $scene != self
break
end
end
# 準備過渡
Graphics.freeze
# 釋放活動塊
@spriteset.dispose
# 釋放訊息窗口
@message_window.dispose
# 標題畫面切換中的情況下
if $scene.is_a?(Scene_Title)
# 淡入淡出畫面
Graphics.transition
Graphics.freeze
end
end
#------------------------------------------------------------------
#●怪物事件隨機圖示變化設計模組-主要控制
#--------------------------------------------------------------------
def new_battle_module
# 遇敵列表不為空的情況下
if $game_map.encounter_list != []
# 不是在事件執行中或者禁止遇敵中
unless $game_system.map_interpreter.running? or
$game_system.encounter_disabled
# 確定隊伍
for i in 1 .. $game_map.events.size
if $game_map.events.name == "敌人"
if $game_map.events.character_name == ""#避免怪物持續刷新,設置一個break的條件
$game_map.events.character_name = rand_enemies_character_name#改變敵人事件的圖片
$enemy_event_arry = $enemy_event_id#將獲取的troop_id 存放到敵人事件陣列內
$e_event_id[@a] = i
@a += 1
$game_map.events.trigger = 2 #自動改為接觸啟動事件
$game_map.events.move_type = 2
#改變敵人事件的移動方法 0.不動 1.隨機 2.接近
# 隊伍有效的話
else
break
end#if 避免怪物持續刷新,設置一個break的條件
end
end#end for
end #unless
end#if 遇敵列表不為空的情況下
end#module
#--------------------------------------------------------------------
#●怪物事件隨機圖示變化設計模組-戰鬥圖獲取
#--------------------------------------------------------------------
def rand_enemies_character_name
n = rand($game_map.encounter_list.size)#亂數取得地圖敵人列表數量
troop_id = $game_map.encounter_list[n]#亂數帶入敵人隊伍ID內,由敵人列表隨機取出一隊伍
troop = $data_troops[troop_id]#將隨機敵人隊伍資料存放到 troop 變數內
$enemy_event_id = troop_id
i = rand(troop.members.size) #由troop隊伍資料內 隨機抽出一個敵人隊員
enemy_character_name = $data_enemies[troop.members.enemy_id].battler_name
#抽出的隨機敵人隊員,與data_enemies去比對出對應的怪物戰鬥圖,把戰鬥圖名稱取出
return enemy_character_name #回傳戰鬥圖名稱
end
#--------------------------------------------------------------------------
# ● 刷新畫面
#--------------------------------------------------------------------------
def update
# 循環
loop do
# 按照地圖、實例、主角的順序刷新
# (本更新順序不會在的滿足事件的執行條件下成為給予角色瞬間移動
# 的機會的重要原素)
$game_map.update
$game_system.map_interpreter.update
$game_player.update
# 系統 (計時器)、畫面刷新
$game_system.update
$game_screen.update
# 如果主角在場所移動中就中斷循環
unless $game_temp.player_transferring
break
end
# 執行場所移動
transfer_player
# 處理過渡中的情況下、中斷循環
if $game_temp.transition_processing
break
end
end
# 刷新活動塊
@spriteset.update
# 刷新訊息窗口
@message_window.update
# 遊戲結束的情況下
if $game_temp.gameover
# 切換的遊戲結束畫面
$scene = Scene_Gameover.new
return
end
# 返回標題畫面的情況下
if $game_temp.to_title
# 切換到標題畫面
$scene = Scene_Title.new
return
end
# 處理過渡中的情況下
if $game_temp.transition_processing
# 清除過渡處理中標誌
$game_temp.transition_processing = false
# 執行過渡
if $game_temp.transition_name == "1"
Graphics.transition(20)
else
Graphics.transition(40, "Graphics/Transitions/" +
$game_temp.transition_name)
end
end
# 顯示訊息窗口中的情況下
if $game_temp.message_window_showing
return
end
# 遇敵列表不為空的情況下且敵人事件 auto_fight 為true
for i in $e_event_id
if $game_map.encounter_list != [] and $game_map.events.auto_fight == true
$event_id_on_time = i #把正在進行戰鬥的 event_id 取出,以便後面呼叫使用
# 不是在事件執行中或者禁止遇敵中
unless $game_system.map_interpreter.running? or
$game_system.encounter_disabled
# 確定隊伍
troop_id = $enemy_event_arry
# 隊伍有效的話
if $data_troops[troop_id] != nil
# 設置調用戰鬥標誌
$game_temp.battle_calling = true
$game_temp.battle_troop_id = troop_id
$game_temp.battle_can_escape = true
$game_temp.battle_can_lose = false
$game_temp.battle_proc = nil
end
end
end
end #for
# 按下 B 鍵的情況下
if Input.trigger?(Input::B)
# 不是在事件執行中或菜單禁止中
unless $game_system.map_interpreter.running? or
$game_system.menu_disabled
# 設置菜單調用標誌以及 SE 演奏
$game_temp.menu_calling = true
$game_temp.menu_beep = true
end
end
# 調試模式為 ON 並且按下 F9 鍵的情況下
if $DEBUG and Input.press?(Input::F9)
# 設置調用調試標誌
$game_temp.debug_calling = true
end
# 不在主角移動中的情況下
unless $game_player.moving?
# 執行各種畫面的調用
if $game_temp.battle_calling
call_battle
elsif $game_temp.shop_calling
call_shop
elsif $game_temp.name_calling
call_name
elsif $game_temp.menu_calling
call_menu
elsif $game_temp.save_calling
call_save
elsif $game_temp.debug_calling
call_debug
end
end
end
end
#==============================================================================
# ■ Scene_Battle (分割定義 2)
#------------------------------------------------------------------------------
# 處理戰鬥畫面的程式。
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● 畫面更新 (結束戰鬥回合)
#--------------------------------------------------------------------------
def update_phase5
# 等待計數大于 0 的情況下
if @phase5_wait_count > 0
# 減少等待計數
@phase5_wait_count -= 1
# 等待計數為 0 的情況下
if @phase5_wait_count == 0
# 顯示結果窗口
@result_window.visible = true
# 清除主回合標誌
$game_temp.battle_main_phase = false
# 刷新狀態窗口
@status_window.refresh
end
return
end
# 按下 C 鍵的情況下
if Input.trigger?(Input::C)
# 戰鬥結束
$game_map.events[$event_id_on_time].name = "死亡"
$game_map.events[$event_id_on_time].auto_fight = false
$game_map.events[$event_id_on_time].trigger = 0
$game_map.events[$event_id_on_time].erase
battle_end(0)
end
end
end
战斗后就弹出错误了
$game_map.events[$event_id_on_time].name = "死亡"
这句
应该如何设置?
假如我想打一个BOSS,每次都会跳出NAME错误
难道BOSS也要设置为敌人?
有高人可否加我QQ指导指导
谢谢
QQ357515191 |
|