Project1
标题:
如何制作回程卷轴?
[打印本页]
作者:
sqj1982
时间:
2010-7-3 12:33
标题:
如何制作回程卷轴?
本帖最后由 sqj1982 于 2010-7-3 17:16 编辑
指定地点的很简单,用公用事件就可以做了.但是要分别做不同地点的回程
如何做能够自动判断所处地图,然后根据判断结果移动到不同地点的回程卷轴呢?
还有如何做随即坐标移动的道具呢?
作者:
水镜风生
时间:
2010-7-3 12:40
地图ID可以代入【变量】,【条件分歧】可以判定变量的值。
作者:
sqj1982
时间:
2010-7-3 12:59
感谢LS,这么做应该可以,我试试看...貌似比较麻烦
作者:
wangswz
时间:
2010-7-3 13:35
上脚本
#==============================================================================
# ★ Teleport 特别感谢 Yoji Ojima
#------------------------------------------------------------------------------
# 制作传送道具或是技能的脚本。
#==============================================================================
# 瞬间传送的识别文字。
# 将这段文字写在作为传送道具或技能的「备注」之中。
# [效果范围] 设为 [无]、[使用场合] 设为 [菜单中] 。
EXSKL_TELEPORT_SIGNATURE = "*TELEPORT"
# 允许瞬间传送的开关 ID。
# 当此号的开关为 ON 时,则可以使用传送物品/技能
# 可以在事件内开启或关闭此功能。
EXSKL_TELEPORT_PERMISSION_SID = 1
# 瞬间移动列表。
# 开关 ID、场所名称、地图 ID、X 座标、Y 座标、传送后角色面向 (对应四方键)
# 依照上面的顺序填入
# 当对应的开关为 ON 时,就能够选择该场所来瞬间移动。
EXSKL_TELEPORT_PLACES =
[
[1, "雾江之村伊波", 29, 242, 191, 8],
[1, "雪2崖" , 29, 246,242, 8],
[989, "草1原" , 2,16, 9, 2],
]
# 开关, 场所名称, 地图ID, X 座标, Y 座标, 面向
# 传送时的 SE。
# 依次指定 SE 的名称、音量、音调。(不指定时留 [])
EXSKL_TELEPORT_SE = ["Teleport", 80, 100]
#------------------------------------------------------------------------------
class Game_Actor
alias _exstlp_skill_can_use? skill_can_use?
#--------------------------------------------------------------------------
# ● 可用技能判断 (追加定义)
# skill : 技能
#--------------------------------------------------------------------------
def skill_can_use?(skill)
return false unless skill.is_a?(RPG::Skill)
if skill.note.include?(EXSKL_TELEPORT_SIGNATURE)
return false unless $game_party.teleport_can_use?
return false if $game_player.in_vehicle?
end
return _exstlp_skill_can_use?(skill)
end
end
class Game_Party
alias _exstlp_item_can_use? item_can_use?
#--------------------------------------------------------------------------
# ● 可用物品判断 (追加定义)
# item : 物品
#--------------------------------------------------------------------------
def item_can_use?(item)
return false unless item.is_a?(RPG::Item)
return false if item_number(item) == 0
if item.note.include?(EXSKL_TELEPORT_SIGNATURE)
return false unless teleport_can_use?
return false if $game_player.in_vehicle?
end
return _exstlp_item_can_use?(item)
end
#--------------------------------------------------------------------------
# ☆ 可用「瞬间移动」判定
#--------------------------------------------------------------------------
def teleport_can_use?
return false if EXSKL_TELEPORT_PLACES.empty?
return false unless $game_switches[EXSKL_TELEPORT_PERMISSION_SID]
for place in EXSKL_TELEPORT_PLACES
return true if $game_switches[place[0]]
end
return false
end
end
#==============================================================================
# ★ Window_Teleport
#------------------------------------------------------------------------------
# 显示可以移动的场所列表。
#==============================================================================
class Window_Teleport < Window_Selectable
#--------------------------------------------------------------------------
# ☆ 初始化对象
#--------------------------------------------------------------------------
def initialize
super(0, 0, 272, 416)
refresh
end
#--------------------------------------------------------------------------
# ☆ 获取项目
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# ☆ 刷新
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@data = []
for place in EXSKL_TELEPORT_PLACES
if $game_switches[place[0]]
@data.push(place)
end
end
@item_max = [@data.size, 1].max
create_contents
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
# ☆ 描绘项目
# index : 项目索引
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
rect.x += 4
rect.width -= 8
self.contents.clear_rect(rect)
place = @data[index]
if place != nil
self.contents.draw_text(rect, " "+place[1])
###################传送美化
bitmap = Cache.load_bitmap("Graphics/Pictures/", "Icon")
case place[0] #######图标一致的地图开关写在一起!
when 1..20
zuobiaox = 24 * 2 +1
zuobiaoy = 24 + 1
when 800..1000
zuobiaox = 24 * 3 +1
zuobiaoy = 0
end
rect = Rect.new(zuobiaox, zuobiaoy, 24, 24)
self.contents.blt(0, index * 24, bitmap, rect, 255)
###################传送美化
end
end
end
class Scene_Item
alias _exstlp_start start
alias _exstlp_terminate terminate
alias _exstlp_update update
alias _exstlp_determine_item determine_item
#--------------------------------------------------------------------------
# ○ 开始处理 (追加定义)
#--------------------------------------------------------------------------
def start
_exstlp_start
@teleport_window = Window_Teleport.new
hide_teleport_window
end
#--------------------------------------------------------------------------
# ○ 结束处理 (追加定义)
#--------------------------------------------------------------------------
def terminate
_exstlp_terminate
@teleport_window.dispose
end
#--------------------------------------------------------------------------
# ○ 更新画面 (追加定义)
#--------------------------------------------------------------------------
def update
teleport_active = @teleport_window.active
_exstlp_update
@teleport_window.update
if teleport_active
update_teleport_selection
end
end
#--------------------------------------------------------------------------
# ○ 确认物品 (追加定义)
#--------------------------------------------------------------------------
def determine_item
if @item.note.include?(EXSKL_TELEPORT_SIGNATURE)
show_teleport_window(@item_window.index % 2 == 0)
else
_exstlp_determine_item
end
end
#--------------------------------------------------------------------------
# ☆ 显示瞬间传送窗口
# right : 靠右对齐标签(为false时则靠左)
#--------------------------------------------------------------------------
def show_teleport_window(right)
@item_window.active = false
width_remain = 544 - @teleport_window.width
@teleport_window.x = right ? width_remain : 0
@teleport_window.visible = true
@teleport_window.active = true
@teleport_window.index = 0
if right
@viewport.rect.set(0, 0, width_remain, 416)
@viewport.ox = 0
else
@viewport.rect.set(@teleport_window.width, 0, width_remain, 416)
@viewport.ox = @teleport_window.width
end
end
#--------------------------------------------------------------------------
# ☆ 隐藏瞬间传送窗口
#--------------------------------------------------------------------------
def hide_teleport_window
@item_window.active = true
@teleport_window.visible = false
@teleport_window.active = false
@viewport.rect.set(0, 0, 544, 416)
@viewport.ox = 0
end
#--------------------------------------------------------------------------
# ☆ 更新瞬间传送选取
#--------------------------------------------------------------------------
def update_teleport_selection
if Input.trigger?(Input::B)
Sound.play_cancel
hide_teleport_window
elsif Input.trigger?(Input::C)
determine_teleport
end
end
#--------------------------------------------------------------------------
# ☆ 确认瞬间传送
#--------------------------------------------------------------------------
def determine_teleport
place = @teleport_window.item
if place == nil
Sound.play_buzzer
else
se = EXSKL_TELEPORT_SE
RPG::SE.new(se[0], se[1], se[2]).play unless se.empty?
$game_party.last_item_id = @item.id
$game_party.consume_item(@item)
$game_player.reserve_transfer(place[2], place[3], place[4], place[5])
$scene = Scene_Map.new
end
end
end
class Scene_Skill
alias _exstlp_start start
alias _exstlp_terminate terminate
alias _exstlp_update update
alias _exstlp_determine_skill determine_skill
#--------------------------------------------------------------------------
# ○ 开始处理 (追加定义)
#--------------------------------------------------------------------------
def start
_exstlp_start
@teleport_window = Window_Teleport.new
hide_teleport_window
end
#--------------------------------------------------------------------------
# ○ 结束处理 (追加定义)
#--------------------------------------------------------------------------
def terminate
_exstlp_terminate
@teleport_window.dispose
end
#--------------------------------------------------------------------------
# ○ 更新画面 (追加定义)
#--------------------------------------------------------------------------
def update
teleport_active = @teleport_window.active
_exstlp_update
@teleport_window.update
if teleport_active
update_teleport_selection
end
end
#--------------------------------------------------------------------------
# ○ 确认技能 (追加定义)
#--------------------------------------------------------------------------
def determine_skill
if @skill.note.include?(EXSKL_TELEPORT_SIGNATURE)
show_teleport_window(@skill_window.index % 2 == 0)
else
_exstlp_determine_skill
end
end
#--------------------------------------------------------------------------
# ☆ 显示瞬间传送窗口
# right : 靠右对齐标签(为false时则靠左)
#--------------------------------------------------------------------------
def show_teleport_window(right)
@skill_window.active = false
width_remain = 544 - @teleport_window.width
@teleport_window.x = right ? width_remain : 0
@teleport_window.visible = true
@teleport_window.active = true
@teleport_window.index = 0
if right
@viewport.rect.set(0, 0, width_remain, 416)
@viewport.ox = 0
else
@viewport.rect.set(@teleport_window.width, 0, width_remain, 416)
@viewport.ox = @teleport_window.width
end
end
#--------------------------------------------------------------------------
# ☆ 隐藏瞬间传送窗口
#--------------------------------------------------------------------------
def hide_teleport_window
@skill_window.active = true
@teleport_window.visible = false
@teleport_window.active = false
@viewport.rect.set(0, 0, 544, 416)
@viewport.ox = 0
end
#--------------------------------------------------------------------------
# ☆ 更新瞬间传送选取
#--------------------------------------------------------------------------
def update_teleport_selection
if Input.trigger?(Input::B)
Sound.play_cancel
hide_teleport_window
elsif Input.trigger?(Input::C)
determine_teleport
end
end
#--------------------------------------------------------------------------
# ☆ 确认瞬间传送
#--------------------------------------------------------------------------
def determine_teleport
place = @teleport_window.item
if place == nil
Sound.play_buzzer
else
se = EXSKL_TELEPORT_SE
RPG::SE.new(se[0], se[1], se[2]).play unless se.empty?
@actor.last_skill_id = @skill.id
@actor.mp -= @actor.calc_mp_cost(@skill)
$game_player.reserve_transfer(place[2], place[3], place[4], place[5])
$scene = Scene_Map.new
end
end
end
复制代码
作者:
sqj1982
时间:
2010-7-3 16:45
回复
wangswz
的帖子
感谢,我回去整合下
作者:
sqj1982
时间:
2010-7-3 16:59
回复
wangswz
的帖子
给个工程吧,还是不大会用
需要开关的话,实际上用事件也能解决...
作者:
sqj1982
时间:
2010-7-3 17:08
抱歉3连了,找到合适的脚本了
http://rpg.blue/forum.php?mod=vi ... &extra=page%3D1
还是感谢LSSS的帮助
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1