Project1

标题: 关于地图的显示名称以及修改敌人战斗图的问题 [打印本页]

作者: qq634488405    时间: 2013-2-23 14:26
标题: 关于地图的显示名称以及修改敌人战斗图的问题
想制作一个寻人的任务,XX在YY地方,YY为地图名字,那么地图的显示名称用什么来获取?
还有,敌人的性别随机,如何根据性别来修改数据库某个敌人的战斗图?
作者: love896624434    时间: 2013-2-23 18:12
地图名称默认会在进入该地图时,显示在游戏画面左上角的,lz玩的时候注意下就知道了。
如果你有设置世界地图的话,可以在进入世界地图的基础上,显示各地区地图名称,达到以下效果

这要借助一个脚本
  1. #==============================================================================
  2. # ★ RGSS3_ネームポップ Ver1.1
  3. #==============================================================================
  4. =begin

  5. 作者:tomoaky
  6. webサイト:ひきも記 (http://hikimoki.sakura.ne.jp/)

  7. イベント名かイベント実行内容の先頭に『注釈』コマンドで
  8. <namepop 文字列>
  9. と記述してください。
  10. イベントキャラクターの頭上に文字列が表示されます。

  11. イベント名で指定した場合はイベント全ページに適用されますが、
  12. 優先度は注釈コマンドの方が高くなっています。

  13. 时间名称上输入 <namepop X>    ,X为人名。

  14. 2011.12.16  Ver1.1
  15.   ・フォントの縁取り不透明度を設定項目に追加

  16. 2011.12.15  Ver1.0
  17.   公開

  18. =end
  19. $s_id = 1           #控制是否显示的开关




  20. #左边是范例,将事件名字设定为<namepop 小雅>
  21. #那么游戏中该事件头上显示的名字就是 小雅。如果该事件没有图标,名字会在事件中间显示。
  22. #==============================================================================
  23. # □ 設定項目
  24. #==============================================================================
  25. module TMNPOP
  26.   FONT_SIZE = 14          # フォントサイズ

  27. FONT_OUT_ALPHA = 255    # フォントの縁取り不透明度
  28.   end


  29. #==============================================================================
  30. # ■ Game_Character
  31. #==============================================================================
  32. class Game_Character
  33.   #--------------------------------------------------------------------------
  34.   # ● 公開インスタンス変数
  35.   #--------------------------------------------------------------------------
  36.   attr_accessor :namepop                  # ポップアップテキスト
  37.   #--------------------------------------------------------------------------
  38. end

  39. #==============================================================================
  40. # ■ Game_Event
  41. #==============================================================================
  42. class Game_Event < Game_Character
  43.   #--------------------------------------------------------------------------
  44.   # ● イベントページの設定をセットアップ
  45.   #--------------------------------------------------------------------------
  46.   alias tmnpop_game_event_setup_page_settings setup_page_settings
  47.   def setup_page_settings
  48.     tmnpop_game_event_setup_page_settings
  49.     if @list
  50.       @namepop = $1 if /<namepop\s*(\S+?)>/i =~ @event.name
  51.       @list.each do |list|
  52.         if list.code == 108 || list.code == 408
  53.           @namepop = $1 if /<namepop\s*(\S+?)>/i =~ list.parameters[0]
  54.         else
  55.           break
  56.         end
  57.       end
  58.     end
  59.   end
  60. end

  61. #==============================================================================
  62. # ■ Sprite_Character
  63. #==============================================================================
  64. class Sprite_Character < Sprite_Base
  65.   #--------------------------------------------------------------------------
  66.   # ● 解放
  67.   #--------------------------------------------------------------------------
  68.   alias tmnpop_sprite_character_dispose dispose
  69.   def dispose
  70.     dispose_namepop
  71.     tmnpop_sprite_character_dispose
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● フレーム更新
  75.   #--------------------------------------------------------------------------
  76.   alias tmnpop_sprite_character_update update
  77.   def update
  78.     tmnpop_sprite_character_update
  79.     update_namepop
  80.     if @character.namepop != @namepop
  81.       @namepop = @character.namepop
  82.       start_namepop
  83.     end
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ○ namepopの開始
  87.   #--------------------------------------------------------------------------
  88.   def start_namepop
  89.     dispose_namepop
  90.     return if @namepop == "none" || @namepop == nil
  91.     @namepop_sprite = ::Sprite.new(viewport)
  92.     h = TMNPOP::FONT_SIZE + 4
  93.     @namepop_sprite.bitmap = Bitmap.new(h * 10, h)
  94.     @namepop_sprite.bitmap.font.size = TMNPOP::FONT_SIZE
  95.     @namepop_sprite.bitmap.font.out_color.alpha = TMNPOP::FONT_OUT_ALPHA
  96.     @namepop_sprite.bitmap.draw_text(0, 0, h * 10, h, @namepop, 1)
  97.     @namepop_sprite.ox = h * 5
  98.     @namepop_sprite.oy = h
  99.     update_namepop
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ○ namepopの更新
  103.   #--------------------------------------------------------------------------
  104.   def update_namepop
  105.     if @namepop_sprite
  106.       @namepop_sprite.x = x
  107.       @namepop_sprite.y = y - height
  108.       @namepop_sprite.z = z + 200
  109.     end
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ○ namepopの解放
  113.   #--------------------------------------------------------------------------
  114.   def dispose_namepop
  115.     if @namepop_sprite
  116.       @namepop_sprite.bitmap.dispose
  117.       @namepop_sprite.dispose
  118.       @namepop_sprite = nil
  119.     end
  120.   end
  121. end
复制代码
我在脚本31和32行加入了中文解说,具体的设定如下图

看之前的第一张图,我这个是没有设定图标的,所以名字在中间显示。这样就可以比较明确的指引玩家找到要去的地图了。
至于说遇敌性别随机的问题,目前我没有更好的办法,我如果需要的话就会制作两个不同性别的相似怪物,出现权重就自由调整了呗。
或者其他大神有办法吧,我也只是个新手,呵呵。
作者: qq634488405    时间: 2013-2-23 18:28
love896624434 发表于 2013-2-23 18:12
地图名称默认会在进入该地图时,显示在游戏画面左上角的,lz玩的时候注意下就知道了。
如果你有设置世界地 ...

辛苦你了,先谢了,不过我是说做个NPC会发布寻人任务,他会说XX在YY那里,YY是地图的名字,如何使用脚本来获取YY,Game_Map有个display_name方法,只是不知道怎么来调用,用$game_map[n].display_name吗?
作者: love896624434    时间: 2013-2-23 18:33
qq634488405 发表于 2013-2-23 18:28
辛苦你了,先谢了,不过我是说做个NPC会发布寻人任务,他会说XX在YY那里,YY是地图的名字,如何使用脚本 ...

额,脚本忙路过…………
不过关于这个任务的话,我的想法是不能发布任务的时候直接写上这个人所在地图的名字吗?
作者: qq634488405    时间: 2013-2-23 18:41
love896624434 发表于 2013-2-23 18:33
额,脚本忙路过…………
不过关于这个任务的话,我的想法是不能发布任务的时候直接写上这个人所在地图的 ...

这样也行,只是,地图少倒没事,地图多了就麻烦了,寻找的人出现的地图是随机的,好像会非常的麻烦
作者: tseyik    时间: 2013-2-23 18:49
完全随机是不可能,你一定要定下一個範圍,
不定下一個範圍,
電腦不可能知你有多小張地図可供選擇

作者: love896624434    时间: 2013-2-23 18:49
qq634488405 发表于 2013-2-23 18:41
这样也行,只是,地图少倒没事,地图多了就麻烦了,寻找的人出现的地图是随机的,好像会非常的麻烦 ...

那么是不是每一个地图寻找的人都是不同的,还是同一个人会出现在不同地图?额,也就是事件,要找的人,那个人的事件是每一个目标地图都有这么一个事件,还是一个事件会根绝任务的随机性随机飞到其他地图?不管是哪一个,应该都要运用到随机吧?不知道有木有更方便的,我用的时候是随机一个数字的,然后赋予变量,每个地图一个数字代号,那么假如人物随即到12号地图,那么变量就会被赋予12,然后发布任务的人会说出的地图所在就根据变量代表的数值说出不同的地名。
作为新手的我,会用一个笨方法,就是在发布任务的人那里设置分歧,很多分歧,每个分歧根据变量决定选择哪一项输出。这样虽然第一次书写麻烦了些,但是只要记住每个地图代表的编号基本就一劳永逸了吧。
抱歉,鄙人实在是菜鸟级的,只能想到这种方法,不知道对你有木有帮助了。
作者: qq634488405    时间: 2013-2-23 19:06
tseyik 发表于 2013-2-23 18:49
完全随机是不可能,你一定要定下一個範圍,
不定下一個範圍,
電腦不可能知你有多小張地図可供選擇

范围就是工程内所有的地图。。。。就是不知道怎么读取地图的名字
作者: qq634488405    时间: 2013-2-23 19:12
love896624434 发表于 2013-2-23 18:49
那么是不是每一个地图寻找的人都是不同的,还是同一个人会出现在不同地图?额,也就是事件,要找的人,那 ...

所以地图一多就麻烦了。。用脚本的话,也麻烦,建一个数组$map[],数组的内容是地图名,然后随机赋值给变量,然后把数据库角色里的一个角色的名字用脚本改为数组中的地图名字,这样用事件显示文字就不用那么多分歧了,只是在建数组的时候一样要输入那么多地名。
作者: love896624434    时间: 2013-2-23 19:30
qq634488405 发表于 2013-2-23 19:12
所以地图一多就麻烦了。。用脚本的话,也麻烦,建一个数组$map[],数组的内容是地图名,然后随机赋值给变 ...

基本明白了,只是数组不会用。那样的话,总之你就选个最简单的方法呗,要想不麻烦目前恐怕也没什么办法,做游戏本来就麻烦啊,要不然就不会有工作室存在了,一个人负责全部方面的话真是太受不了了的说。
作者: j433463    时间: 2013-2-23 20:39
$game_map[n].display_name 是不可行的,但在 Game_map 中不是有这一段吗:
  1. @map_id = map_id
  2. @map=load_data(sprintf("Data/Map%03d.rvdata2",@map_id))
复制代码
这就是读取指定 map_id 的地图内容,您也可以照搬来用在自己的脚本中,
若要取得地图 Map002 的地图内容,等号右边 map_id 就改成 2 啰,
而 @map.display_name 就是指定的地图名了。
作者: qq634488405    时间: 2013-2-23 20:44
j433463 发表于 2013-2-23 20:39
$game_map[n].display_name 是不可行的,但在 Game_map 中不是有这一段吗:这就是读取指定 map_id 的地图内 ...

谢了,那么请教一下敌人的战斗图如何用脚本修改修改?用$data_enemies[n].battler_name="文件名"?




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1