设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2145|回复: 3
打印 上一主题 下一主题

[已经过期] 沉影大大 的传送点系统

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
65 小时
注册时间
2010-10-4
帖子
129
跳转到指定楼层
1
发表于 2010-12-11 19:45:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 ngngy 于 2010-12-11 19:46 编辑

帖子里的范例那个已经404了
谁有,能发我个么

点评

系统提示:请尽快结帖~  发表于 2010-12-16 22:05

Lv1.梦旅人

梦石
0
星屑
215
在线时间
5 小时
注册时间
2010-12-10
帖子
2
2
发表于 2010-12-13 13:33:57 | 只看该作者
传送点可以通过事件来做啊.不用写脚本的吧.嘛=A=坐等脚本=A=
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
336 小时
注册时间
2010-8-26
帖子
428
3
发表于 2010-12-13 16:10:56 | 只看该作者
回复 ngngy 的帖子
  1. #==============================================================================
  2. # 易用型传送点系统 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # 功能描述: ① 传送点上按确定键即激活传送点,各个已激活的传送点之间可相互传送.
  5. #           ② 指向当前所在地图的选项不传送; 要求金钱的地图,钱不够不传送.
  6. #           ③ 为节省位置,折成两列显示.
  7. #------------------------------------------------------------------------------
  8. # 使用说明: ① 复制脚本插入到main之前
  9. #           ② 传送点的事件脚本中写 $scene = Scene_Way_points.new(@event_id)
  10. #           ③ 给每张有传送点的地图取个像样的名称
  11. #           ④ 要求金钱的地图,在名称后添加",金钱数"(不包括引号),详见范例
  12. #           ⑤ 参数设定在脚本第17-22行
  13. #==============================================================================
  14. # 参数设定
  15. #==============================================================================
  16. module WP
  17.   WP_WIDTH = 160          # 单列地图选项的宽度(共两列)
  18.   WP_MAX = 10              # 传送窗体显示的传送点数
  19.   WP_ANIMATION = 367       # 传送时显示的动画 id
  20.   WP_HIDE_WINDOW = true   # 传送时隐藏窗体
  21.   WP_ICON = 153           # 地图选项的图标 id
  22.   # 您也可以为每个地图设置单独图标
  23.   SELF_ICON = false       # 打开此开关将描绘Icons文件夹下与地图名相同的图标
  24. end

  25. #==============================================================================
  26. # ■ Game_System
  27. #==============================================================================
  28. class Game_System
  29.   #--------------------------------------------------------------------------
  30.   # ● 定义实例变量
  31.   #--------------------------------------------------------------------------
  32.   attr_accessor :way_points        # 传送点选项
  33.   #--------------------------------------------------------------------------
  34.   # ● 初始化对象
  35.   #--------------------------------------------------------------------------
  36.   alias ini initialize
  37.   def initialize
  38.     ini;@way_points = []
  39.   end
  40. end

  41. #==============================================================================
  42. # □ Window_WP_Help
  43. #==============================================================================
  44. class Window_WP_Help < Window_Base
  45.   #--------------------------------------------------------------------------
  46.   # ○ 初始化对像
  47.   #--------------------------------------------------------------------------
  48.   def initialize(x, y)
  49.     super(x, y, WP::WP_WIDTH * 2, 80)
  50.     self.opacity  = 192
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ○ 设置文本
  54.   #     text1  : 地图名
  55.   #     text2  : 金钱数
  56.   #--------------------------------------------------------------------------
  57.   def set_text(text1, text2)
  58.     if text1 != @text1 or text2 != @text2
  59.       @text1 = text1
  60.       @text2 = text2
  61.       # 再描绘文本
  62.       self.contents.clear
  63.       self.contents.font.color = system_color
  64.       self.contents.draw_text(4, 0, self.width - 40, WLH, text1 + "传送点")
  65.       self.contents.font.color = normal_color
  66.       if text2 == 0
  67.         text2 = "免费传送"
  68.       else
  69.         text2 = "花费 " + text2.to_s + Vocab::gold
  70.       end
  71.       self.contents.draw_text(4, WLH, self.width - 40, WLH, text2, 2)
  72.     end
  73.     self.visible = true
  74.   end
  75. end

  76. #==============================================================================
  77. # □ Window_Way_Points
  78. #==============================================================================
  79. class Window_Way_Points < Window_Selectable
  80.   #--------------------------------------------------------------------------
  81.   # ○ 初始化
  82.   #     event_id  : 事件 id
  83.   #--------------------------------------------------------------------------
  84.   def initialize(event_id)
  85.     # 设定部分
  86.     setup($game_map.map_id, event_id)
  87.     @item_max = $game_system.way_points.size
  88.     # 计算 super 参数
  89.     width = WP::WP_WIDTH * 2
  90.     if WP::WP_MAX >= @item_max
  91.       height = (@item_max+1)/2*WLH
  92.     else
  93.       height = (WP::WP_MAX+1)/2*WLH
  94.     end
  95.     x = Graphics.width/2 - width/2
  96.     y = Graphics.height/2 - height/2 + 40
  97.     super(x, y, width, height + 32)
  98.     @column_max = 2
  99.     # 指定光标于当前地图选项
  100.     self.index = now_index($game_map.map_id)
  101.     self.opacity  = 192
  102.     refresh
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ○ 设定部分
  106.   #     map_id    : 地图 id
  107.   #     event_id  : 事件 id
  108.   #--------------------------------------------------------------------------
  109.   def setup(map_id, event_id)
  110.     # 获取地图信息
  111.     mapinfos = load_data("Data/MapInfos.rvdata")
  112.     # 地图名
  113.     map_name = mapinfos[map_id].name.split(/,/)[0]
  114.     # 传送费用(放空时为0)
  115.     cost = mapinfos[map_id].name.split(/,/)[1].to_i.abs
  116.     # way_points 结构
  117.     result = [map_id, event_id, map_name, cost]
  118.     # 不重复时添加点
  119.     unless $game_system.way_points.include? result
  120.       $game_system.way_points << result
  121.     end
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ○ 获取当前地图选项 index
  125.   #     map_id    : 地图 id
  126.   #--------------------------------------------------------------------------
  127.   def now_index(map_id)
  128.     for i in 0...$game_system.way_points.size
  129.       if $game_system.way_points[i][0] == map_id
  130.         return i
  131.       end
  132.     end
  133.     # 默认值为 0
  134.     return 0
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ○ 是否能传送
  138.   #     index     : 选项编号
  139.   #--------------------------------------------------------------------------
  140.   def transportable?(index)
  141.     # 未开启任何传送点时为假
  142.     return false if $game_system.way_points.empty?
  143.     map_id = $game_system.way_points[index][0]
  144.     cost = $game_system.way_points[index][3]
  145.     # 不是当前地图,且足够金钱时为真
  146.     return (map_id != $game_map.map_id and cost <= $game_party.gold)
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ○ 刷新
  150.   #--------------------------------------------------------------------------
  151.   def refresh
  152.     @item_max = $game_system.way_points.size
  153.     create_contents
  154.     for i in 0...@item_max
  155.       draw_item(i)
  156.     end
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ○ 描绘项目
  160.   #     index : 项目编号
  161.   #--------------------------------------------------------------------------
  162.   def draw_item(index)
  163.     rect = item_rect(index)
  164.     self.contents.clear_rect(rect)
  165.     way_point = $game_system.way_points[index]
  166.     if way_point != nil
  167.       rect.width -= 4
  168.       enabled = transportable?(index)
  169.       draw_map_name(way_point[2], rect.x, rect.y, enabled)
  170.     end
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ○ 描绘地图名
  174.   #     map_name     : 地图名
  175.   #     x            : 描绘目标 X 坐标
  176.   #     y            : 描绘目标 Y 坐标
  177.   #     enabled      : 有效标志。false 为描绘为半透明
  178.   #--------------------------------------------------------------------------
  179.   def draw_map_name(map_name, x, y, enabled = true)
  180.     if map_name != ""
  181.       if WP::SELF_ICON
  182.         # 地图名做图标文件名
  183.         draw_self_icon(map_name, x, y, enabled)
  184.       else
  185.         # 默认图标
  186.         draw_icon(WP::WP_ICON, x, y, enabled)
  187.       end
  188.       self.contents.font.color = normal_color
  189.       self.contents.font.color.alpha = enabled ? 255 : 128
  190.       self.contents.draw_text(x + 24, y, 172, WLH, map_name)
  191.     end
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ○ 描绘指定名图标
  195.   #     file_name  : 图标文件名
  196.   #     x          : 描绘目标 X 坐标
  197.   #     y          : 描绘目标 Y 坐标
  198.   #     enabled    : 有效标志。false 为半透明显示
  199.   #--------------------------------------------------------------------------
  200.   def draw_self_icon(file_name, x, y, enabled = true)
  201.     bitmap = Cache.load_bitmap("Graphics/Icons/", file_name)
  202.     rect = Rect.new(0, 0, 24, 24)
  203.     self.contents.blt(x, y, bitmap, rect, enabled ? 255 : 128)
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ○ 获取当前项
  207.   #--------------------------------------------------------------------------
  208.   def item
  209.     return $game_system.way_points[self.index]
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ○ 刷新帮助文本
  213.   #--------------------------------------------------------------------------
  214.   def update_help
  215.     # 地图名称
  216.     text1 = $game_system.way_points[self.index][2]
  217.     # 费用
  218.     text2 = $game_system.way_points[self.index][3]
  219.     @help_window.set_text(text1,text2)
  220.   end
  221. end

  222. #==============================================================================
  223. # □ Scene_Way_Point
  224. #==============================================================================
  225. class Scene_Way_Point < Scene_Base
  226.   #--------------------------------------------------------------------------
  227.   # ○ 初始化对像
  228.   #     event_id   : 当前事件 id
  229.   #--------------------------------------------------------------------------
  230.   def initialize(event_id)
  231.     @event_id = event_id
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ○ 开始处理
  235.   #--------------------------------------------------------------------------
  236.   def start
  237.     ##create_menu_background
  238.     # 为了显示动画
  239.     @map_sprite = Spriteset_Map.new
  240.     @way_points_window = Window_Way_Points.new(@event_id)
  241.     x = @way_points_window.x
  242.     y = @way_points_window.y - 80
  243.     @help_window = Window_WP_Help.new(x, y)
  244.     @way_points_window.help_window = @help_window
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ○ 更新画面
  248.   #--------------------------------------------------------------------------
  249.   def update
  250.     # 刷新窗口
  251.     @help_window.update
  252.     @way_points_window.update
  253.     # 按下取消键的情况下
  254.     if Input.trigger?(Input::B)
  255.       Sound.play_cancel
  256.       $scene = Scene_Map.new
  257.       return
  258.     end
  259.     # 按下确定键的情况下
  260.     if Input.trigger?(Input::C)
  261.       index = @way_points_window.index
  262.       # 排除无法传送的情况
  263.       unless @way_points_window.transportable?(index)
  264.         Sound.play_buzzer
  265.       else
  266.         # 传送
  267.         map_id = @way_points_window.item[0]
  268.         trans(map_id)
  269.         # 扣钱
  270.         $game_party.gain_gold(-$game_system.way_points[index][3])
  271.         # 动画(Iselia雪的方法)
  272.         $game_player.animation_id = WP::WP_ANIMATION
  273.         # vx不同于xp的动画刷新计算
  274.         duration = $data_animations[WP::WP_ANIMATION].frame_max * 4 + 1
  275.         duration.times do
  276.           Graphics.update
  277.           @map_sprite.update
  278.         end
  279.         $scene = Scene_Map.new
  280.         return
  281.       end
  282.     end
  283.   end
  284.   #--------------------------------------------------------------------------
  285.   # ○ 结束处理
  286.   #--------------------------------------------------------------------------
  287.   def terminate
  288.     ##dispose_menu_background
  289.     @map_sprite.dispose
  290.     @way_points_window.dispose
  291.     @help_window.dispose
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ○ 取得传送点坐标
  295.   #     map_id : 地图编号
  296.   #--------------------------------------------------------------------------
  297.   def way_point_xy(map_id)
  298.     new_map = load_data(sprintf("Data/Map%03d.rvdata", map_id))
  299.     index = @way_points_window.index
  300.     event_id = $game_system.way_points[index][1].to_i
  301.     return [new_map.events[event_id].x,new_map.events[event_id].y]
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ○ 传送
  305.   #     map_id : 地图编号
  306.   #--------------------------------------------------------------------------
  307.   def trans(map_id)
  308.     # 设定窗体可视性
  309.     @way_points_window.visible = @help_window.visible = !WP::WP_HIDE_WINDOW
  310.     event_xy = way_point_xy(map_id)
  311.     # 无法取得坐标,或移动中
  312.     unless event_xy == nil or $game_player.transfer?
  313.       $game_player.reserve_transfer(map_id, event_xy[0], event_xy[1], 0)
  314.     end
  315.   end
  316. end
复制代码

评分

参与人数 1星屑 +400 收起 理由
夕阳武士 + 400 认可

查看全部评分

[
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
114 小时
注册时间
2010-12-3
帖子
74
4
发表于 2010-12-14 21:00:26 | 只看该作者
-_- 我剛也是用這個腳本..之後兼並其他腳本後發現,名字顯示系統跟這個腳本有一丁點沖突,就是移動後NPC的名字依然在第二個地圖,要刷新一次才會消失.
第二,要使用大量的開關拉...
所以用事件來實現,把可以傳送的地方換成變量,可以做成登陸點的效果,然後傳送的時候,事件的特效也比較華麗,-_-能使用動畫的說..
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-10-1 06:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表