Project1
标题:
地图传送出现问题,求助高手
[打印本页]
作者:
a554187203
时间:
2010-8-21 21:55
标题:
地图传送出现问题,求助高手
当有2个传送项目时,要很多次才能移动光标,而3个传送项目的时候,就没有问题了,但是第四个又出现问题
#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
# 自定义内容解释:
# TOWNS[编号]=["地名,可以随便写",开关编号,[传送去的地图id,传送去的地图x,
# 传送去的地图y],角色朝向]
#
# 编号请按照0、1、2、3……顺序往下排布
# 当编号的开关打开的时候,才可以选择这个传送地点
# 角色朝向,2为下,4为左,6为右,8为上,具体可以参考自己数字小键盘的方向和数字关系
# 如果是其他方向请自己改。
#
# 需要制作脚本,请联系superufo
#
# 使用方法:在需要传送的传送门、传送石、传送羽毛、传送旅店一类的地方使用公共事件:
# 呼叫脚本:$scene = Scene_Teleport.new
#
# 制作者:柳柳
#==============================================================================
TOWNS=[]
TOWNS[0]=["隆兴镇",91,[4,0,5],2]
TOWNS[1]=["回村子",92,[2,29,2],2]
TOWNS[2]=["贾拉山脉",93,[34,9,10],8]
TOWNS[3]=["苏泊尔湖",94,[52,15,38],8]
TOWNS[4]=["宝石平原",95,[40,6,23],8]
TOWNS[5]=["梦幻之地",96,[46,9,16],8]
TOWNS[6]=["乌卡雪山",97,[46,9,16],8]
TOWNS[7]=["拉苏河",98,[46,9,16],8]
TOWNS[8]=["奇遇之海",99,[46,9,16],8]
TOWNS[9]=["纳奥湖",100,[46,9,16],8]
TOWNS[10]=["克莫伐木场",101,[46,9,16],8]
TOWNS[11]=["阿罗工房",102,[46,9,16],8]
TOWNS[12]=["黎明皇家港",103,[46,9,16],8]
#==============================================================================
# ■ Window_Teleport
#------------------------------------------------------------------------------
# 处理传送的窗口
#==============================================================================
class Window_Teleport < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
super(640,640,64,64)
self.contents = Bitmap.new(width, height)
self.opacity = 180
get_towns
draw_towns
@column_max = 1
end
#--------------------------------------------------------------------------
# ● 获取可到达的城镇和窗口大小
#--------------------------------------------------------------------------
def get_towns
@carol3_towns = []
@width_temp = 0
@cont_use = false
for town in TOWNS
if $game_switches[town[1]]==true
@carol3_towns.push(town)
if contents.text_size(town[0]).width >= @width_temp
@width_temp = contents.text_size(town[0]).width
end
end
end
@item_max = @carol3_towns.size
if @item_max == 0
@carol3_towns[0] = ["现在没有已知的地区可探索!",1,[1,1,1]]
$game_player.move_up
@width_temp = contents.text_size(@carol3_towns[0][0]).width
@item_max = 1
@cont_use = true
end
self.width = [@width_temp+32,416].min
self.height = [(@item_max+1)*32,360].min
self.x = (544-self.width)/2
self.y = (416-self.height)/2
self.contents = Bitmap.new(width-32,row_max*WLH)
end
#--------------------------------------------------------------------------
# ● 描绘城镇名称
#--------------------------------------------------------------------------
def draw_towns
for i in 0...@carol3_towns.size
self.contents.draw_text(0,i*WLH,@width_temp,WLH,@carol3_towns[i][0],1)
end
end
#--------------------------------------------------------------------------
# ● 返回的内容
#========================================================================
# ● 地图编号
#--------------------------------------------------------------------------
def map_id
return @carol3_towns[self.index][2][0]
end
#--------------------------------------------------------------------------
# ● 地图x坐标
#--------------------------------------------------------------------------
def map_x
return @carol3_towns[self.index][2][1]
end
#--------------------------------------------------------------------------
# ● 地图y坐标
#--------------------------------------------------------------------------
def map_y
return @carol3_towns[self.index][2][2]
end
#--------------------------------------------------------------------------
# ● 角色朝向
#--------------------------------------------------------------------------
def map_direction
return @carol3_towns[self.index][3]
end
#--------------------------------------------------------------------------
# ● 判断是否一个城市都没有
#--------------------------------------------------------------------------
def cant_use?
return @cont_use
end
end
#==============================================================================
# ■ Scene_Teleport
#------------------------------------------------------------------------------
# 处理传送执行的类
#==============================================================================
class Scene_Teleport < Scene_Base
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def start
Sound.play_decision
@carol3_trans_white = false
@carol3_map_sprite = Spriteset_Map.new
@carol3_teleport_window = Window_Teleport.new
if @carol3_teleport_window.cant_use?
@carol3_teleport_window.index = -1
else
@carol3_teleport_window.index = 0
end
end
def terminate
super
@carol3_teleport_window.dispose
end
def update
super
@carol3_teleport_window.update
carol3_update
end
def update_scene
@carol3_teleport_window.active = true
$game_player.reserve_transfer(@carol3_teleport_window.map_id, @carol3_teleport_window.map_x, @carol3_teleport_window.map_y, @carol3_teleport_window.map_direction)
$game_map.autoplay
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def carol3_update
@carol3_teleport_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
$game_player.move_up
return
end
if Input.trigger?(Input::C)
if @carol3_teleport_window.index == -1
Sound.play_cancel
$scene = Scene_Map.new
return
else
Audio.se_play("Audio/SE/" + "Teleport",100,100)
update_scene
return
end
end
end
end
#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
复制代码
作者:
wangswz
时间:
2010-8-21 22:05
#==============================================================================
# ★ 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],
[1, "草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
复制代码
作者:
a554187203
时间:
2010-8-21 22:11
回复
wangswz
的帖子
这个还可以,可是有些不方便,想要直接在地图上事件出现的
作者:
luowx
时间:
2010-8-21 22:41
提示:
作者被禁止或删除 内容自动屏蔽
作者:
luowx
时间:
2010-8-22 03:56
提示:
作者被禁止或删除 内容自动屏蔽
作者:
qq464154015
时间:
2010-8-22 06:05
好吧。。。我没看懂。
作者:
luowx
时间:
2010-8-22 10:16
提示:
作者被禁止或删除 内容自动屏蔽
作者:
沉影不器
时间:
2010-8-22 11:37
提示:
作者被禁止或删除 内容自动屏蔽
作者:
luowx
时间:
2010-8-22 11:40
提示:
作者被禁止或删除 内容自动屏蔽
作者:
luowx
时间:
2010-8-22 11:40
提示:
作者被禁止或删除 内容自动屏蔽
作者:
沉影不器
时间:
2010-8-22 12:03
提示:
作者被禁止或删除 内容自动屏蔽
作者:
luowx
时间:
2010-8-22 12:08
提示:
作者被禁止或删除 内容自动屏蔽
作者:
a554187203
时间:
2010-8-22 17:56
回复
沉影不器
的帖子
而且,你的传送系统我也看了的,可是我想不设置某个地方到某个地方之间的路程
作者:
luowx
时间:
2010-8-22 18:01
提示:
作者被禁止或删除 内容自动屏蔽
作者:
沉影不器
时间:
2010-8-27 20:24
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1