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

Project1

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

[已经解决] 寻宝追加

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2386
在线时间
660 小时
注册时间
2017-10-13
帖子
53
跳转到指定楼层
1
发表于 2017-11-30 20:29:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
https://rpg.blue/forum.php?mod=v ... =%E5%AF%BB%E5%AE%9D

原帖地址。代码如下谁能帮我看看如何追加显示XY坐标。
  1. #=============================================================================
  2. # ■ 地图寻宝 ■             --> by 芯☆淡茹水
  3. #=============================================================================
  4. # 复制脚本,插入到 main 前 。
  5. #----------------------------------------------------------------------------
  6. # 挖宝流程:接到挖宝任务 --> 前往埋宝藏的地图 --> 使用“藏宝图”查看大概位置
  7. #           --> 使用挖宝工具。根据提示,直到挖到宝物。
  8. #----------------------------------------------------------------------------
  9. # 接取挖宝任务:事件 --> 脚本:
  10. #                    $game_party.get_treasure(埋宝物的地图ID, 挖宝成功后得到的物品ID)
  11. #
  12. # 注销挖宝任务:事件 --> 脚本:
  13. #                    $game_party.give_up_treasure
  14. #
  15. #
  16. # 以下两条使用物品关联公共事件,在公共事件 --> 脚本 里写上:
  17. #
  18. # 查看宝物地点:$game_party.look_map
  19. #
  20. # 使用挖宝工具:$game_party.treasure
  21. #
  22. #
  23. # 更为详细的设置请参照范例。
  24. #-----------------------------------------------------------------------------
  25. # ● 设置
  26. #---------------------------------------------------------
  27. # “藏宝图”(物品ID)和 挖掘宝物的工具(物品ID)必须设置,
  28. #用于接受任务和注销任务时的 给予和回收 。
  29. #---------------------------------------------------------
  30. # “藏宝图”(物品ID),用于查看藏宝地点。
  31. TREASURE_MAP_ID = 147

  32. # 挖掘宝物的工具(物品ID)。
  33. DIG_ITEM_ID = 148

  34. # 挖到宝物后,角色播放的动画ID。
  35. TREASURE_AN_ID = 290
  36. #==============================================================================
  37. class Treasure
  38.   #--------------------------------------------------------------------------
  39.   def initialize(map_id, place)
  40.     @map_id = map_id; @place = place
  41.   end
  42.   #--------------------------------------------------------------------------
  43.   def main
  44.     @spriteset = Spriteset_Map.new
  45.     @t = Window_Treasure.new(@map_id, @place)
  46.     Graphics.transition
  47.     loop do
  48.       Graphics.update
  49.       Input.update
  50.       update
  51.       if $scene != self
  52.         break
  53.       end
  54.     end
  55.     Graphics.freeze
  56.     @spriteset.dispose
  57.     @t.dispose
  58.   end
  59.   #--------------------------------------------------------------------------
  60.   def update
  61.     @t.update
  62.     if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  63.       $game_system.se_play($data_system.decision_se)
  64.       $scene = Scene_Map.new
  65.     end
  66.   end
  67. end
  68. #===============================================================================
  69. class Window_Treasure < Window_Base
  70.   #--------------------------------------------------------------------------
  71.   def initialize(map_id, place)
  72.     super(184, 122, 272, 272)
  73.     self.contents = Bitmap.new(width - 32, height - 32)
  74.     @map_name = Window_Base.new(184, 58, 272, 64)
  75.     @map_name.contents = Bitmap.new(@map_name.width - 32, @map_name.height - 32)
  76.     @viewport = Viewport.new(192, 130, 256, 256)
  77.     @viewport.z = 999
  78.     @map_id = map_id
  79.     @place = place
  80.     refresh
  81.   end
  82.   #------------------------------------------------------------------------
  83.   def refresh
  84.     @map_name.contents.clear
  85.     names = load_data("Data/MapInfos.rxdata")
  86.     map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
  87.     txt = "藏宝地:#{names[@map_id].name.split(/#/)[1]}"
  88.     @map_name.contents.draw_text(0, 0, 260, 32, txt)
  89.     @tilemap = Tilemap.new(@viewport)
  90.     tileset = $data_tilesets[map.tileset_id]
  91.     @tilemap.tileset = RPG::Cache.tileset(tileset.tileset_name)
  92.     autotile_names = tileset.autotile_names
  93.     for i in 0..6
  94.       autotile_name = tileset.autotile_names[i]
  95.       @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_names[i])
  96.     end
  97.     @tilemap.map_data = map.data
  98.     @tilemap.priorities = tileset.priorities
  99.     dx = [0, [@place[0] * 128 - (128 - 16) * 4, (map.width - 8) * 128].min].max
  100.     dy = [0, [@place[1] * 128 - (128 - 16) * 4, (map.height - 8) * 128].min].max
  101.     @tilemap.ox = dx / 4
  102.     @tilemap.oy = dy / 4
  103.   end
  104.   #-------------------------------------------------------------------------
  105.   def dispose
  106.     super
  107.     @map_name.dispose
  108.     @tilemap.tileset.dispose
  109.     for i in 0..6
  110.       @tilemap.autotiles[i].dispose
  111.     end
  112.     @tilemap.dispose
  113.     @viewport.dispose
  114.   end
  115. end
  116. #==============================================================================
  117. class Game_Party
  118.   #--------------------------------------------------------------------------
  119.   alias add_initialize_xdrs initialize
  120.   def initialize
  121.     add_initialize_xdrs
  122.     @treasure_place = []
  123.     @treasure_map_id = 0
  124.     @treasure_item_id = 0
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   def passable?(map, x, y, d)
  128.     for i in map.events.keys
  129.       if map.events[i].x == x and map.events[i].y == y
  130.         return false
  131.       end
  132.     end
  133.     tileset = $data_tilesets[map.tileset_id]
  134.     bit = (1 << (d / 2 - 1)) & 0x0f
  135.     # 从层按从上到下的顺序调查循环
  136.     for i in [2, 1, 0]
  137.       # 取得元件 ID
  138.       tile_id = map.data[x, y, i]
  139.       # 取得元件 ID 失败
  140.       if tile_id == nil
  141.         # 不能通行
  142.         return false
  143.       # 如果障碍物的接触被设置的情况下
  144.       elsif tileset.passages[tile_id] & bit != 0
  145.         # 不能通行
  146.         return false
  147.       # 如果全方向的障碍物的接触被设置的情况下
  148.       elsif tileset.passages[tile_id] & 0x0f == 0x0f
  149.         # 不能通行
  150.         return false
  151.       # 这以外的优先度为 0 的情况下
  152.       elsif tileset.priorities[tile_id] == 0
  153.         # 可以通行
  154.         return true
  155.       end
  156.     end
  157.     # 可以通行
  158.     return true
  159.   end
  160.   #-------------------------------------------------------------------------
  161.   def get_treasure(map_id, item_id)
  162.     if @treasure_map_id > 0
  163.       $game_temp.message_text = "请先注销以前的寻宝任务,才可以接新任务。"
  164.       return
  165.     end
  166.     unless FileTest.exist?(sprintf("Data/Map%03d.rxdata", map_id))
  167.       raise "请输入正确的地图ID!确认地图 #{map_id} 是否存在。"
  168.     end
  169.     @treasure_map_id = map_id
  170.     map = load_data(sprintf("Data/Map%03d.rxdata", map_id))
  171.     x = rand (map.width-10) + 5
  172.     y = rand (map.height-10) + 5
  173.     until passable?(map,x,y,0)
  174.       x = rand (map.width-10) + 5
  175.       y = rand (map.height-10) + 5
  176.     end
  177.     @treasure_place = [x,y]
  178.     @treasure_item_id = item_id
  179.     gain_item(TREASURE_MAP_ID, 1)
  180.     gain_item(DIG_ITEM_ID, 1)
  181.     $game_system.se_play($data_system.shop_se)
  182.     $game_temp.message_text = "接取任务成功。
  183.     获得物品:#{$data_items[TREASURE_MAP_ID].name}, #{$data_items[DIG_ITEM_ID].name}。"
  184.   end
  185.   #-------------------------------------------------------------------------
  186.   def look_map
  187.     if @treasure_map_id == 0
  188.       $game_temp.message_text = "该物品已失效。"
  189.       lose_item(TREASURE_MAP_ID, 1)
  190.       lose_item(DIG_ITEM_ID, 1)
  191.       return
  192.     end
  193.     $scene = Treasure.new(@treasure_map_id, @treasure_place)
  194.   end
  195.   #-------------------------------------------------------------------------
  196.   def treasure
  197.     if @treasure_map_id == 0
  198.       $game_temp.message_text = "物品无法使用!"
  199.       lose_item(TREASURE_MAP_ID, 1)
  200.       lose_item(DIG_ITEM_ID, 1)
  201.       return
  202.     end
  203.     if $game_map.map_id != @treasure_map_id or range > 16
  204.       $game_temp.message_text = "宝物不在附近!"
  205.       return
  206.     end
  207.     if range == 0
  208.       $game_player.animation_id = TREASURE_AN_ID
  209.       $game_temp.message_text = "恭喜您获得宝物: #{$data_items[@treasure_item_id].name}"
  210.       gain_item(@treasure_item_id, 1)
  211.       @treasure_place = []
  212.       @treasure_map_id = 0
  213.       @treasure_item_id = 0
  214.       lose_item(TREASURE_MAP_ID, 1)
  215.       lose_item(DIG_ITEM_ID, 1)
  216.       return
  217.     end
  218.     txt1 = case range
  219.            when 9..16 :"极远处。"
  220.            when 4..8  :"很近处。"
  221.            when 1..3  :"极近处。"
  222.            end
  223.     if $game_player.x > @treasure_place[0]
  224.       if $game_player.y > @treasure_place[1]
  225.         txt2 = "左上方"
  226.       elsif $game_player.y < @treasure_place[1]
  227.         txt2 = "左下方"
  228.       else
  229.         txt2 = "左方"
  230.       end
  231.     elsif $game_player.x < @treasure_place[0]
  232.       if $game_player.y > @treasure_place[1]
  233.         txt2 = "右上方"
  234.       elsif $game_player.y < @treasure_place[1]
  235.         txt2 = "右下方"
  236.       else
  237.         txt2 = "右方"
  238.       end
  239.     else
  240.       if $game_player.y > @treasure_place[1]
  241.         txt2 = "上方"
  242.       else
  243.         txt2 = "下方"
  244.       end
  245.     end
  246.     $game_temp.message_text = txt2 + txt1
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   def range
  250.     ($game_player.x - @treasure_place[0]).abs +
  251.     ($game_player.y - @treasure_place[1]).abs
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   def give_up_treasure
  255.     if @treasure_map_id == 0
  256.       $game_temp.message_text = "你还没接寻宝任务!"
  257.       return
  258.     end
  259.     @treasure_place = []
  260.     @treasure_map_id = 0
  261.     @treasure_item_id = 0
  262.     lose_item(TREASURE_MAP_ID, 1)
  263.     lose_item(DIG_ITEM_ID, 1)
  264.     $game_temp.message_text = "注销了寻宝任务。"
  265.   end
  266. end
  267. #==============================================================================
