赞 | 0 |
VIP | 1 |
好人卡 | 11 |
积分 | 1 |
经验 | 17928 |
最后登录 | 2018-9-22 |
在线时间 | 461 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 55
- 在线时间
- 461 小时
- 注册时间
- 2008-11-19
- 帖子
- 607
|
6楼
楼主 |
发表于 2012-5-16 19:10:36
|
只看该作者
本帖最后由 sai90306 于 2012-5-16 19:26 编辑
hys111111 发表于 2012-5-16 12:42
哦,需要这样了……
我內個...用很蠢的方法好像做出效果了...hys大要不要試試看效果@@?
主要加了一個tmap_id的輸入值
效果是出來了...不過完全脫夏娜大人的腳本了已經完全是美獸大人腳本了
然後就是80行那個刪除總覺得的先做出來再把多餘的刪除不是很好的做法 感覺太浪費資源...不過以我的水平只能做到這樣了- #=begin
- #==============================================================================
- # ☆★☆ 提取放置物腳本(強化) ☆★☆
- #------------------------------------------------------------------------------
- # - 美獸
- # - 2007.4.12
- #------------------------------------------------------------------------------
- # 愛護環境,人人有責,現實中切勿亂丟垃圾。
- #------------------------------------------------------------------------------
- #------------------------------------------------------------------------------
- # 腳本原理:
- # 是從倉庫地圖中提取事件,將其拷貝放入指定的位置,
- # 依此達成隨時隨地生成新事件的功能,如此可節省大量用RGSS編寫事件所消耗的體力,很多地方寫的
- # 很保守,盡量減少衝突幾率。。
- # 此為強化版,可實現新事件的保存,但代價是衝突的隨之增大,若只想單純實現ARPG
- # 一類的物品掉落,場所移動後便清除,請使用簡潔版。
- #------------------------------------------------------------------------------
- =begin
- Note:
- 一:生成物品主方法:
- Drop_Item.make_events(map_id,event_id,item_x,item_y,save=false)
- map_id : 倉庫地圖的ID。
- event_id : 倉庫中對應事件的ID。
- item_x、item_y :新事件的X與Y坐標
- save : 是否存儲標誌;
- 默認為false,即不存儲,場所移動等轉換場景後事件會消失;
- true 為存儲,取檔、關機、登火星,返回後事件仍存在。
- 二:刪除事件方法:
- 事件名若包含"delete"字段,則執行完畢會立即自我清除;
- 註:任何事件皆如此。
- 三:必掌握語句:
- $game_map.events[@event_id]
- $game_player
- 事件的腳本使用,表示「本事件」和「角色」,主要為取得事件的坐標,
- 取得「本事件」X與Y坐標:$game_map.events[@event_id].event.x
- $game_map.events[@event_id].event.y
- 取得「角色」X與Y坐標:$game_player.x
- $game_player.y
- 例如,在某事件左側生成2號地圖的2號事件並永久存儲,寫法如下。
- x = $game_map.events[@event_id].event.x
- y = $game_map.events[@event_id].event.y
- Drop_Item.make_events(2,2,x-1,y,true)
- 或
- x = $game_map.events[@event_id].x
- y = $game_map.events[@event_id].y
- Drop_Item.make_events(2,2,x-1,y,true)
- 四:備註:
- 此腳本用法十分靈活,種植、建設、捨棄、掉寶等功能都可用以達成。
- =end
- #==============================================================================
- module Drop_Item
- def self.make_events(map_id,event_id,tmap_id,item_x,item_y,save=false)
- return unless self.is_map?
- map = self.map_data_load(map_id)
- temp = Marshal.load(Marshal.dump(map))
- if !$game_system.map_events_number
- $game_system.map_events_number = {}
- end
- sum = $game_system.map_events_number
- $drop_item_target_map_id = tmap_id
- m_id = $drop_item_target_map_id
- sum[m_id] == nil ? sum[m_id] = 2000 : sum[m_id] += 1
- new_event_id = sum[m_id]
- temp.events[event_id].id = new_event_id
- temp.events[event_id].x,temp.events[event_id].y = item_x,item_y
- $game_map.events[new_event_id] = Game_Event.new(m_id,temp.events[event_id])
- if save
- now_map = self.map_data_load(m_id)
- now_map.events[new_event_id] = temp.events[event_id]
- self.map_data_save(m_id,now_map)
- end
- $game_map.events.delete(new_event_id)
- refresh_map
- end
- def self.map_data_init
- for i in 1..999
- begin
- map = load_data(sprintf("Data/Map%03d.rxdata", i))
- rescue Errno::ENOENT
- next
- end
- $game_system.map_data[i] = Marshal.load(Marshal.dump(map))
- end
- end
- def self.map_data_save(map_id,event)
- $game_system.map_data[$drop_item_target_map_id] = event
- end
- def self.map_data_load(map_id)
- if !$game_system.map_data
- $game_system.map_data = {}
- self.map_data_init
- end
- return $game_system.map_data[map_id]
- end
- def self.delete_events(event_id)
- return unless self.is_map?
- $game_map.events.delete(event_id)
- self.refresh_map
- end
- def self.refresh_map
- return unless self.is_map?
- $scene.spriteset.dispose
- $scene.spriteset = Spriteset_Map.new
- end
- def self.is_map?
- (return true) if $scene.is_a?(Scene_Map)
- return false
- end
- end
- class Game_Map
- def setup(map_id)
- @map_id = map_id
- #@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
- @map = Drop_Item.map_data_load(@map_id)
- tileset = $data_tilesets[@map.tileset_id]
- @tileset_name = tileset.tileset_name
- @autotile_names = tileset.autotile_names
- @panorama_name = tileset.panorama_name
- @panorama_hue = tileset.panorama_hue
- @fog_name = tileset.fog_name
- @fog_hue = tileset.fog_hue
- @fog_opacity = tileset.fog_opacity
- @fog_blend_type = tileset.fog_blend_type
- @fog_zoom = tileset.fog_zoom
- @fog_sx = tileset.fog_sx
- @fog_sy = tileset.fog_sy
- @battleback_name = tileset.battleback_name
- @passages = tileset.passages
- @priorities = tileset.priorities
- @terrain_tags = tileset.terrain_tags
- @display_x = 0
- @display_y = 0
- @need_refresh = false
- @events = {}
- for i in @map.events.keys
- @events[i] = Game_Event.new(@map_id, @map.events[i])
- end
- @common_events = {}
- for i in 1...$data_common_events.size
- @common_events[i] = Game_CommonEvent.new(i)
- end
- @fog_ox = 0
- @fog_oy = 0
- @fog_tone = Tone.new(0, 0, 0, 0)
- @fog_tone_target = Tone.new(0, 0, 0, 0)
- @fog_tone_duration = 0
- @fog_opacity_duration = 0
- @fog_opacity_target = 0
- @scroll_direction = 2
- @scroll_rest = 0
- @scroll_speed = 4
- end
- end
- class Interpreter
- def command_end
- @list = nil
- if @main and @event_id > 0
- if $game_map.events[@event_id].event.name[/delete/].nil?
- $game_map.events[@event_id].unlock
- else
- if $scene.is_a?(Scene_Map)
- Drop_Item.delete_events(@event_id)
- now_map = Drop_Item.map_data_load($drop_item_target_map_id)
- now_map.events.delete(@event_id)
- Drop_Item.map_data_save($drop_item_target_map_id,now_map)
- end
- end
- end
- end
- end
- class Game_System
- attr_accessor :map_events_number
- attr_accessor :map_data
- end
- class Scene_Map
- attr_accessor :spriteset
- end
- #=end
复制代码 ��� |
|