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

Project1

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

[难以理解的脚本]通过文件来获取主线任务提示文字

[复制链接]
梦石
0
星屑
105
在线时间
297 小时
注册时间
2009-1-7
帖子
216
跳转到指定楼层
1
发表于 2014-9-17 00:35:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
注:以下的所有内容适用于《RMVA传》,并不保证其他游戏的适用性,请慎重使用。

在本游戏中,每一个玩家都得选择一个主角进行游戏,在选择时用一个变量存储角色ID。

本游戏没有用到任务脚本,因此主线任务还是通过一个卷轴的形式体现。玩家使用主线任务卷轴时,游戏将根据玩家所选角色和游戏的进度来提示玩家下一步的进程。

每一个主角的主线游戏都放置在一个txt文件中,格式为id.txt

文件的内容格式如下:

弃用
1
从南边的水晶传送阵传送出去吧。您可以通过蓝
火圣杯和\C[14]森林女神\C[0]进行交流以获得奖励。尽管这
不是必须的。
此外,当使用掉\C[14]森林女神\C[0]的奖励后还可以通过对
话再次获得。
2
。。。。。。

其中数字表示任务序号,数字以下为该任务的提示,每三行就分一页。
脚本核心思想:
1.玩家在选择角色后,立刻打开文件,读取所有的内容并且创建一个二维数组,将每一个任务的所有提示按照序号进行存放。读取后关闭文件。
2.玩家如果读取文档,在还没有选择角色前没有动作,选择了角色后进行读取。读取后关闭文件。
3.玩家在使用主线任务卷轴时,从二维数组([任务ID][任务内容])中获取当前任务的所有提示内容,以三行为单位进行分页,每一页的第一行插入:“\\C[9]【提示】\\C[0]”。
4.分页分好后,使用$game_message(显示文章),将内容展示给玩家。

以下为代码:
读档:
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ DataManager
  4. #------------------------------------------------------------------------------
  5. #  数据库和游戏实例的管理器。所有在游戏中使用的全局变量都在这里初始化。
  6. #==============================================================================

  7. module DataManager
  8.   #--------------------------------------------------------------------------
  9.   # ● 生成各种游戏对象
  10.   #--------------------------------------------------------------------------
  11.   def self.create_game_objects
  12.     $game_temp          = Game_Temp.new
  13.     $game_system        = Game_System.new
  14.     $game_timer         = Game_Timer.new
  15.     $game_message       = Game_Message.new
  16.     $game_switches      = Game_Switches.new
  17.     $game_variables     = Game_Variables.new
  18.     $game_self_switches = Game_SelfSwitches.new
  19.     $game_actors        = Game_Actors.new
  20.     $game_party         = Game_Party.new
  21.     $game_troop         = Game_Troop.new
  22.     $game_map           = Game_Map.new
  23.     $game_player        = Game_Player.new
  24.     $game_others        = Game_Others.new #创建一个自定义对象
  25.   end
  26.   
  27.   #--------------------------------------------------------------------------
  28.   # ● 展开存档内容
  29.   # ● 根据角色ID打开相应的文件并且进行读取
  30.   #--------------------------------------------------------------------------
  31.   def self.extract_save_contents(contents)
  32.     $game_system        = contents[:system]
  33.     $game_timer         = contents[:timer]
  34.     $game_message       = contents[:message]
  35.     $game_switches      = contents[:switches]
  36.     $game_variables     = contents[:variables]
  37.     $game_self_switches = contents[:self_switches]
  38.     $game_actors        = contents[:actors]
  39.     $game_party         = contents[:party]
  40.     $game_troop         = contents[:troop]
  41.     $game_map           = contents[:map]
  42.     $game_player        = contents[:player]
  43.     if $game_variables[13] != 0
  44.       $game_others.Open($game_variables[13]);
  45.     end
  46.   end
  47. end
复制代码
玩家选择角色后:
  1. $game_others.Open("6");
复制代码
其中6为主角ID。

打开文件和显示任务内容:
  1. #这个脚本的目的是用来管理游戏中一些额外功能的脚本
  2. #这个类仿照默认脚本中以Game开头的类的写法
  3. #这个类在进入游戏(开始之前)创建一个全局变量$game_others,以随时调用
  4. #这个类的全局变量创建位置是:第11脚本第25行
  5. #这个类的作者是萧道成峰
  6. #这个类开始撰写的事件是2013-12-24

  7. class Game_Others
  8.   
  9.   #--------------------------------------------------------------------------
  10.   # ● 进行各种各样的初始化,主要用来初始化永久变量。
  11.   # ● 临时变量在各自的方法中初始化。
  12.   #--------------------------------------------------------------------------
  13.   def initialize
  14.     @strs = [];#存放某一个主角所有的主线任务提示的数组。
  15.   end
  16.   
  17.   #--------------------------------------------------------------------------
  18.   # ● 根据传入的角色ID,打开相应的文件并且返回所有主线任务提示数组
  19.   # ● 数组是一个二维数组,第一维存放任务ID,第二维存放任务提示内容
  20.   # ● @strs[0]表示第一个任务的所有提示文字
  21.   #--------------------------------------------------------------------------
  22.   def Open(id)
  23.     map_name = id.to_s;#利用当前地图的ID拼凑出文件名
  24.     #继续拼凑文件名并打开文件,注:文件的编码须是utf-8
  25.     file = File.open("Data/" + map_name + ".txt");
  26.     str = file.readlines();#逐行扫描,存入一个数组
  27.     str = str[1, str.length() - 1];#文件的第一行弃用
  28.     ss = [];#一个临时数组,被当作二维数组的第二维,记录一个任务的所有提示文字
  29.     str.each do |st|#开始逐个扫描数组
  30.       st = st[0, st.length() - 1];#每一行的最后一个字符为换行符,必须删去。
  31.       #如果判断是数字则表示要读取新的任务
  32.       if st.to_i.to_s == st#判断是否是数字
  33.         @strs[@strs.length] = ss;
  34.         ss.clear;
  35.         next;
  36.       end
  37.       ss[ss.length] = st;
  38.     end
  39.     file.close();#文件打开后要关闭
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # ● 使用主线任务卷轴时读取文件获取内容并进行显示文字
  43.   #--------------------------------------------------------------------------
  44.   def Request_id(id)
  45.     st = @strs[id - 1];#新建一个数组存放当前任务的所有提示
  46.     if $game_message.texts == []
  47.         i = 1;#一个计数器
  48.         st.each do |str|#开始逐个扫描数组
  49.           p i;
  50.           if i == 1#如果计数器为1则插入固定文本
  51.             $game_message.add("\\C[9]【提示】\\C[0]");
  52.           end
  53.           $game_message.add(str);#将处理好的文字插入信息准备显示
  54.           #由于一页信息只能显示4行,去掉固定文本的一行,实际能显示的内容只有3行
  55.           #超过3行就要换页
  56.           if i == 3
  57.             i = 1;
  58.             next;
  59.           end
  60.           i = i + 1;#计数器进行累加
  61.         end
  62.       end
  63.   end
  64. end
复制代码
创建一个公共事件,只需要如下自定义脚本:$game_others.Request_id($game_variables[2]);
其中$game_variables[2]代表第二号全局变量的值,在本游戏中代表游戏进程,也就是任务ID。
游戏群组:https://rpg.blue/forum.php?mod=group&fid=565在这里你可以看到我在制作游戏过程中分享的内容。
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-4-29 17:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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