复制代码



Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

2
发表于 2017-11-30 22:05:12 | 只看该作者
  1. txt = "藏宝地:#{names[@map_id].name.split(/#/)[1]}"
复制代码
改这里

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 chd聚聚总是迷迷糊糊就解决了问题.

查看全部评分

[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2386
在线时间
660 小时
注册时间
2017-10-13
帖子
53
3
 楼主| 发表于 2017-11-30 23:42:12 | 只看该作者

我知道是这里,主要是改成啥能显示
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

4
发表于 2017-12-1 11:30:09 | 只看该作者
huangke 发表于 2017-11-30 23:42
我知道是这里,主要是改成啥能显示
  1. elsif $game_player.x < @treasure_place[0]
  2.       if $game_player.y > @treasure_place[1]
复制代码

这是藏宝点和角色位置的距离判定,所以

@treasure_place[0]和@treasure_place[1]就是藏宝点的x坐标和y坐标
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2386
在线时间
660 小时
注册时间
2017-10-13
帖子
53
5
 楼主| 发表于 2017-12-1 16:44:52 | 只看该作者
chd114 发表于 2017-12-1 11:30
这是藏宝点和角色位置的距离判定,所以

@treasure_place[0]和@treasure_place[1]就是藏宝点的x坐标和y ...

无法显示啊请。如何转换为坐标显示。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

6
发表于 2017-12-1 18:42:40 | 只看该作者
huangke 发表于 2017-12-1 16:44
无法显示啊请。如何转换为坐标显示。

是出错还是什么?
@treasure_place[0]和@treasure_place[1]肯定是可以显示的···你是不是哪里弄错了

点评

已解决 需要定义一个调用  发表于 2017-12-1 20:09
不显示坐标啊。  发表于 2017-12-1 18:55
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 16:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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